1. 定义
是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动。
Web监听器:
是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,用于监听域对象的属性发生修改的事件,可以在事件发生前、发生后做一些必要的处理。
Web监听器的用途:
(1). 统计在线人数和在线用户
(2). 系统启动时加载初始化信息
(3). 统计网站访问量
(4). 跟Spring结合
2. 创建监听器
(1). 创建一类实现监听器接口(ServletContextListener)
(2). 配置web.xml进行注册
监听器的启动顺序:
3. 监听器的分类
按监听对象:
(1). 用于监听应用程序愿景对象(ServletContext)的事件监听器
(2). 用于监听用户会话对象(HttpSession)的事件监听器
(3). 用于监听请求消息对象(ServletRequest)的事件监听器
按监听的事件划分:
(1). 监听域对象自身的创建和销毁的事件监听器
1). ServletContext--->ServletContextListener
一个ServletContext可以注册多个ServletContextListener
contextInitialized(ServletContextEven sce)t方法:ServletContext创建时调用
contextDestroyed(ServletContextEven sce)方法:ServletContext销毁时调用
使用ServletContextEvent还可以获取一些初始化参数的信息:在<context-param>标签内配置<param-name>和<param-value>值。
主要用途:定时器、全局属性对象
2). HttpSession--->HttpSessionListener
一个HttpSession可以注册多个HttpSessionListener
sessionCreate方法:session创建时调用
sessionDestroyed方法:session销毁时调用
主要用途:统计在线人数、记录访问日志
在web.xml中可以配置<session-config>标签内的<session-timeout>来设置session超时时间(分钟)
3). ServletRequest--->ServletRequestListener
一个ServletRequest可以对应多个ServletRequestListener
requestInitialized方法:request创建时调用
requestDestroyed方法:request销毁时调用
主要用途:读取参数、记录访问历史
(2). 监听域对象中的属性的增加和删除的事件监听器
1). ServletContext--->ServletContextAttributeListener
2). HttpSession--->HttpSessionAttributeListener
3). ServletRequest--->ServletRequestAttributeListener
(3). 监听绑定到HttpSession域中的某个对象的状态的事件监听器
Session钝化机制:
本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成。
Tomcat中两种session钝化管理器,Session钝化机制由SessionManager管理:
1). org.apache.catalina.session.StandardManager
当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中;另一种情况是Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件系统中。钝化后的文件被保存在:Tomcat安装路径/work/Catalina/hostname/applicationname/SESSION.ser
2). org.apache.catalina.session.Persistentmanager
首先在钝化的基础上进行了扩张。第一种情况如1)的第一个,第二种如1)的第二个,第三种情况,可以配置主流内存的Session对象数目,将不长使用的Session对象保存到文件系统或数据库,当用时再重新加载。默认情况下,Tomcat提供两个钝化驱动类:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。
HttpSessionBindingListener接口:
绑定:valueBound方法
解除绑定:valueUnbound方法
HttpSessionActivationListener接口:
钝化:sessionWillPassivate方法
活化:sessionDidActivate方法
这些都不需要在web.xml中注册。
4. 监听器在Servle3.0下的应用
使用Servlet3.0的前提条件:
(1). 使用Servlet3.0新标准jar包
(2). JDK必须在1.6以上版本
(3). 编译器的编译级别为6.0
(4). 在web.xml文件中,使用3.0规范
(5). 使用支持Servlet3.0特性的web容器,比如tomcat7
用法:
加注解:@WebListener
该注解用于将类声明为监听器,被@WebListener标注的类必须实现以下至少一个接口:
ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener、HttpSessionAttributeListener
@WebListener的常用属性: