从ServletContext中删除侦听器

时间:2013-07-16 09:42:43

标签: java servlets listener servlet-3.0 servlet-listeners

我想知道如何从EventListenerhttp://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html)中删除ServletContext。后者提供了addListener方法,但没有删除侦听器。听众是否可以通过弱引用来保留,并且可以通过丢失所有强引用来取消注册?或者如果我的应用程序被取消部署会发生什么?听众仍然活跃吗?

1 个答案:

答案 0 :(得分:2)

这不是问题的答案,我只想提几点。

  

后者提供了addListener方法,但没有删除侦听器。

因为您需要先决定是否有听众。看看Javadoc

  

用于接收有关ServletContext生命周期更改的通知事件的接口。

     

为了接收这些通知事件,实现类必须在Web应用程序的部署描述符中声明,使用WebListener注释,或者通过ServletContext上定义的addListener方法之一注册。

addListener()为您提供了注册多种类型的侦听器的条款,而不仅仅是ServletContextListener。如果您选择不在 web.xml 中预先声明侦听器,它只是一种可供您使用的方法。

  

给定的侦听器必须是以下一个或多个接口的实例:

     
      
  1. ServletContextAttributeListener
  2.   
  3. ServletRequestListener
  4.   
  5. ServletRequestAttributeListener
  6.   
  7. HttpSessionListener
  8.   
  9. HttpSessionAttributeListener
  10.   

  

如果我的应用程序取消部署会发生什么

所有侦听器对象都将随应用程序一起被销毁。在部署Web应用程序时,将在Web容器中实例化并注册监听器。

使用listener元素在Web应用程序部署描述符中声明侦听器类。它们按类名按其调用顺序列出。在Web应用程序执行期间,将按其注册顺序调用侦听器。在应用程序关闭时,侦听器以REVERSE顺序通知其声明,并在向上下文侦听器发出通知之前向会话侦听器发送通知。在上下文侦听器被通知应用程序关闭之前,必须通知会话侦听器会话失效。