54

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

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

4

3 回答 3

81

您可以编写一个从方法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 启动时运行一次,但这可能相当于同一件事。

于 2008-10-01T16:01:17.180 回答
15

您还可以使用(从 Servlet v3 开始)带注释的方法(无需向 web.xml 添加任何内容):

   @WebListener
    public class InitializeListner implements ServletContextListener {

        @Override
        public final void contextInitialized(final ServletContextEvent sce) {

        }

        @Override
        public final void contextDestroyed(final ServletContextEvent sce) {

        }
    }
于 2014-10-25T22:06:24.020 回答
3

我确信作为容器生命周期的一部分必须有更好的方法来做到这一点(编辑:汉克有答案 - 我想知道为什么他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> 
于 2008-10-01T16:08:34.227 回答