1、监听域对象的创建和销毁
•域对象创建和销毁的事件监听器就是用来监听ServletContext,HttpSession,HttpServletRequest这三个对象的创建和销毁事件的监听器。 •域对象的创建和销毁时机1).request: 是一个请求, 当一个响应返回时, 即被销毁. 当发送一个请求时被创建.
注意, 请求转发的过程是一个 request 对象.重定向是两个请求
2).session: 当第一次访问 WEB 应用的一个 JSP 或 Servlet 时, 且该 JSP 或 Servlet 中还需要创建 session 对象. 此时服务器会创建一个 session 对象.
session 销毁: 1.session 过期, 2.直接调用 session 的 invalidate 方法, 3.当前 web 应用被卸载(session 可以被持久化).
* 关闭浏览器, 并不意味着 session 被销毁, 会把seesion存在到文件.ser里,我们还可以通过 sessionid 找到服务器中的 session 对象.
JSESSIONID=F4119DE0FC93ED38E8EC83B24CFA3B81
http://localhost:8989/listener/session.jsp;jsessionid=F4119DE0FC93ED38E8EC83B24CFA3B81
3).application: 贯穿于当前的 WEB 应用的生命周期. 当前 WEB 应用被加载时创建 application 对象, 当前 WEB 应用被卸载时销毁 application 对象.
2.域对象中属性的变更的事件监听器
•域对象中属性的变更的事件监听器就是用来监听ServletContext,HttpSession,HttpServletRequest这三个对象中的属性变更信息事件的监听器。 •这三个监听器接口分别是ServletContextAttributeListener,HttpSessionAttributeListener和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同 1).attributeRemoved方法 •当删除被监听对象中的一个属性时,web容器调用事件监听器的这个方法进行相应 •各个域属性监听器中的完整语法定义为: 2).attributeAdded方法 •当向被监听器对象中增加一个属性时,web容器就调用事件监听器的attributeAdded方法进行相应,这个方法接受一个事件类型的参数,监听器可以通过这个参数来获得正在 增加属性的域对象和被保存到域中的属性对象 3).attributeReplaced方法 •当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的这个方法进行相应另外还有两个getName()和getValue()方法。这三个监听器使用较少。
3.感知 Session绑定的事件监听器
•保存在 Session域中的对象可以有多种状态:绑定到 Session中;从Session域中解除绑定;随Session对象持久化到一个存储设备中;随Session对象从一个存储设备中恢复
•Servlet规范中定义了两个特殊的监听器接口来帮助JavaBean对象了解自己在Session域中的这些状态:HttpSessionBindingListener接口和HttpSessionActivationListener接口,实现这两个接口的类不需要web.xml文件中进行注册
1.HttpSessionBindingListener接口
•实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和从Session中删除的事件
•当对象被绑定到HttpSession对象中时,web服务器调用该对象的 voidvalueBound(HttpSessionBindingEventevent)方法
•当对象从HttpSession对象中解除绑定时,web服务器调用该对象的voidvalueUnbound(HttpSessionBindingEventevent)方法
•典型应用:统计当前在线人数列表
2.HttpSessionActivationListener接口
•实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被活化和钝化的事件
•当绑定到 HttpSession对象中的对象将要随HttpSession对象被钝化之前,web服务器调用该对象的 voidsessionWillPassivate(HttpSessionBindingEventevent)方法
•当绑定到 HttpSession对象中的对象将要随HttpSession对象被活化之后,web服务器调用该对象的voidsessionDidActive(HttpSessionBindingEventevent)方法
活化: 从磁盘中读取 session 对象
钝化: 向磁盘中写入 session 对象
session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下. SESSION.SER