监听器
概述
- 监听器: 主要是用来监听特定对象的创建或销毁、属性的变化的!是一个实现特定接口的普通java类!
- 对象:
- 自己创建自己用 (不用监听)
- 别人创建自己用 (需要监听)
- servlet中哪些对象需要监听?
request / session /servletContext分别对应的是request监听器、session相关监听器、servletContext监听器
- 监听器接口:
- 监听对象创建/销毁的监听器接口
Interface ServletRequestListener 监听request对象的创建或销毁
Interface HttpSessionListener 监听session对象的创建或销毁
Interface ServletContextListener 监听servletContext对象的创建或销毁
- 监听对象属性的变化
Interface ServletRequestAttributeListener 监听request对象属性变化:添加、移除、修改 Interface HttpSessionAttributeListener
监听session对象属性变化: 添加、移除、修改Interface ServletContextAttributeListener 监听servletContext对象属性变化
- session相关监听器
Interface HttpSessionBindingListener 监听对象绑定到session上的事件 >>Interface HttpSessionActivationListener(了解) 监听session序列化及反序列化的事件
声明周期监听器: 监听对象的创建、销毁的过程!
- 监听器开发步骤:
- 写一个普通java类,实现相关接口;
- 配置(web.xml)
- ServletRequestListener
监听request对象的创建或销毁。
/**
* 监听request对象的创建或销毁
* @author csx
*
*/publicclassMyRequestListenerimplementsServletRequestListener{
// 对象销毁
@Override
publicvoidrequestDestroyed(ServletRequestEvent sre) {
// 获取request中存放的数据
Object obj = sre.getServletRequest().getAttribute("cn");
System.out.println(obj);
System.out.println("MyRequestListener.requestDestroyed()");
}
// 对象创建
@Override
publicvoidrequestInitialized(ServletRequestEvent sre) {
System.out.println("MyRequestListener.requestInitialized()");
}
}
Web.xml
<!-- 监听request对象创建、销毁 -->
<listener>
<listener-class>cn.csx.a_life.MyRequestListener</listener-class>
</listener>
- HttpSessionListener
监听session对象的创建或销毁。
- ServletContextListener
监听servletContext对象的创建或销毁。
属性监听器
监听:request/session/servletContext对象属性的变化!
- ServletRequestAttributeListener
- HttpSessionAttributeListener
- ServletContextAttributeListener
其他监听器: session相关监听器
监听对象绑定/解除绑定到sesison上的事件!
- 步骤:
对象实现接口; 再把对象绑定/解除绑定到session上就会触发监听代码。
- 作用:
(上线提醒!)
/**
* 监听此对象绑定到session上的过程,需要实现session特定接口
* @author csx
*
*/publicclassAdminimplementsHttpSessionBindingListener {
… 省略get/set// 对象放入session
@Override
publicvoidvalueBound(HttpSessionBindingEvent event) {
System.out.println("Admin对象已经放入session");
}
// 对象从session中移除
@Override
publicvoidvalueUnbound(HttpSessionBindingEvent event) {
System.out.println("Admin对象从session中移除!");
}
}
- 思考:
这个session监听器,和上面的声明周期、属性监听器区别?
不用再web.xml配置
因为监听的对象是自己创建的对象,不是服务器对象!