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的常用屬性: