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

我需要删除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启动,但这可能是相同的事情。

您也可以使用(启动Servlet v3)一个注释的aproach(不需要添加任何东西到web.xml):

  @WebListener public class InitializeListner implements ServletContextListener { @Override public final void contextInitialized(final ServletContextEvent sce) { } @Override public final void contextDestroyed(final ServletContextEvent sce) { } } 

我确定在容器生命周期中必须有一个更好的方法来做(编辑:Hank有答案 – 我想知道他为什么在我回答之前build议使用SessonListener ),但是你可以创build一个没有除了在服务器启动时执行一次性操作之外的其他目的:

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