熬之滴水穿石:Servlet--Web万物之源(5)

来源:互联网 发布:剑三纯阳成女捏脸数据 编辑:程序博客网 时间:2024/04/29 13:53
                                       29--监听
在普通的JAVA代码中,因为你有一个MAIN方法,所以你可以知道程序运行的每一个位置所发生的事情。然而在Web容器中对于Servlet,我们是不知道发生了一些什么。所以就必须有这么一个单独的类,它能监听Servlet在生命周期所发生的事情。这便是我们这个章节要说的内容了,这便是监听器。它可以监听客户端的请求、服务端的操作等。通过监听可以触发一些相关的操作,监听包括的范围有上下文事件、上下文属性、Servlet请求和属性,http会话和会话相关的事件。在监听的interface中,我们可以看到
 ServletContextAttributeListener(用于上下文是否进行CUED操作时),它所对应的事件类型为:ServletContextAttributeEvent。
HttpSessionListener(用于跟踪会话),它所对应的事件是HttpSessionEvent。
ServletRequsetListener(用于监听请求到来时),它所对应的事件是ServletRequestListener。
ServletRequestAttributeListener(用于CUED属性),它所对应的事件是ServletRequestAttributeEvent。
HttpSessionBindingListener(绑定会话监听),它所对应的事件是HttpSessionBindingEvent。
HttpSessionAttributeListener(会话属性监听),它所对应的事件是 HttpSessionBindingEvent 
ServletContextListener(上下文监听),它对应的事件是 ServletContextEvent。
HttpSessionActivationListener(会话通知),它对应的事件是HttpSessionEvent。

以上便是能够用到的各类监听类一共有8个,每个类其实还是有对应各自的方法的。这个方法便不在此描述了,监听类的设计者考虑到各自监听类的用途以设计了相应的方法,我们只需在相应的方法中实现相关的细节便可。值得注意的是HttpSessionBindingListener和HttpSessionAttributeListener两个是有区别的,前者是属性知道自己什么时候会增加到会话中去,或者知道自己什么时候在会话中被删掉。后者只是知道什么时候会在会话中增加删除或者更新属性而已。实现起来的话,HttpSessionAttributeListener是需要在Web.xml中进行相关的描述的,HttpSessionBindingListener则不需要。它们都有相同的方法valueBound和valueUnboundy,但是触发的条件不一样。HttpSessionAttributeListener在属性变化时都会执行该方法,HttpSessionBindingListener只有当它属性对象绑定到会话中或从会话中删除时才会执行这些方法。

在监听的范围内可以见到很多关于属性的字眼,其实属性就是一个对象被绑定到了Servlet中context,request或是Session中。它也是一个名值对的绑定关系。容器是如何知道在WEB服务上建立了一个监听了,其实很简单就是在web.xml的部署文件上用<Listener>标签下用<Listener-class>来注册为监听,这里面包含的便是我们实现的监听类。我们可以根据实际的需要继承相关监听接口实现,不同的接口有着不同的方法。在部署文件并没有设置监听类型的标签,所以对于开发者应该很清楚监听的内容是什么,对于容器来说,它只会检查相关的类并且注意监听类的接口。
                                                  (未完待续.......)
原创粉丝点击