有没有一种方法只能在Tomcat / Wildfly / Glassfish启动时运行方法/类?

时间:2020-03-06 14:58:58  来源:igfitidea点击:

我需要在Tomcat启动时删除临时文件,到包含临时文件的文件夹的传递位于applicationContext.xml中。

有没有一种方法只能在Tomcat启动时运行方法/类?

解决方案

我们可以编写一个" ServletContextListener",从" contextInitialized()"方法中调用方法。我们将监听器添加到web.xml中的webapp,例如

<listener>
   <listener-class>my.Listener</listener-class>
</listener>

package my;

public class Listener implements javax.servlet.ServletContextListener {

   public void contextInitialized(ServletContext context) {
      MyOtherClass.callMe();
   }
}

严格来说,这仅在webapp启动时运行一次,而不是在Tomcat启动时运行,但这可能是同一件事。

我确信在容器的生命周期中一定有更好的方法(编辑:Hank给出了答案,我想知道为什么他在我回答之前就建议使用" SessonListener"),但是我们可以创建一个Servlet,其中包含除了启动服务器时执行一次性操作外,没有其他目的:

<servlet>
  <description>Does stuff on container startup</description>
  <display-name>StartupServlet</display-name>
  <servlet-name>StartupServlet</servlet-name>
  <servlet-class>com.foo.bar.servlets.StartupServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>