域对象创建和销毁
- 域对象创建和销毁的事件监听器就是用来监听ServletContext、HttpSession和HttpServletRequest这三个对象的创建和销毁事件的监听器。
域对象 | 创建时机 | 销毁时机 |
---|---|---|
ServletContext | Web服务器启动时为每个web应用程序创建相应的ServletContext对象 | Web服务器关闭时为每个web应用程序销毁相应的ServletContext对象。 |
HttpSession | 浏览器开始与服务器会话时创建 | 调用HttpSession.invalidate();超过了session的最大有效时间间隔;服务器进程被停止。 |
ServletRequest | 每次请求开始时创建 | 每次访问结束后销毁 |
ServletContextListener接口
- ServletContextListener接口用于监听ServletContext对象的创建和销毁。
- ServletContext对象被创建后调用contextInitialized(ServletContextEvent sce)方法。
- ServletContext对象被销毁前调用contextDestroyed(ServletContextEvent sce)方法。
- ServletContextEvent类中可以通过getServletContext()获取ServletContext
- ServletContextListener实现类代码变化,则重新加载销毁
代码实现
创建ApplicationListener实现ServletContextListener接口实现接口中的方法
public class ApplicationListener implements ServletContextListener {
public ApplicationListener() {
System.out.println("ApplicationListener构造方法");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}
}
在部署描述符web.xml中配置监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>listener</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.dz.listerner.ApplicationListener</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
- 启动服务器之后
- 正常关闭服务器之后
HttpSessionListener接口
- HttpSessionListener接口用于监听HttpSession对象的创建和销毁。
- HttpSession对象被创建后调用sessionCreated (HttpSessionEvent sce)方法。
- HttpSession对象被销毁前调用sessionDestroyed(HttpSessionEvent sce)方法。
代码实现
- SessionListener 类实现HttpSessionListener接口
public class SessionListener implements HttpSessionListener {
public SessionListener() {
System.out.println("SessionListener构造方法");
}
public void sessionCreated(HttpSessionEvent se) {
System.out.println("sessionCreated");
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("sessionDestroyed");
}
}
- 部署描述符,把session的过期时间为1分钟
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>listener</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.dz.listerner.ApplicationListener</listener-class>
</listener>
<listener>
<listener-class>com.dz.listerner.SessionListener</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
- 启动服务器
- 访问页面
- 控制台输出信息,这里是执行了sessionCreated方法
- 一分钟之后,执行了sessionDestroyed方法
- 正常关闭服务器
ServletRequestListener接口
- 用于监听request对象的创建和销毁。
- public void requestInitiallized(ServletRequestEvent event):ServletRequest对象被创建后调用;
- public void requestDestroyed(ServletRequestEvent event):ServletRequest对象被销毁前调用。
public class RequestListener implements ServletRequestListener {
public RequestListener() {
System.out.println("RequestListener构造方法");
}
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("requestDestroyed");
}
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("requestInitialized");
}
}
- 开启服务器
* 访问http://localhost/listener/
- 控制台输出
- 一分钟之后
- 停止服务器之后