javaWeb基础知识----监听器

时间:2021-04-01 08:35:19

    •监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。     •Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext,HttpSessionServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。 Servlet 监听器的分类   •按监听的事件类型 Servlet监听器可分为如下三种类型:     –监听域对象自身的创建和销毁的事件监听器     –监听域对象中的属性的增加和删除的事件监听器     –监听绑定到 HttpSession域中的某个对象的状态的事件监听器 编写Servlet监听器     •Servlet 规范为每种事件监听器都定义了相应的接口,开发人员编写的事件监听器程序只需实现这些接口web服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象上     •一些Servlet事件监听器需要在web应用程序的web.xml文件中进行注册,一个web.xml文件中可以注册多个Servlet事件监听器,web服务器按照它们在web.xml文件中的注册顺序来加载和注册这些Serlvet事件监听器     •Serlvet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听的对象被创建,修改或销毁事件时,web容器将调用与之相关的Servlet事件监听器对象的相关方法,开发人员在在这些方法中编写的事件处理代码即被执行     •由于一个 web应用程序只会为每个事件监听器创建一个对象,有可能出现多个线程同时调用同一个事件监听器对象的情况,所以,在编写事件监听器类时,应考虑多线程安全的问题

1、监听域对象的创建和销毁

    •对象创建和销毁的事件监听器就是用来监听ServletContext,HttpSession,HttpServletRequest这三个对象的创建和销毁事件的监听器。     •域对象的创建和销毁时机 javaWeb基础知识----监听器

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