ServletContextListener简介
依赖于sevlet容器,需要配置web.xml(Spring Boot只需要配置@WebListener即可,并且使用@WebListener后,可以注入bean)。
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。
ServletContextListener接口定义:
package javax.servlet;
import java.util.EventListener;
public interface ServletContextListener extends EventListener {
// ServletContext对象被创建后调用
public void contextInitialized ( ServletContextEvent sce );
// ServletContext对象被销毁前调用
public void contextDestroyed ( ServletContextEvent sce );
}
编写案例
实现 ServletContextListener 接口并重写方法:
import org.apache.log4j.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class InitListener implements ServletContextListener {
private static Logger log = Logger.getLogger(InitListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext servletContext = servletContextEvent.getServletContext();
servletContext.setAttribute("name", "James");
log.info("contextInit...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.gc();
}
}
在 web.xml 中配置该监听器:
<listener>
<listener-class>com.mvc.InitListener</listener-class>
</listener>
@WebListener:
Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,@WebFilter过滤器也可以同样用法。
在完成上述配置后,web 服务器在启动时,会直接加载该监听器。
ServletContextListener使用详解(监听Tomcat启动、关闭)
spring5取消Log4jConfigListener,运用Log4jServletContextListener代替(log4j2.xml的配置)