java web 監聽器詳解

轉自於http://www.open-open.com/lib/view/open1350703815649.html

一、監聽器原理:

監聽器就是一個實現特定接口的普通java程序,這個程序專門用於監聽一個java對象的方法調用或屬性改變,當被監聽對象發生上述事件後,監聽器某個方法將立即被執行。

java web 監聽器詳解

 

簡單的說,被監聽對象A中,關聯着B對象。事件源A類對外提供一個方法,用於設置監聽器對象BA類的某一實例變量中。在需要監聽事件源的方法中,方法體的某一處先構造創建一個Event對象,將thisB與相關的動作封裝進Event對象中,然後調用監聽器B對象的doXXXX(event)方法,將事件對象傳入方法實參中。

簡單的類圖示例:

java web 監聽器詳解

二、簡介:

Servlet規範中定義了多種類型的監聽器,它們用於監聽的事件源分別爲SerlvetConext,HttpSessionServletRequest這三個域對象。

Servlet規範針對這三個對象上的操作,又把這多種類型的監聽器劃分爲三種類型:

1>監聽三個域對象創建和銷燬的事件監聽器

2>監聽域對象中屬性的增加和刪除的事件監聽器

3>監聽綁定到HttpSession域中的某個對象的狀態的時間監聽器。

a、如三個域對象的創建與銷燬方法簽名:

ServletRequestListener有以下兩個方法

void requestDestroyed(ServletRequestEvent sre)  

void requestInitialized(ServletRequestEvent sre) 

HttpSessionListener有以下兩個方法

void sessionCreated(HttpSessionEvent se) 

void sessionDestroyed(HttpSessionEvent se)  

ServletContextListener

void contextDestroyed(ServletContextEvent sce) 

void contextInitialized(ServletContextEvent sce)  

b、三個類型對象域中增、刪、改的監聽器(3個)

ServletContextAttributeListener

HttpSessionAttributeListener

ServletRequestAttributeListener

c、感知型監聽器(2個):監聽自己何時被幫到session上,何時解綁了;何時被鈍化了,何時被活化了(序列化到某個存儲設置中)

注意:這種監聽器不需要註冊。某個javabean實現這些接口後就可以監聽何時被綁定、解綁或被激活或鈍化。

HttpSessionBindingListener:實現該接口的類,能檢測自己何時被Httpsession綁定,和解綁

HttpSessionActivationListener:實現該接口的類(要求些javabean必須是實現了Serializable接口的),能監測自己何時隨着HttpSession一起激活和鈍化。

三、Listenner的註冊

Javaweb的這些特別的監聽器註冊比較簡單,因爲ServletRequestHttpSessionServletContext對象都是容器創建的,所以需要它們的監聽器的話,只需要在應用的web-infoweb.xml裏配置即可:

<listener>

<listener-class>com.test.listener.MyHttpSessionAttributeListener</listener-class>

<listener-class>com.test.listener.MyServletContextAttributeListener</listener-class>

<!--  多個實現相同的Listenner接口,在執行時是按web.xml註冊出現的來決定。 -->

</listener>

注意:感知型監聽器HttpSessionBindingListenerHttpSessionActivationListener不需要註冊。

三、應用場景:

由於ervletRequestHttpSessionServletContext對象都是容器創建的,什麼時候創建,用戶都不知道。通過實現這些對象的監聽器後,就可以得知了。比如:

1>ServletContextLintener監聽器的contextInitialized方法中,進行應用級的資源初始化以便提高效率,在contextDestroyed方法中對應用級的資源進行釋放。

2>又比如web應用中,會存在會話,通常的作法是將當前登錄的用戶存放在session會話中。那麼如何統計在線人數話,如何顯示出當前登錄的用戶呢。如何踢出某些已登錄的用戶呢。就可以通過HttpSessionAttributeListener監聽器的attributeAdded方法。

等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章