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

    • 监听器:专门用于对其他对象身上发生 的事件或状态改变 进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
    • Servlet 监听器: Servlet 规范中定义的一种特殊类,它用于监听 web 应用程序中的 ServletContext , HttpSession ServletRequest 等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。
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 这三个对象的创建和销毁事件的监听器。
    • 域对象的创建和销毁时机

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 服务器调用该对象的  void valueBound ( HttpSessionBindingEvent event) 方法
    • 当对象从 HttpSession 对象中解除绑定时, web 服务器调用该对象的 void valueUnbound ( HttpSessionBindingEvent event) 方法
典型 应用:统计 当前在线人数列表

2.HttpSessionActivationListener接口
    • 实现 HttpSessionBindingListener 接口的 JavaBean 对象可以感知自己被活化和钝化的事件
    • 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前, web 服务器调用该对象的   void sessionWillPassivate ( HttpSessionBindingEvent event) 方法
    • 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后, web 服务器调用该对象的 void sessionDidActive ( HttpSessionBindingEvent event ) 方法
活化: 从磁盘中读取 session 对象
钝化: 向磁盘中写入 session 对象
session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下. SESSION.SER


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值