在整个Tomcat服务器中,Listener使用的非常广泛,它是基于观察者模式设计的,Listener设计为Servlet应用程序提供了一种快捷的手段,能够方便地从另一个纵向维度来控制程序和数据。
概述
目前在Servlet中提供了6种观察者接口,按分类来划分:他们分别是:
类型 | 接口 |
---|---|
EventListeners类型 | ServletContextAttributeListener ServletRequestAttributeListener ServletRequestListener HttpSessionAttributeListener |
LifecycleListeners类型 | ServletContextListener HttpSessionListener |
实际上,这6个Listener都继承了EventListener接口,每个Listener接口各自定义了需要实现的接口方法。如下图所示:
Listener 实现方法说明
ServletContextAttributeListener
接口方法 | 说明 |
---|---|
attributeAdded(ServletContextAttributeEvent var1) | 调用servletContext.setAttribute方式时触发 |
attributeRemoved(ServletContextAttributeEvent var1) | 调用servletContext.removeAttribute方法时触发 |
attributeReplaced(ServletContextAttributeEvent var1) | 如果在调用servletContext.setAttribute之前该 attribute已经存在,则替换这个 attribute 时触发 |
ServletRequestAttributeListener
接口方法 | 说明 |
---|---|
attributeAdded(ServletRequestAttributeEvent var1) | 调用request.setAttribute方法时触发 |
attributeRemoved(ServletRequestAttributeEvent var1) | 调用request.removeAttribute方法时触发 |
attributeReplaced(ServletRequestAttributeEvent var1) | 如果调用request.setAttribute方法之前该attribute 已存在,则替换这个attribute时触发 |
ServletRequestListener
接口方法 | 说明 |
---|---|
requestInitialized(ServletRequestEvent var1) | 当HttpServletRequest对象被传递到用户的Servlet的 service() 方法之前被触发 |
requestDestroyed(ServletRequestEvent var1) | 当HttpServletRequest对象在调用完用户的Servlet的 service() 方法之后被触发 |
HttpSessionAttributeListener
接口方法 | 说明 |
---|---|
attributeAdded(HttpSessionBindingEvent var1) | 调用 session.setAttribute 方法时触发 |
attributeRemoved(HttpSessionBindingEvent var1) | 调用sessoin.remoteAttribute 方法时触发 |
attributeReplaced(HttpSessionBindingEvent var1) | 如果调用session.setAttribute方法之前 attribute 已存 在,则替换这个 attribute 时被触发 |
ServletContextListener
接口方法 | 说明 |
---|---|
contextInitialized(ServletContextEvent var1) | Context容器初始化时触发,在所有的Filter和Servlet的init() 方法调用之前该方法先被调用 |
contextDestroyed(ServletContextEvent var1) | Context容器销毁时触发,在所有的Filter 和 Servlet 的 destroy() 方法调用之后该方法被调用 |
HttpSessionListener
接口方法 | 说明 |
---|---|
sessionCreated(HttpSessionEvent var1) | 当一个session对象被创建时触发 |
sessionDestroyed(HttpSessionEvent var1) | 当一个session对象被失效时触发 |
总结
它们基本上涵盖了整个Servlet声明周期中你感兴趣的每种事件。这些Listener的实现类可以配置在web.xml的
⭐ 掌握好 Listener 的各种方法,可以让应用程序设计更加灵活。
作者: Zealon
崇尚简单,一切简单自然的事物都是美好的。