如何在启动时自动运行类

时间:2013-05-19 14:57:00

标签: jsp

我有一个依赖于某些初始化的web应用程序(即需要启动一些线程)。

类似的东西:

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

   public static void init(){}
}

所以我将所有初始化内容放在 Init 中,在每个jsp页面中我都要调用 .init()方法... init方法为空,他的目的是启动Init类初始化。这就是我认为我的初始化只启动一次。

但是我仍然必须在任何页面(或servlet)中手动调用.init()方法...调用的第一个页面(具有此初始化)将执行所需的操作,并且在此之后每个其他页面都是安全的( '因为资源已经初始化了)。但如果我错过了一个页面,用户会调用该页面,那么这有一周的时间点......

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

1 个答案:

答案 0 :(得分:4)

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

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  
  }
}

请注意,您需要通过在web.xml

中添加以下内容来向Tomcat注册监听器
<listener>
  <listener-class>package.path.to.Init</listener-class>
</listener>

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