1、概念
Servlet中的listener的作用是通过监听一些事件的发生,listener在事件发生前后可以做一些必要的处理。
2、原理
简单理解就是事件源生成事件并将其发送至一个或多个监听器,监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件并进行一些处理。listner监听的主要事件抽象的理解包括三种:ServletContextEvent、ServletRequestEvent、 HttpSessionEvent。
3、八种监听器
ServletContextEvent对Servlet上下文进行监听
监听器 | 监听事件 | 相关方法 |
ServletContextListener | ServletContextEvent | contextDestroyed(ServletContextEvent sce) ServletContext对象销毁时触发 (容器销毁时销毁ServletContext对象) contextInitialized(ServletContextEvent sce) ServletContext对象创建时触发 (容器加载时创建ServletContext对象) |
ServletContextAttributeListener | 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对象将要变成无效状态的时触发