Java Web開發——Servlet監聽器

1、Servlet監聽器的概念web

Servlet監聽器是Servlet規範中定義的一種特殊類,用於監聽ServletContext、HttpSession和ServletRequest等域對象的建立與銷燬事件,以及監聽這些域對象中屬性發生修改的事件。數據庫

監聽對象緩存

一、ServletContext:application,整個應用只存在一個tomcat

二、HttpSession:session,針對每個對話服務器

三、ServletRequest:request,針對每個客戶請求session

監聽內容:建立、銷燬、屬性改變事件app

監聽做用:能夠在事件發生前、發生後進行一些處理,通常能夠用來統計在線人數和在線用戶、統計網站訪問量、系統啓動時初始化信息等。網站

2、監聽器的基本使用spa

建立步驟日誌

一、建立一個實現監聽器接口的類

二、配置web.xml文件,註冊監聽器

<listener>
    <listener-class>完整類名</listener-class>
</listener>

監聽器的啓動順序:按照web.xml的配置順序來啓動

加載順序:監聽器>過濾器>Servlet

3、監聽器的分類

3.1 按照監聽的對象劃分

一、用於監聽應用程序環境對象(ServletContext)的事件監聽器,實現ServletContextListener、ServletContextAttributeListener接口

二、用於監聽用戶會話對象(HttpSeesion)的事件監聽器,實現HttpSessionListener、HttpSessionAttributeListener接口

三、用於監聽請求消息對象(ServletRequest)的事件監聽器,實現ServletRequestListener、ServletRequestAttributeListener接口

3.2按照監聽事件劃分

一、監聽域對象自身的建立和銷燬的事件監聽器

根據監聽對象不一樣分別實現ServletContextListenerHttpSessionListenerServletRequestListener接口。 

①ServletContext的建立和銷燬:contextInitialized方法和contextDestroyed方法

public void contextInitialized(ServletContextEvent sce)//ServletContext建立時調用
public void contextDestroyed(ServletContextEvent sce)//ServletContext銷燬時調用

主要用途:做爲定時器、加載全局屬性對象、建立全局數據庫鏈接、加載緩存信息等

實例:

在web.xml中能夠配置項目初始化信息,在contextInitialized方法中進行啓動

<context-param>
    <param-name>屬性名</param-name>
    <param-value>屬性值</param-value>
</context-param>

自定義監聽器

public class MyFirstListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent sce){
        //獲取web.xml中配置的屬性
        String value=sce.getServletContext().getInitParameter("屬性名");
        System.out.println(value);
  }
    public void contextDestroyed(ServletContextEvent sce){
        //關閉時操做
  }
}

 ②HttpSession的建立和銷燬:sessionCreatedsessionDestroyed方法

public void sessionCreated(HttpSessionEvent se)//session建立時調用
public void sessionDestroyed(HttpSessionEvent se)//session銷燬時調用

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

【注】

 web.xml配置session超時參數,單位:分,session超時的時間並非精確的

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

 ③ServletRequest的建立和銷燬:requestInitializedrequestDestroyed方法

public void requestInitialized(ServletRequestEvent sre)//request建立時調用
public void requestDestroyed(ServletRequestEvent sre)//request銷燬時調用

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

實例: 

public class MySRequestListener implements SevletRequestListener{
    public void requestInitialized(ServletRequestEvent sre){
        String value=sre.getServletRequest().getParameter("key");//獲取request中的參數
        System.out.println(value);
    }
    public void requestDestroyed(ServletRequestEvent sre){  
        System.out.println("request destroyed");
    }
}   

  

二、監聽域對象中的屬性的增長和刪除的事件監聽器

  根據監聽對象不一樣分別實現ServletContextAttributeListenerHttpSessionAttributeListenerServletRequestAttributeListener接口。

  實現方法:attributeAddedattributeRemovedattributeReplaced

 

三、監聽綁定到HttpSeesion域中的某個對象的狀態的事件監聽器(建立普通JavaBean)

  HttpSession中的對象狀態:綁定→解除綁定;鈍化→活化

  實現接口及方法:HttpSessionBindingListener接口(valueBoundvalueUnbound方法)、HttpSessionActivationListener接口(sessionWillPassivatesessionDidActivate方法)

【注1】①要實現鈍化和活化必須實現Serializable接口

           ②不須要在web.xml中註冊

【注2】

  綁定:    經過setAttribute保存到session對象當中

  解除綁定:  經過removeAttribue去除

  鈍化:    將session對象持久化到存儲設備上

  活化:    將session對象從存儲設備上進行恢復

  session鈍化機制:

    ①把服務器不常使用的session對象暫時序列化到系統文件或者是數據庫中,當使用時反序列化到內存中,整個過程由服務器自動完成;

    ②session的鈍化機制由SessionManager管理,建立一個普通的JavaBean綁定和接觸鬚要實現HttpSessionBindingListener接口

4、Servlet3.0下監聽器的使用

4.1 使用條件

  一、使用servlet3.0新標準的jar包

  二、JDK在1.6以上版本

  三、編譯器的編譯級別爲6.0

  四、在web.xml文件中,使用3.0規範

  五、使用支持servlet3.0特性的web容器,好比tomcat7

4.2 servlet3.0下監聽器的用法

使用註解 @WebListener 便可,沒法去定義監聽器的順序

@WebListener的經常使用屬性
屬性名 類型 是否可選 描述
value String 該監聽器的描述信息
@WebListener("This is a listener")
public class FirstListener impliements ServletRequestListener{}

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

  ServletContextListener

  ServletContextAttributeListener

  ServletRequestListener

  ServletRequestAttributeListener

  HttpSessionListener

  HttpSessionAttributeListener

 

 

參考資料:慕課網【JAVA Web開發技術應用——監聽器】http://www.imooc.com/learn/271

相關文章
相關標籤/搜索