Listener介绍:
监听器,负责监听一些浏览器与服务器的动作,来完成某些事情
监听的参与者:
事件源:触发监听器
监听器:监听事件源 6+2:6个监听器+两个监听器
绑定:负责绑定监听器与事件源
响应事件:监听器被触发后的动作
Listener类型:
6个监听器:
分类一:按照监听的对象划分:ServletContext域,HttpSession域,ServletRequest域
分类二:按照监听的范围划分:域的创建与销毁,域的内容的改变
开始敲代码
一.记住各个域的生命周期有利于理解该在什么时候使用那个监听器.
二.步骤:1.实现监听器接口 2.覆盖监听器方法 3.在web.xml中使用<listener>标签注册监听器
创建与销毁的监听器
ServletContext:
ServletContext生命周期:
创建:服务器开启
销毁:服务器关闭
1.实现监听器接口 2.覆盖监听器方法
3.在web.xml中使用<listener>标签注册监听器
Servlet测试:
结果:
ServletContext监听器的主要作用:
1.初始化工作:初始化对象与数据-----加载数据库驱动,连接池初始化
2.加载一些初始化的配置文件:比如Spring的配置文件
3.任务调度:使用Timer与TimerTask 比如,服务器每24小时打印一次日志
另外两个HttpSession域与ServletRequest域的创建与销毁的监听器也是如此步骤.
只是要注意一下生命周期:
HttpSession:创建:第一次调用request.getSession() 销毁:服务器关闭,session到期,手动调用invalidate()
ServletRequest:创建:每次请求开始 销毁:请求结束
域内容修改的监听器
1.实现监听器接口 2.覆盖监听器方法
3.在web.xml中使用<listener>标签注册监听器
略..
Servlet测试:
结果:略....
剩下的两种监听器:与Session域绑定的对象有关的监听器(对象感知监听器)
注意:这两种监听器都是用到要绑定的对象上的
绑定到Session域的对象的几种状态:
绑定状态:一个对象将被加入Session域
解绑状态:一个对象将被从Session域移除
钝化状态:对象从Session域持久化到磁盘上
活化状态:对象从磁盘恢复到Session域
第一个:HttpSessionBindingListener(绑定与解绑)
1.实现监听器接口 2.覆盖监听器方法
3.不需要注册
Servlet绑定测试:
结果:
第二个:HttpSessionActivationListener(钝化与活化)
1.实现监听器接口 2.覆盖监听器方法
3.不需要注册
我们可以通过在/WebRoot/META-INF文件夹下创建一个xml文件来控制钝化的时间与钝化的对象存储的位置
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- maxIdleSwap:session中的对象多长时间不使用就钝化 -->
<!-- directory:钝化后的对象的文件写到磁盘的哪个目录下 配置钝化的对象文件在 work/catalina/localhost/钝化文件 -->
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="myFile" />
</Manager>
</Context>
Servlet测试:
结果:
钝化的作用:可以作为优化服务器的一方面:通过钝化一些一段时间不用的Session来减少服务器的压力.
钝化的对象存在哪里?