天天看點

Listener監聽器

一、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>