1、概念
Servlet中的listener的作用是通过监听一些事件的发生,listener在事件发生前后可以做一些必要的处理。
2、原理
简单理解就是事件源生成事件并将其发送至一个或多个监听器,监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件并进行一些处理。listner监听的主要事件抽象的理解包括三种:ServletContextEvent、ServletRequestEvent、 HttpSessionEvent。
3、八种监听器
ServletContextEvent对Servlet上下文进行监听
监听器 |
监听事件 |
相关方法 |
ServletContextListener |
ServletContextEvent |
contextDestroyed(ServletContextEvent sce) ServletContext对象销毁时触发 (容器销毁时销毁ServletContext对象) contextInitialized(ServletContextEvent sce) ServletContext对象创建时触发 (容器加载时创建ServletContext对象) |
ServletContextAttributeListene |
ServletContextAttributeEvent (继承ServletContextEvent) |
attributeAdded(ServletContextAttributeEvent event) ServletContext对象添加属性时触发 ( request.getSession(). getServletContext(). setAttribute("person1","Jim"); ) attributeRemoved(ServletContextAttributeEvent event) ServletContext对象移除属性时触发( request.getSession(). getServletContext(). removeAttribute("person1"); ) attributeReplaced(ServletContextAttributeEvent event) ServletContext对象重新设定属性值时触发 ( request.getSession(). getServletContext(). setAttribute("person1","Green"); request.getSession(). getServletContext(). setAttribute("person1","Green1"); ) |
ServletRequestEvent对客户端请求进行监听
监听器 |
针对事件 |
相关方法 |
ServletRequest |
ListenerServletRequestEvent |
requestInitialized(ServletRequestEvent sre) 客户端请求发出时触发 requestDestroyed(ServletRequestEvent sre) 客户端请求结束时触发
|
ServletRequestAttributeListener |
ServletRequestAttributeEvent (继承 ServletRequestEvent) |
attributeAdded(ServletRequestAttributeEvent srae) 客户端请求对象添加属性时触发( request.setAttribute("person1","Jim"); ) attributeRemoved(ServletRequestAttributeEvent srae) 客户端请求对象移除属性时触发( request.removeAttribute("person1"); ) attributeReplaced(ServletRequestAttributeEvent srae) 客户端请求对象重新设定属性值时触发( request.setAttribute("person1","Green"); request.setAttribute("person1","Green1"); ) |
ServletRequestEvent对Http会话监听
监听器 |
监听事件 |
相关方法 |
HttpSessionListener |
HttpSessionEvent |
sessionCreated(HttpSessionEvent se) session对象创建时发生,即浏览器页面打开时 sessionDestroyed(HttpSessionEvent se) session对象销毁时触发,即浏览器关闭或session过期
|
HttpSessionAttributeListener |
HttpSessionBindingEvent (继承 HttpSessionEvent) |
attributeAdded(HttpSessionBindingEvent event) session对象添加属性时触发( session.setAttribute("person1","Jim"); ) attributeRemoved(HttpSessionBindingEvent event) 客户端请求对象移除属性时触发( session.removeAttribute("person1"); ) attributeReplaced(HttpSessionBindingEvent event) session对象重新设定属性值时触发( session.setAttribute("person1","Green"); session.setAttribute("person1","Green1"); ) |
HttpSessionBindingListener( 这个listener是一个比较特殊的listener,它不需要在web.xml中进行配置。 此listener需要存放于session中的对象实现此接口,才能被响应。 ) |
HttpSessionBindingEvent (继承 HttpSessionEvent) |
valueBound(HttpSessionBindingEvent event) 此方法通过HttpSession的void setAttribute(String name, Object object)被调用。其中object需要实现HttpSessionBindingListener接口。 valueUnbound(HttpSessionBindingEvent event) 此方法通过HttpSession的void removeAttribute(String name)或者HttpSession失效时被调用。其中nam对应的object需要实现HttpSessionBindingListener接口。 |
HttpSessionActivationListener ( 这个接口一般和Servlet容器的集群有关系,它监听的是同一个session转移至不同的JVM的事件。) |
HttpSessionEvent |
sessionDidActivate(HttpSessionEvent se) session对象已经变成有效的状态的时触发 sessionWillPassivate(HttpSessionEvent se) session对象将要变成无效状态的时触发 |