1 JavaWeb监听器概述
在JavaWeb被监听的事件源为:ServletContext、HttpSession、ServletRequest,即三大域对象。
- 监听域对象“创建”与“销毁”的监听器;
- 监听域对象“操作域属性”的监听器;
- 监听HttpSession的监听器。
创建与销毁监听器一共有三个:
ServletContextListener:Tomcat启动和关闭时调用下面两个方法
- public void contextInitialized(ServletContextEvent evt):ServletContext对象被创建后调用;
- public void contextDestroyed(ServletContextEvent evt):ServletContext对象被销毁前调用;
HttpSessionListener:开始会话和结束会话时调用下面两个方法
- public void sessionCreated(HttpSessionEvent evt):HttpSession对象被创建后调用;
- public void sessionDestroyed(HttpSessionEvent evt):HttpSession对象被销毁前调用;
ServletRequestListener:开始请求和结束请求时调用下面两个方法
- public void requestInitiallized(ServletRequestEvent evt):ServletRequest对象被创建后调用;
- public void requestDestroyed(ServletRequestEvent evt):ServletRequest对象被销毁前调用。
ServletContextEvent:ServletContextgetServletContext();
HttpSeessionEvent:HttpSessiongetSession();
ServletRequestEvent:
- ServletRequest getServletRequest()
- ServletContext getServletContext()
编写测试例子:
- 编写MyServletContextListener类,实现ServletContextListener接口;
- 在web.xml文件中部署监听器;
- 为了看到session销毁的效果,在web.xml文件中设置session失效时间为1分钟;
/*
* ServletContextListener实现类
* contextDestroyed() -- 在ServletContext对象被销毁前调用
* contextInitialized() -- -- 在ServletContext对象被创建后调用
* ServletContextEvent -- 事件类对象
* 该类有getServletContext(),用来获取ServletContext对象,即获取事件源对象
*/
public class MyServletContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent evt) {
System.out.println("销毁ServletContext对象");
}
public void contextInitialized(ServletContextEvent evt) {
System.out.println("创建ServletContext对象");
}
}
/*
* HttpSessionListener实现类
* sessionCreated() -- 在HttpSession对象被创建后被调用
* sessionDestroyed() -- -- 在HttpSession对象被销毁前调用
* HttpSessionEvent -- 事件类对象
* 该类有getSession(),用来获取当前HttpSession对象,即获取事件源对象
*/
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent evt) {
System.out.println("创建session对象");
}
public void sessionDestroyed(HttpSessionEvent evt) {
System.out.println("销毁session对象");
}
}
/*
* ServletRequestListener实现类
* requestDestroyed() -- 在ServletRequest对象被销毁前调用
* requestInitialized() -- 在ServletRequest对象被创建后调用
* ServletRequestEvent -- 事件类对象
* 该类有getServletContext(),用来获取ServletContext对象
* 该类有getServletRequest(),用来获取当前ServletRequest对象,即事件源对象
*/
public class MyServletRequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent evt) {
System.out.println("销毁request对象");
}
public void requestInitialized(ServletRequestEvent evt) {
System.out.println("创建request对象");
}
}
<listener>
<listener-class>cn.itcast.listener.MyServletContextListener</listener-class>
</listener>
<listener>
<listener-class>cn.itcast.listener.MyHttpSessionListener</listener-class>
</listener>
<listener>
<listener-class>cn.itcast.listener.MyServletRequestListener</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
4 操作域属性的监听器
当对域属性进行增、删、改时,执行的监听器一共有三个:
ServletContextAttributeListener:在ServletC