我需要删除Tomcat启动时的临时文件,传递给包含临时文件的文件夹位于applicationContext.xml中。
有没有办法只在Tomcat启动时运行方法/类?
答案 0 :(得分:76)
您可以编写一个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启动,但这可能相同。
答案 1 :(得分:13)
您还可以使用(启动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) {
}
}
答案 2 :(得分:3)
我确信必须有一个更好的方法来实现它作为容器生命周期的一部分(编辑: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>
答案 3 :(得分:0)
如果在 WildFly/Glassfish 上运行,您还可以将 @Singleton EJB 注释为 @Startup,以便在应用程序部署或应用程序服务器启动时执行。
请参阅此 article 中的示例。