【JavaWeb】(8)監聽器

1. 定義

是指專門用於對其他對象身上發生的事件或狀態改變進行監聽和相應處理的對象,當被監視的對象發生變化時,立即採取相應的行動。

Web監聽器:

是Servlet規範中定義的一種特殊類,用於監聽ServletContext、HttpSession和ServletRequest等域對象的創建與銷燬事件,用於監聽域對象的屬性發生修改的事件,可以在事件發生前、發生後做一些必要的處理。

 Web監聽器的用途:

(1). 統計在線人數和在線用戶

(2). 系統啓動時加載初始化信息

(3). 統計網站訪問量

(4). 跟Spring結合


2. 創建監聽器

(1). 創建一類實現監聽器接口(ServletContextListener)

(2). 配置web.xml進行註冊

監聽器的啓動順序:



3. 監聽器的分類

按監聽對象:

(1). 用於監聽應用程序願景對象(ServletContext)的事件監聽器

(2). 用於監聽用戶會話對象(HttpSession)的事件監聽器

(3). 用於監聽請求消息對象(ServletRequest)的事件監聽器

按監聽的事件劃分:

(1). 監聽域對象自身的創建和銷燬的事件監聽器

1). ServletContext--->ServletContextListener

一個ServletContext可以註冊多個ServletContextListener

contextInitialized(ServletContextEven sce)t方法:ServletContext創建時調用

contextDestroyed(ServletContextEven sce)方法:ServletContext銷燬時調用

使用ServletContextEvent還可以獲取一些初始化參數的信息:在<context-param>標籤內配置<param-name>和<param-value>值。

主要用途:定時器、全局屬性對象

2). HttpSession--->HttpSessionListener

一個HttpSession可以註冊多個HttpSessionListener

sessionCreate方法:session創建時調用

sessionDestroyed方法:session銷燬時調用

主要用途:統計在線人數、記錄訪問日誌

在web.xml中可以配置<session-config>標籤內的<session-timeout>來設置session超時時間(分鐘)

3). ServletRequest--->ServletRequestListener

一個ServletRequest可以對應多個ServletRequestListener

requestInitialized方法:request創建時調用

requestDestroyed方法:request銷燬時調用

主要用途:讀取參數、記錄訪問歷史

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

1). ServletContext--->ServletContextAttributeListener

2). HttpSession--->HttpSessionAttributeListener

3). ServletRequest--->ServletRequestAttributeListener

(3). 監聽綁定到HttpSession域中的某個對象的狀態的事件監聽器

Session鈍化機制:

本質就在於把服務器中不經常使用的Session對象暫時序列化到系統文件系統或是數據庫系統中,當被使用時反序列化到內存中,整個過程由服務器自動完成。

Tomcat中兩種session鈍化管理器,Session鈍化機制由SessionManager管理:

1). org.apache.catalina.session.StandardManager

當Tomcat服務器被關閉或重啓時,tomcat服務器會將當前內存中的Session對象鈍化到服務器文件系統中;另一種情況是Web應用程序被重新加載時,內存中的Session對象也會被鈍化到服務器的文件系統中。鈍化後的文件被保存在:Tomcat安裝路徑/work/Catalina/hostname/applicationname/SESSION.ser

2). org.apache.catalina.session.Persistentmanager

首先在鈍化的基礎上進行了擴張。第一種情況如1)的第一個,第二種如1)的第二個,第三種情況,可以配置主流內存的Session對象數目,將不長使用的Session對象保存到文件系統或數據庫,當用時再重新加載。默認情況下,Tomcat提供兩個鈍化驅動類:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。

HttpSessionBindingListener接口:

綁定:valueBound方法

解除綁定:valueUnbound方法

HttpSessionActivationListener接口:

鈍化:sessionWillPassivate方法

活化:sessionDidActivate方法

這些都不需要在web.xml中註冊。


4. 監聽器在Servle3.0下的應用

使用Servlet3.0的前提條件:

(1). 使用Servlet3.0新標準jar包

(2). JDK必須在1.6以上版本

(3). 編譯器的編譯級別爲6.0

(4). 在web.xml文件中,使用3.0規範

(5). 使用支持Servlet3.0特性的web容器,比如tomcat7

用法:

加註解:@WebListener

該註解用於將類聲明爲監聽器,被@WebListener標註的類必須實現以下至少一個接口:

ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener、HttpSessionAttributeListener

@WebListener的常用屬性:




發佈了80 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章