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