1. 基本概念
- 事件源:要监听的对象(request,session,servletContext)
- 监听器:用来监听事件源发生改变的对象
- 注册监听器:将监听器和事件源绑定的过程
2. 本质上是观察者模式
什么是观察者模式?详细内容请查看。。
3. 创建方式
首先要新建一个XXXListener的实现类
- 基于web.xml
listener-class里面是XXXListener接口实现类的全限定类名
- 基于注解
3. 分类(共8种):
第一类(监听作用域的创建和销毁
):
-
ServletRequestListener:用于监听request作用域的创建和销毁。
当请求进入servlet时request对象创建,当响应结束后request对象销毁 -
HttpSessionLIstener:用于监听session作用域的创建和销毁的。
HttpServletRequest.getSession()方法第一次被调用的时候,session对象被创建。当session对象意外关闭或者session失效(默认30分钟)或者sessio强制关闭时,session对象销毁 -
ServletContextListener:用于监听servletContext作用域的创建和销毁。
应用启动时开始创建,应用停止时销毁
第二类(监听作用域中值的创建和销毁
): -
ServletRequestAttributeListener:监听request作用域中值的创建,修改和删除
方法:attributeAdded():监听到创建值的时候调用该方法
attributeRemoved():监听到删除值的时候调用该方法
attributeReplaced():监听到修改值的时候调用该方法 -
HttpSessionAttributeListener:监听session作用域中值的创建,修改和删除
方法同上 -
ServletContextAttributeListener:监听servletContext作用域中值的创建,修改和删除
第三类(用于监听session中的数据状态和绑定的情况
) -
HttpSessionBindingListener 监听某类型的对象在session中绑定或移除
-
HttpSessionActivationListener:监听session中的对象活化或者钝化
活化:反序列化(对象从硬盘到内存中)
钝化:序列化(对象从内存保存到硬盘上)
需要注意的是:第三类不需要配置,一般创建在实体类上
例子:
浏览器输入
http://localhost:tomcat端口号/项目/bind.do?flag=1
控制台打印:
绑定了
浏览器输入
http://localhost:tomcat端口号/项目/bind.do?flag=2
控制台打印:
解绑了
在context.xml中写如下这段
<!-- maxIdleSwap为session1分钟钝化 -->
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="d:/session"/>
</Manager>