【问题标题】:Execute servlet on startup of the application在应用程序启动时执行 servlet
【发布时间】:2015-06-08 09:32:37
【问题描述】:

我使用 JSP 构建了一个 Web 应用程序,并且在我的 servlet 中有:

public class MyServlet extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

           init();        
           HttpSession session = request.getSession(true);
           //more code...
    }
}

到目前为止,当 JSP 页面像 <a href="MyServlet.."> 一样调用它时,我的 serlvet 被调用。我想要的是每当应用程序启动时,servlet 也会被执行。我可以在我的第一页有一个按钮,比如“开始”,然后在那里调用 servlet。但是,我可以避免这种情况吗?

【问题讨论】:

  • 你认为什么是“开始”? servlet容器启动的时间点还是用户第一次访问应用程序的时间点?
  • 当你将收到一个HTTP请求时调用一个Servlet,你为什么要在应用程序启动时自动调用它,有什么具体的期望吗?
  • 好的!我有一些方法可以检查一些东西,所以我希望在应用程序第一次启动时检查它们。

标签: java servlets


【解决方案1】:

无论你在启动时要做什么,都应该由实现ServletContextListener的类来完成,所以你应该写这样一个类,例如:

public class MyContextListener 
           implements ServletContextListener{

  @Override
  public void contextDestroyed(ServletContextEvent arg0) {
    //do stuff
  }

  @Override
  public void contextInitialized(ServletContextEvent arg0) {
    //do stuff before web application is started
  }
}

那么你应该在web.xml中声明它:

<listener>
   <listener-class>
      com.whatever.MyContextListener 
   </listener-class>
</listener>

【讨论】:

    【解决方案2】:

    您可以在Tomcat的web.xml(或类似服务器中的相应配置文件)中配置它,如下所示使用标签&lt;load-on-startup&gt;

    <servlet>
        <servlet-name>MyOwnServlet</servlet-name>
        <servlet-class>MyServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
     </servlet>
    

    【讨论】:

      【解决方案3】:

      在我看来,一个好方法是实现一个 Servlet 上下文监听器。它监听应用程序的启动和关闭。

      public class YourListener implements javax.servlet.ServletContextListener {
      
          public void contextInitialized(ServletContextEvent sce) {
          }
      
          public void contextDestroyed(ServletContextEvent sce) {
          }
      }
      

      然后,您在 web.xml () 中或使用 @WebServletContextListener 注释配置侦听器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多