3個屬性監聽者:
1、ServletContextListener
void contextInitialized(ServletContextEvent)
void contextDestroyed(ServletContextEvent)
2、ServletRequestAttributeListener
void attributeAdded(ServletRequestAttributeEvent)
void attributeRemoved(ServletRequestAttributeEvent)
void attributeReplaced(ServletRequestAttributeEvent)
3、HttpSessionAttributeListener
void attributeAdded(HttpSessionBindingEvent)
void attributeRemoved(HttpSessionBindingEvent)
void attributeReplaced(HttpSessionBindingEvent)
以上三個Listener分別在ServletContext、ServletRequest、HttpSession的屬性(Attribute)發生變化時會觸發相應的方法,調用setAttribute(name, value)會觸發attributeAdded()或者attributeReplaced(),調用removeAttribute(name)會觸發attributeRemoved()。
3個生命週期監聽者:
4、ServletRequestListener
void requestInitialized(ServletRequestEvent)
void requestDestroyed(ServletRequestEvent)
5、ServletContextListener
void contextInitialized(ServletContextEvent)
void contextDestroyed(ServletContextEvent)
6、HttpSessionListener
void sessionCreated(HttpSessionEvent)
void sessionDestroyed(HttpSessionEvent)
以上三個Listener分別會在他們創建的時候調用contextInitialized,在消亡的時候調用sessionDestroyed。、
剩下的兩個Listener
7、HttpSessionBindingListener
void valueBound(HttpSessionBindingEvent)
void valueUnbound(HttpSessionBindingEvent)
8、HttpSessionActivationListener
void sessionWillPassivate(HttpSessionEvent)
void sessionDidActivate(HttpSessionEvent)
這裏講一下HttpSessionBindingListener,它的兩個方法的觸發條件相對比HttpSessionAttributeListener要苛刻一些,我們使用session.setAttribute(name,value)或者session.removeAttribute(name)都能觸發HttpSessionAttributeListener的方法。但是,只有setAttribute或者removeAttribute方法中的value對象實現了HttpSessionBindingListener,纔會觸發HttpSessionBindingListener中的方法。
例如,User實現了HttpSessionBindingListener
public class User implements HttpSessionBindingListener{
@Override
public void valueBound(HttpSessionBindingEvent event) {
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
}
}
那麼,以下的操作就回觸發HttpSessionBindingListener中的方法。
session.setAttribute("user", new User());//會觸發valueBound的方法
session.removeAttribute("user");//會觸發valueUnbound方法
HttpSessionActivationListener是爲了讓HttpSession從一個VM轉移到另一個VM,如果你session的屬性(Attribute)是Serializable對象,或者不擔心屬性遷移問題,這個Listener幾乎不會用到,事實上,這個Listener大多數都不會使用。
sessionWillPassivate:在方法裏將非Serializable字段設置爲某種狀態。
sessionDidActivate:將在sessionWillPassivate設置爲某種狀態的字段恢復成原來的樣子。
當然,不是寫一個類 implements Linstener就能使用監聽事件,還需要在web.xml中進行配置。
<web-app ...>
<listener>
<listener-class>xxxxx</listener-class>
</listener>
</web-app>