Web监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext(application)、HttpSession(session)及ServletRequest(request)等域对象的创建于销毁事件。用于监听域对象的属性发生修改的事件,可以在事件发生前后做一些必要的处理。
一、Web监听器的用途:
1.统计在线人数和在线用户;
2.系统启东市加载初始化信息;
3.统计网站访问量;
4.跟Spring结合。
监听器的启动顺序:一个web.xml下可以有多个监听器,根据注册顺序进行监听器的加载
监听器、过滤器及Servlet加载顺序的优先级为:监听器>过滤器>Servlet
二、监听器的分类:
1.按监听器的对象划分:
①用于监听应用程序环境对象(ServletContext)的事件监听器;
②用于监听用户会话对象(HttpSession)的事件监听器;
③用于监听请求消息对象(ServletRequest)的事件监听器。
2.按监听的时间划分;
①监听域对象自身的创建和销毁的事件监听器;
②监听域对象中的属性的增加和删除的事件监听器;
③监听绑定到HttpSession域中的某个对象的状态的事件监听器。
3.按监听的事件划分:
①监听域对象自身的创建和销毁的事件监听器
ServletContext——ServletContextListener
在ServletContext中可以定义多个ServletContextListener对象,只有一个ServletContext对象。
主要用途为:1.定时器;2.全局属性对象。
HttpSession——HttpSessionListener
一个HttpSession可以注册多个HttpSessionListener对象,可以存在多个HttpSession对象。主要用途为:1.统计在线人数;2.记录访问日志。
ServletRequest——ServletRequestListener
一个ServletRequest可以注册多个ServletRequestListener对象。
主要用途为:1.读取参数;2.记录访问历史。
②监听域对象中的属性的增加和删除的事件监听器;
ServletContext——ServletContextAttributeListener
HttpSession——HttpSessionAttributeListener
ServletRequest——ServletRequestAttributeListener
③监听绑定到HttpSession域中的某个对象的状态的事件监听器。
HttpSession中的对象状态
绑定——解除绑定
钝化——活化
Session钝化机制:本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或是数据库系统中。当被使用时反序列化到内存中,整个过程由服务器自动完成。
Tomcat中两种Session钝化管理器:(Session钝化机制有SessionManager管理)
1.org.apache.catalina.session.StandardManager
①当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中;
②Web应用程序被重新加载时,内存中的Session对象也会被钝化到服务器的文件系统中。
钝化后的文件被保存到:Tomcat安装路径/work/Catalina/localhost/项目名称/SESSION.ser
2.org.apache.catalina.session.Persistentmanager
①在钝化的基础上进行了扩张。前两种情况同org.apache.catalina.session.StandardManager;
②第三种情况可以配置主流内存的Session对象数目,将不常使用的Session对象保存到文件系统或数据库,当使用时再重新进行加载。
默认情况下,Tomcat提供两个钝化驱动类:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。
Servlet规范:(以下两个监听器不需要在web.xml文件中进行注册)
1.HttpSessionBindingListener:
绑定:valueBound方法
解除绑定:valueUnbound方法
2.HttpSessionActivationListener
钝化:sessionWillPassivate方法
活化:sessionDidActivate方法