Servlet監聽器技術
監聽器的作用:
增加WEB的事件處理機制,更好的監視和控制web應用狀態的變化
每當web應用中某些某些狀態發生變化時,Servlet容器將產生相應的事件,此時我們實現的監聽器會接收和處理這些事件.
Servlet2.4規範中定義了8個監聽器接口和6個事件
監聽器和監聽事件的對應關系:
1.ServletContextListener --- ServletContextEvent//應用程序加載並初始化或應用程序卸載關閉
2.ServletContextAttributeListener --- ServletContextAttributeEvent //application應用範圍內有對象add(加入)或 replace(取代) 或remove(移除)
3.HttpSessionListener || HttpSessionActivationListener --- HttpSessionEvent //Http會話的創建和銷毀||會話的有效(active)和無效(passivate)狀態
4.HttpsessionAttributeListener || HttpSessionBindingListener --- HttpSessionBindingEvent //會話屬性的設置[session會話範圍內有對象add(加入)或 replace(取代) 或remove(移除)] || 監聽會話中對象的綁定信息,對象加入或移除(唯一無需在web.xml中設定listener)
5.ServletRequestListener --- ServletRequestEvent //請求對象加載並初始化或銷毀時
6.ServletRequestAttributeListener --- ServletRequestAttributeEvent //request請求範圍內有對象add(加入)或 replace(取代) 或remove(移除)(例如校內網,通過請求事件監聽拒絕遠程訪問,通過從request中獲取的ip地址判斷是否準許訪問)
按監聽的事件可把監聽器分為兩種:
1)監聽域對象自身的創建和銷毀的事件監聽器
2)監聽對象中屬性(attribute)的增加和刪除的事件監聽器
簡單介紹其中三個監聽器接口()
一.ServletContextListener 監聽應用程序環境對象
接口中有兩個方法:
public void contextInitializes(ServletContextEvent sce)//當應用程序部署時,web容器會創建一個ServletContextEvent事件對象,同時調用該方法,我們在實現類方法體中編寫的事件處理代碼即被執行.
public void contextDestroyed(ServletContextEvent sce)//在應用程序被卸載時會激發此方法
二.HttpSessionListener 監聽用戶會話對象(監聽綁定到HttpSession域中的某個對象的狀態)
接口中的兩個方法接收一個HttpSessionEvent類型的事件對象參數
public void sessionCreated(HttpSessionEvent se)//在容器創建一個新的Session對象時激發
public void sessionDestroyed(HttpSessionEvent se)//在容器銷毀一個Session對象時激發,可以通過參數獲得當前被銷毀的ServletRequest對象
三.ServletRequestListener 監聽請求消息對象
其兩個方法接收一個ServletRequestEvent類型事件對象參數
public void requestInitilized(ServletRequestEvent sre)//容器新建一個Request請求對象時激發
public void requestDestroyed(ServletRequestEvent sre)//可以通過參數獲得當前被銷毀的ServletRequest對象
編寫特定功能的監聽器只需要實現上述接口即可(可以實現其中之一,也可以全部實現,實現相應的方法完成你的目的;視開發實際情況而定)
例如:
package com.mycompany; import javax.servlet.*; import javax.servlet.http.*;
public class MyListener implements ServletContextListener,HttpSessionListener,ServletRequestListener{
......
}
如web容器是tomcat可在web.xml中註冊該監聽器(可以註冊一個或多個實現某一接口的事件監聽器)
<listener> <listener-class>com.mycompany.MyListener</listener-class> </listener>
Servlet監聽器技術