一、Listener監聽器
監聽器用于監聽Web應用中某些對象的建立、銷毀、添加、修改、删除等動作的發生,然後作出相應的響應處理。
當監聽器的對象的狀态發生改變的時候,伺服器自動調用監聽器對象中的方法。
常用于統計網站線上人數、系統加載時進行資訊初始化、統計網站的通路量等等。
二、Listener接口分類
1)ServletContext監聽器
- ServletContextListener:監聽ServletContext對象
- ServletContextAttributeListener:監聽對ServletContext屬性的操作,增加-删除-修改
2)HttpSession監聽器
- HttpSessionListener:監聽Session對象
- HttpSessionAttributeListener:監聽Session中的屬性操作
- HttpSessionActivationListener:監聽HTTP會話的active和passivate情況,passivate是指非活動的session被寫入持久裝置(比如硬碟),active相反;不需要web.xml配置檔案
實作了HttpSessionActivationListener接口的 JavaBean 對象可以感覺自己被活化和鈍化的事件;
● 活化:javabean對象和Session一起被反序列化(活化)到記憶體中(硬碟到記憶體);
● 鈍化:javabean對象和Session一起序列化到硬碟中(記憶體到硬碟);
javabean對象存在Session中,當伺服器把session序列化到硬碟上時。
如果Session中的javabean對象實作了Serializable接口,那麼伺服器會把session中的javabean對象一起序列化到硬碟上,javabean對象和Session一起被序列化到硬碟中的這個操作稱之為鈍化。
如果Session中的javabean對象沒有實作Serializable接口,那麼伺服器會先把Session中沒有實作Serializable接口的javabean對象移除,然後再把Session序列化(鈍化)到硬碟中;
當綁定到HttpSession對象中的javabean對象将要随HttpSession對象被鈍化之前,web伺服器調用該javabean對象的sessionWillPassivate方法,這樣javabean對象就可以知道自己将要和HttpSession對象一起被序列化(鈍化)到硬碟中;
當綁定到HttpSession對象中的javabean對象将要随 HttpSession對象被活化之後,web伺服器調用該javabean對象的sessionDidActive方法,這樣javabean對象就可以知道自己将要和 HttpSession對象一起被反序列化(活化)回到記憶體中;
- HttpSessionBindingListener:感覺Session綁定的事件監聽器;不需要web.xml配置檔案
儲存在Session域中的對象可以有多種狀态:
(1)綁定(session.setAttribute("bean",Object))到Session中;
(2)從Session域中解除(session.removeAttribute("bean"))綁定;
(3)随Session對象持久化到一個儲存設備中;
(4)随Session對象從一個儲存設備中恢複;
Servlet規範中定義了兩個特殊的監聽器接口"HttpSessionBindingListener和HttpSessionActivationListener"來幫助JavaBean對象了解自己。
在Session域中的這些狀态:實作這兩個接口的類不需要 web.xml 檔案中進行注冊。
3)ServletRequest監聽器
- ServletRequestListener:監聽Request對象
- ServletRequestAttributeListener:監聽Request中的屬性操作
三、xml 配置設定
<listener>
<listener-class>包名.Listener類名</listener-class>
</listener>