Jsp 如何在启动时自动运行类

Jsp 如何在启动时自动运行类,jsp,Jsp,我有一个Web应用程序,它依赖于一些初始化,即需要启动一些线程 比如: public Class Init { private static resource .... static { // my initialization } public static void init(){} } 因此,我将所有初始化内容放入Init类中,并在每个jsp页面中调用.Init方法。。。init方法为空,其目的是启动init类初始化。这就是我认为只启动一次初始化的原

我有一个Web应用程序,它依赖于一些初始化,即需要启动一些线程

比如:

public Class Init {
   private static resource ....
   static {
      // my initialization
   }

   public static void init(){}
}
因此,我将所有初始化内容放入Init类中,并在每个jsp页面中调用.Init方法。。。init方法为空,其目的是启动init类初始化。这就是我认为只启动一次初始化的原因

但是我仍然需要在任何页面或servlet中手动调用.init方法。。。具有此初始化的调用的第一个页面将执行所需的操作,在这一点之后,每一个其他页面都是安全的,因为资源已经初始化。但这有一个星期的位置,如果我错过了一个页面,一个用户调用该页面

有没有办法指示Tomcat在应用程序启动后自动执行初始化?

您可以使用ServletContextListener。让您的Init类实现这个接口。如果愿意,可以将初始化代码从静态块移动到contextInitialized方法

请注意,您需要通过在web.xml中添加以下内容向Tomcat注册侦听器

因为,您现在还可以访问ServletContext调用sce.getServletContext,如果您选择将任何内容注册为上下文属性,并使其可用于应用程序中的任何servlet或JSP。

您可以使用ServletContextListener。让您的Init类实现这个接口。如果愿意,可以将初始化代码从静态块移动到contextInitialized方法

请注意,您需要通过在web.xml中添加以下内容向Tomcat注册侦听器

因为,您现在还可以访问ServletContext调用sce.getServletContext,如果您选择将任何内容注册为上下文属性,并使其可用于应用程序中的任何servlet或JSP,则可以使用它

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class Init implements ServletContextListener {

  private static resource;

  public void contextInitialized(ServletContextEvent sce) {
    // your initialization
  }

  public void contextDestroyed(ServletContextEvent sce) { 
    // empty  
  }
}
<listener>
  <listener-class>package.path.to.Init</listener-class>
</listener>