如何在Tomcat启动时触发servlet

时间:2013-09-16 19:04:46

标签: java apache servlets tomcat7

我们开发了一个项目名称FirstApplication,用于发送,使用来自Activemq的消息并部署在Tomcat7中。部署后,我们只需触发http://localhost:8080/FirstApplication/PackageName/SecondConsumer链接一次到目前为止一切都很好。

我怀疑,稍后如果我们重新启动服务器,第一次我们必须触发该servlet对应的链接。而不是这样做,我想配置。

注意:我想要的是,只要Tomcat server start.servlet放在WebApps/FirstApplication/WEB-INF/src/classes/PackageName/SecondConsumer.java下,就应该自动评估servlet。

为此,我使用servletContextListener类尝试了以下代码。

 public class SecondConsumer extends HttpServlet implements ServletContextListener{
 @Override
 protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   //my business code
 }
 @Override
 public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

 }

 @Override
 public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub

 }
}

并以下列方式在我的<Listener>文件中添加了web.xml(which is placed under WebApps/FirstApplication/WEB-INF/web.xml)

    <listener>
    <listener-class>PackageName.SecondConsumer</listener-class>
   </listener>

如果你观察我的代码,我没有在contextInitialized and contextDestroyed方法下实现任何代码。我想在server开始时评估这个servlet代码。

我试着用上面的方法,它不起作用。

请有人建议我。

感谢。

3 个答案:

答案 0 :(得分:4)

你应该在实现ServletContextListener的类中进行初始化,所以你需要这样的东西

@WebListener
public class AppServletContextListener implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("ServletContextListener destroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
         //do your init steps here  
    }
}

只要您的服务器启动或停止,这段代码就会执行。请注意,WebListener注释仅适用于Java EE 6,在此之前您需要在<listener>中定义web.xml元素。

答案 1 :(得分:1)

Tomcat在运行时创建一个servlet实例,所以如果你想调用servlet,请使用在运行tomcat时实际触发的上下文列表器类。

谢谢

答案 2 :(得分:0)

我不太确定,你想要什么。如果您只是想在启动tomcat时执行代码,则可以配置ServletContextListener