Servlet监听器:
Listener是Servlet的监听器
可以监听客户端的请求,服务端的操作等
通过监听器自动进行一些操作,如在线用户量的统计,当增加一个session时,在线人数就会增加1.
监听器的部署:部署之后自动执行
部署位置:部署在XML中,位置在过滤器后面,Servlet前面
一个XML配置可以注册多个Servlet事件监听器
Web服务器按照web.XML中注册顺序来加载Servlet事件监听器
Web应用程序中只会为每个事件监听器类创建一个实例对象,在编程中可能出现多个线程同时调用一个事件监听器的情况,要注意监听器对象共享同步问题。
按照监听器对象划分:
监听应用程序环境对象(ServletContext)的事件监听器
监听用户会话对象(HttpSession)的事件监听器
监听请求消息对象(ServletRequest)的事件监听器
按照监听器事件分类:(一般为内置对象的监听)
监听域对象自身的创建和销毁的事件监听器
监听域对象中的属性的增加和删除的事件监听器
监听绑定到HttpSession域中的某个对象的状态的事件监听器
三大监听器:
ServletContextListener:对应所有用户
ServletSessionListener:对应于一个用户
ServletRequestListener:对应当前请求
分别实现相应的接口就可以实现对应的监听处理
上下文监听:
ServletContextListener:用于监听web应用的启动和销毁的事件
要实现ServletContextListener接口
属性监听:
ServletContextAttributeListener:用于监听web应用属性改变的事件,包括增加删除属性,修改属性。
监听创建销毁:
HttpSessionListener:用于监听Session对象的创建和销毁。
要实现HttpSessionListener接口,或HttpSessionActivationListener接口(此接口常用于监听Session的钝化/活化事件)。
Request监听(HttpServletRequest):
监听请求的创建和撤销,监听请求到达和结束,可在请求到达之前和结束之前执行一些自定义的行为。
在XML中的配置为:
<listener>
<listener-class>包名.类名</listener-class>
</listener>
Request对象建立时,调用requestInitialLized()方法
Request对象增加时,调用request.attributeAdded(ServletRequestAttributeEvent)
删除调用,request.AttributeRemoved(ServletRequestAttributeEvent)
替换调用,request.AttributeRemoved(ServletRequestAttributeEvent)
此三个函数都有getName()和getValue()方法
Request对象被销毁是调用requestDestroyed()方法
Application监听器:
提供了两个接口:
ServletContextAttributeListener,监听对ServletContext的属性的操作,比如增加,删除,修改等等。
属性增加时激发:AttributeAdded方法
修改时激发 :AttributeReplace方法
删除是激发 :AttributeRemoved方法
ServletContextListener,监听application内置对象的生命周期。
以上两个接口根据需要使用。
创建ServletContext时会激发ContextInitialized(ServletContextEvent sce)方法,
销毁ServletContext时会激发ContextDestroyed(ServletContextEvent sce)方法。
Session监听器:
提供两个接口:
HttpSessionListener:用来监听HttpSession的操作
创建一个Session时激发SessionCreated方法
销毁一个Session时激发SessionDestroyed方法
HttpSessionAttributeListener:监听对ServletContext的属性的操作,比如增加,修改,删除。
Session属性增加时激发:AttributeAdded方法
Session属性修改时激发:AttributeReplace方法
Session属性删除是激发:AttributeRemoved方法
以上两个接口根据需要使用。
操作可以使用对象获取当前的Session,通过Session获取其他对象,然后进行操作。
HttpSessionBinderListener
Session销毁
调用Session.invalidate()方法
Session到了设置或默认的超时时间,自动销毁
关闭浏览器此Session还未销毁,只是不能再用了
实现:
它不需要对XML文件进行配置
对HTTPSessionBindingListener对象所对应的Session进行监听
两个函数:
valueBund在setAttribute是触发
valueUnBund在session销毁是被触发
valueUnbund方法将被一下任一条件出发:
A.执行Session.setAttribute时
B.执行Session.RemoveAttribute时
C.执行Session.invalidate时
D.Session超时后
监听器区别:
HttpSessionListener只需在XML设置一次就可以对所有的Session进行监听
HttpSessionBingdingListener通常是成对出现的
监听器注解的使用:
导入
import javax.servlet.annotation.WebListener;
@WebListener
写上这两句就算是已经注解了,不用在XML中进行配置了,相比过滤器的注解还是比较简单的。
过滤器与监听器的总结:
过滤器:
过滤器是Servlet的一种特殊用法。完成通用的操作,如编码的过滤,事务的提交,用户的登录状态等。
过滤器能够在客户端请求到达Servlet之前被截获,处理之后再发给被请求的资源,还可以响应截获,修改之后再发给用户,分为之前之后拦截。
过滤器支持一下功能:
如性能,安全,日志,会话处理,等。
过滤器本身不产生请求和响应,只提供过滤作用。
过滤器可以检查和修改request和response对象
过滤器可以被指定和特定的URL相关联,只有当客户请求访问该特定的URL时,才会触发过滤器。
过滤器可以被串联成串,形成过滤链,协同修改请求和响应。
过滤器作用:
根据请求可以做出改变
修改请求头和内容,提供自定义的请求
修改相应头和内容,提交自定义的回应
过滤器的应用:
可应用在Servlet程序和Servlet程序之间,JSP页面和JSP页面之间,客户端和Servlet程序之间,Servlet程序和JSP页面之间进行过滤请求处理。
监听器:
监听客户端的请求,服务端的操作,通过监听器自动激发一些操作。
原理:
监听器是web开发的重要组成部分,对web应用进行监督和控制,大大增强了web应用的时间处理能力。
监听器的功能类似与java中的GUI程序的监听器,可以监听由于web应用中的状态改变而引起的Servlet容器产生的相应事件,然后做出客户希望的处理。
类型:
请求监听器,会话监听器,上下文监听器。
有8个监听器接口和6个监听器事件类。在具体编程中使用。