传智播客——让WEB程序紧凑之监听器

来源:互联网 发布:媒体的力量 知乎 编辑:程序博客网 时间:2024/06/05 20:02

一,监听器的概念

所谓的监听器是指对整个WEB环境的监听,当被监视的对象发生情况时,立即调用相应的方法进行处理。
二,监听器的分类
按监听的对象划分
1.用于监听应用程序环境对象(ServletContext)的事件监听器
2.用于监听用户会话对象(HttpSession)的事件监听器
3.用于监听请求消息对象(ServletRequest)的事件监听器 ,
按监听的事件类项划分
1.用于监听域对象自身的创建和销毁的事件监听器
2.用于监听域对象中的属性的增加和删除的事件监听器
3.用于监听绑定到HttpSession域中的某个对象的状态的事件监听器
三,servlet监听器的编写
servlet 规范中为每种事件监听器都定义了相应的接口,在编写事件监听器程序时只需实现这些接口就可以了. web 服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象上.一些Servlet事件监听器需要在web应用程序的部署文件描述符文件(web.xml)中进行注册,一个web.xml可以注册多个servlet事件监听器。web服务器按照它们在web.xml中注册顺序来加载和注册这些servlet事件监听器。servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听的对象被创建,修改,销毁等事件时,web容器将调用与之相关的servlet事件监听器对象的相应方法,用户在这些方法中编写的事件处理代码即被执行。由于在一个web应用程序中只会为每个事件监听器类创建一个实例对象,有可能出现多个线程同时调用一个事件监听对象的情况,所以要注意多线程安全问题。 
四,监听器对象的创建和销毁
    域对象创建和销毁的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象的创建和销毁事件的监听器。域对象的创建和销毁时机: 1 、ServletContext * 创建:是在 Web 服务器启动并加载某个 Web 应用程序时创建相应的 ServletContext 对象, * 销毁:是在 Web 服务器关闭或卸载时为每个 Web 应用程序销毁相应的 ServletContext 对象。 2 、HttpSession 创建:是在浏览器开始与服务器会话时创建, 销毁:是在调用HttpSession.invalidate();超过了Sessiond的最大有效时 间间隔,服务器进程被停止的时候。 3 、ServletRequest *创建:每次请求开始时创建, *销毁: 每次访问结束后销毁
五,ServletContextListener 接口和HttpSessionListener 接口和ServletRequestListener接口
ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件。当 ServletContext 对象被创建时,激发 public void contextInitalized(ServletContextEvent sce)方法当 ServletContext 对象被销毁时,激发 public void contextDestroyed(ServletContextEvent sce)方法  里面的参数是ServletContextEvent事件是在servlet对象创建时自动 激活的事件
HttpSessionListener 接口用于监听HttpSession对象的创建和销毁创建一个Session时,激发 public void sessionCreated(HttpSessionEvent se)方法销毁一个Session时,激发 public void sessionDestroyed(HttpSessionEvent se)方法。
ServletRequestListener 接口用于监听ServletRequest 对象的创建和销毁创建一个ServletRequest 对象时,激发 public void requestInitialized(ServletRequestEvent sre)方法销毁一个ServletRequest时,激发 public void requestDestroyed(ServletRequestEvent sre)方法。
六,域对象中属性的变更的事件监听器域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同
当向被监听器对象中增加一个属性时,web容器就调用事件监听器的 attributeAdded 方法进行响应,这个方法接受一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象各个域属性监听器中的完整语法定义为:public void attributeAdded(ServletContextAttributeEvent scae) public void attributeReplaced(HttpSessionAttributeEvent hsbe) public void attributeRmoved(ServletRequestAttributeEvent srae)
当删除被监听对象中的一个属性时,web 容器调用事件监听器的这个方法进行响应各个域属性监听器中的完整语法定义为:public void attributeRemoved(ServletContextAttributeEvent scae) public void attributeRemoved (HttpSessionBindingEvent hsbe) public void attributeRemoved (ServletRequestAttributeEvent srae)
当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的这个方法进行相应各个域属性监听器中的完整语法定义为:public void attributeReplaced(ServletContextAttributeEvent scae) public void attributeReplaced (HttpSessionBindingEvent hsbe) public void attributeReplaced (ServletRequestAttributeEvent srae)
七,感知 Session 绑定的事件监听器
保存在 Session 域中的对象可以有多种状态:绑定到  Session 中;从 Session 域中解除绑定;随 Session 对象持久化到一个存储设备中;随 Session 对象从一个存储设备中恢复
Servlet 规范中定义了两个特殊的监听器接口来帮助 JavaBean 对象了解自己在 Session 域中的这些状态:
          HttpSessionBindingListener接口
          HttpSessionActivationListener接口 ,
实现这两个接口的类不需要 web.xml 文件中进行注册
八,HttpSessionBindingListener接口
实现了HttpSessionBindingListener接口的 JavaBean 对象可以感知自己被绑定到 Session 中和从 Session 中删除的事件
当对象被绑定到 HttpSession 对象中时,web 服务器调用该对象的  void valueBound(HttpSessionBindingEvent event) 方法
当对象从 HttpSession 对象中解除绑定时,web 服务器调用该对象的 void valueUnbound(HttpSessionBindingEvent event)方法
学习总结:监听器的使用,并不仅仅是简化操作,更是一种简洁紧凑的程序设计思想



 


原创粉丝点击