本节书摘来异步社区《Java EE 7精粹》一书中的第2章,第2.3节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.3 事件监听器
事件监听器提供对ServletContext、HttpSession和ServletRequest对象生命周期的回调事件。这些监听器实现了支持上述对象状态变化事件通知的接口类。每个类可以通过@WebListener注解定义或者在web.xml中声明,抑或通过ServletContext. addListener()方法注册。一个典型的监听器例子是以编程方式注册一个额外的Servlet而没有明确要求程序员这样做,或者应用程序级别的数据库连接的初始化和恢复。
可以有多个监听器类来监听每种事件类型,他们可能会在其中的容器指定顺序来为每个事件类型调用监听器Bean。在应用程序关闭期间,以相反的顺序通知这些监听器。
Servlet上下文监听器用于监听该上下文中资源的事件:
ServletContextAttributeListener用于监听上下文属性的变化:
HttpSessionListener监听Session中资源的事件:
HttpSessionActivationListener用于监听Session被钝化或激活的事件:
HttpSessionAttributeListener用于监听Session属性的变化:
HttpSessionBindingListener用于监听Session绑定和松绑对象的事件:
ServletRequestListener监听Request中资源的事件:
ServletRequestAttributeListener用于监听Request属性的变化。
还有AsyncListener,它是用于管理异步事件,比如异步执行已完成、超时或发生错误。
除了使用@WebListener注解定义和在web.xml中声明监听器,还可以使用ServletContext.addListener()方法以编程方式定义他们。可以在ServletContainer Initializer.onStartup或ServletContextListener.con textInitialized方法中做到这一点。
当应用程序为给定的ServletContext启动时,ServletContainerInitializer.onStartup方法会被调用: