監聽器是Servlet規范中定義的一種特殊類,用於監聽ServletContext、HttpSession、ServletRequest等域對象的創建與銷毀事件和監聽域對象的屬性發生修改的事件,可以在發生前和發生后做一些必要的處理。簡單來說就是用來監聽一個特定的事件是否發生改變。
監聽器按照監聽的對象划分為3種:
用於監聽應用程序環境(ServletContext)對象的事件監聽器。
用於監聽用戶會話對象(HttpSession)的事件監聽器。
用於監聽請求消息對象(ServletRequest)的事件監聽器。
按照監聽的事件划分
1.監聽域對象自身的創建和銷毀的事件監聽器。
2.創建域對象中的屬性的增加和刪除的事件監聽器。
被監聽對象及其對應的監聽器如下所示:
ServletContext是一個全局的儲存信息的空間,其監聽器從服務器啟動調用contextInitialized方法到服務器停止contextDestoryed方法,對於一個web項目,ServletContext對象只能有一個,而ServletContextListener卻可以有多個。ServletContext主要用於定時器和全局屬性對象。
HttpSession監聽器在一次會話發生時被調用sessionCreated方法會話結束時調用sessionDestoryed方法。在一個web項目中可以有多個HttpSession對象,1個HttpSession可以注冊多個HttpSessionListener。HttpSession常用於記錄訪問人數和訪問日志。
ServletRequest監聽器在客戶端請求事件發生時被調用requestInitialized方法事件完成時requestDestoryed方法。一個ServletRequest同樣可以注冊多個ServletRequestListener,ServletRequest常用於讀取參數和記錄訪問歷史。
3.監聽綁定到HttpSession域中的某個對象的狀態的事件監聽器
HttpSessionBindingListener監聽器:(不需要web.xml配置)valueBound方法綁定session對象,valueUnbound方法解綁session對象。所謂綁定就是調用session.setAttribute()方法將實現HttpSessionBindingListener接口的對象添加到session中。
HttpSessionListener只需要設置到web.xml中就可以監聽整個應用中的所有session。HttpSessionBindingListener必須實例化后放入某一個session中,才可以進行監聽。
HttpSessionActivationListener監聽器:(不需要web.xml配置)sessionWillPassivate方法鈍化,sessionDidActivate方法活化,實現此接口的JavaBean,可以感知自己被活化(從硬盤到內存)和鈍化(從內存到硬盤)的過程。如果需要同時保存Session中的JavaBean則JavaBean也要實現Serializable序列化接口。實現此接口的JavaBean與HttpSessionBindingListener一樣,不必配置到web.xml中。