域对象监听器是用来监听request、session、application域对象自身的创建和销毁的事件监听器;
域对象的创建和销毁时机:
域对象 | 创建时机 | 销毁时机 |
ServletContext | Web服务器启动时为每个web应用程序创建相应的ServletContext对象。 | Web服务器关闭时为每个web应用程序销毁相应的ServletContext对象。 |
HttpSession | 浏览器开始与服务器会话时创建 | 调用HttpSession.invalidate();超过了session的最大有效时间间隔;服务器进程被停止。 |
ServletRequest | 每次请求开始时创建 | 每次访问结束后销毁 |
ServletContextListener 接口
ServletContextListener 是用来监听ServletContent对象(即Application对象)的创建和销毁;
- ServletContext对象被创建后调用contextInitialized(ServletContextEvent sce)方法。
- ServletContext对象被销毁前调用contextDestroyed(ServletContextEvent sce)方法。
- ServletContextEvent类中可以通过getServletContext()获取ServletContext
- ServletContextListener实现类代码变化,则重新加载销毁
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationListener implements ServletContextListener {
//Application对象销毁时执行
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Application contextDestroyed");
}
//Application对象创建时执行
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Application contextInitialized");
}
}
创建ApplicationListener对象实现ServletContextListener接口;其中的两个方法是分别在Application对象(例子中是ApplicationListener对象)销毁和创建时执行,这里我们仅写入输出语句,我们会发现,对象创建的输出语句会在项目发布时执行,而对象销毁的输出语句会在项目正常停止(右键选中stop停止)时执行。
执行该方法需要在web.xml中配制一下<listener>属性:
<listener>
<listener-class>online.yangxinbiao.ApplicationListener</listener-class>
</listener>
中间的部分是你创建对象的完整路径,直接右键对象选择 Copy Qualified Name 获取。
HttpSessionListener 接口
HttpSessionListener接口用于监听HttpSession对象的创建和销毁。
- HttpSession对象被创建后调用sessionCreated (HttpSessionEvent sce)方法。
- HttpSession对象被销毁前调用sessionDestroyed(HttpSessionEvent sce)方法。
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
//session对象创建时执行
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("Session sessionCreated");
}
session对象销毁时执行
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("Session sessionDestroyed");
}
}
创建SessionListener对象实现HttpSessionListener接口;其中两个方法会在session对象创建和销毁时执行(建议先去了解一下session的创建和销毁时机);
配置<listener>属性:
<listener>
<listener-class>online.yangxinbiao.SessionListener</listener-class>
</listener>
ServletRequestListener 接口
ServletRequestListener接口用于监听request对象的创建和销毁。
- public void requestInitiallized(ServletRequestEvent event):ServletRequest对象被创建后调用;
- public void requestDestroyed(ServletRequestEvent event):ServletRequest对象被销毁前调用。
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class RequestListener implements ServletRequestListener {
//request对象销毁时执行
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("Request requestDestroyed");
}
//request对象创建时执行
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("Request requestInitialized");
}
}
创建RequestListener对象实现ServletRequestListener接口;其中的两个方法分别会在客户端向服务器发送请求时执行和服务器响应客户端时执行;
配置<listener>属性:
<listener>
<listener-class>online.yangxinbiao.RequestListener</listener-class>
</listener>