我想知道如何EventListener
从ServletContext
(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html)中删除一个。后者提供了一种addListener
方法,但没有删除侦听器。听众是否可能被弱引用所持有,并且可以通过失去所有强引用来取消注册?或者如果我的应用程序未部署会发生什么?侦听器是否仍处于活动状态?
1 回答
这不是问题的答案,我只想提出几点。
后者提供了一个 addListener 方法,但没有删除监听器。
因为您需要首先决定是否有听众。查看Javadoc:
用于接收有关 ServletContext 生命周期更改的通知事件的接口。
为了接收这些通知事件,实现类必须在 Web 应用程序的部署描述符中声明,使用 WebListener 进行注释,或者通过 ServletContext 上定义的 addListener 方法之一进行注册。
addListener()为您提供了注册多种类型的 listener的规定,而不仅仅是ServletContextListener
. 如果您选择不在web.xml中预先声明侦听器,这只是您可以使用的一种方法。
给定的侦听器必须是以下一个或多个接口的实例:
- ServletContextAttributeListener
- Servlet请求监听器
- ServletRequestAttributeListener
- HttpSessionListener
- HttpSessionAttributeListener
如果我的应用程序未部署会发生什么
所有侦听器对象都将与应用程序一起销毁。在部署 Web 应用程序时,侦听器在 Web 容器中被实例化和注册。
侦听器类使用侦听器元素在 Web 应用程序部署描述符中声明。它们按类名按调用顺序列出。在 Web 应用程序执行期间,侦听器按照注册的顺序被调用。在应用程序关闭时,侦听器按其声明的反向顺序收到通知,会话侦听器的通知先于上下文侦听器的通知。会话侦听器必须在应用程序关闭通知上下文侦听器之前通知会话失效。