【问题标题】:How can I trigger servlet while Tomcat starting time [duplicate]如何在 Tomcat 启动时间触发 servlet [重复]
【发布时间】:2013-09-16 19:04:45
【问题描述】:

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

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

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

为此,我尝试使用servletContextListenerclass 使用以下代码。

 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 代码。

上面的方法我试过了,还是不行。

任何人都可以建议我。

谢谢。

【问题讨论】:

    标签: java apache servlets tomcat7


    【解决方案1】:

    你应该在一个实现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,在此之前您需要在 web.xml 中定义 &lt;listener&gt; 元素。

    【讨论】:

    • 你的意思是我需要再写一个java文件吗?基本上我不是Java开发人员,所以你能解释清楚吗?我需要在我的WebApps/firstApplication/WEB-INF/web.xml中定义Listener元素。
    • 是的,这将是一个新的类(文件)。不,您不需要在 web.xml 中定义 &lt;listener&gt; 元素,@WebListener 注释就足够了(如果您使用 Java EE 6 - 您可能会这样做)。
    • 我根据您的建议用我尝试过的方法修改了我的问题。它不起作用。您能检查一下它是否正确。
    • 你真的不能扩展 HttpServlet 所以从你的监听器中删除那个声明,它应该可以工作。你的监听器根本不是一个 servlet,它只是一个监听器,它允许你在服务器启动或结束时执行一些代码。
    • 谢谢你.. 我明白了,没有 servlet 也能正常工作
    【解决方案2】:

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

    谢谢

    【讨论】:

    • 基本上我不是Java 开发人员。如果你知道任何关于这方面的教程,或者你能用我的名字清楚地解释一下(我在我的问题中提到的)。
    • 此链接将帮助您了解 contextlistner 的基础知识 - link
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-21
      • 2011-07-17
      • 2019-05-17
      • 2011-07-03
      • 1970-01-01
      • 2011-05-09
      • 2012-06-07
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多