ServletContainerInitializer中contextDestroyed()的等价性是什么?

时间:2016-03-01 13:51:01

标签: servlets jar destroy servletcontextlistener

我必须创建一个实现ServletContextListener的类,以便在初始化或Tomcat关闭期间添加事件。但是,该类必须位于WEB-INF/lib内的jar文件中。在做了一些阅读之后,我发现这是不可能的,另一种方法是使用ServletContainerInitializer。但是,只有onStartup()方法可用。

还有其他替代方法,我还可以在关闭或销毁Web应用程序期间添加事件吗?

我正在使用Tomcat 8和Java 8顺便说一句。

2 个答案:

答案 0 :(得分:3)

让您的ServletContainerInitializer以编程方式添加ServletContextListener,然后在其contextDestroyed()中执行所需的工作。

servletContext.addListener(YourServletContextListener.class);

答案 1 :(得分:-1)

不确定您是如何测试代码的。但是这个ServletContextListener对我来说在Tomcat 8.5.5上运行正常。只需尝试此代码,无需将其放在单独的JAR文件中。

@WebListener
public class AppContextListener implements ServletContextListener{

    Logger log = LoggerFactory.getLogger(AppContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        log.info("### Context is destroyed ###");
    }
}