(轉)JavaWeb開發——Servlet監聽器

來源:互聯網
上載者:User

標籤:

一、Servlet監聽器的概念

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

監聽對象:

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

2、HttpSession:session,針對每一個對話

3、ServletRequest:request,針對每一個客戶請求

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

監聽作用:可以在事件發生前、發生後進行一些處理,一般可以用來統計線上人數和線上使用者、統計網站訪問量、系統啟動時初始化資訊等。

二、監聽器的基本使用

建立步驟:

1、建立一個實現監聽器介面的類

2、配置web.xml檔案,註冊監聽器

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

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

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

三、監聽器的分類

3.1 按照監聽的對象劃分

1、用於監聽應用程式環境對象(ServletContext)的事件監聽器,實現ServletContextListener、ServletContextAttributeListener介面

2、用於監聽使用者會話對象(HttpSeesion)的事件監聽器,實現HttpSessionListener、HttpSessionAttributeListener介面

3、用於監聽請求訊息對象(ServletRequest)的事件監聽器,實現ServletRequestListener、ServletRequestAttributeListener介面

3.2按照監聽事件劃分

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

根據監聽對象不同分別實現ServletContextListener、HttpSessionListener、ServletRequestListener介面。 

①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的建立和銷毀:sessionCreated和sessionDestroyed方法

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的建立和銷毀:requestInitialized和requestDestroyed方法

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");    }}   

  

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

  根據監聽對象不同分別實現ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener介面。

  實現方法:attributeAdded、attributeRemoved、attributeReplaced

 

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

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

  實現介面及方法:HttpSessionBindingListener介面(valueBound和valueUnbound方法)、HttpSessionActivationListener介面(sessionWillPassivate和sessionDidActivate方法)

【注1】①要實現鈍化和活化必須實現Serializable介面

           ②不需要在web.xml中註冊

【注2】

  綁定:    通過setAttribute儲存到session對象當中

  解除綁定:  通過removeAttribue去除

  鈍化:    將session對象持久化到存放裝置上

  活化:    將session對象從存放裝置上進行恢複

  session鈍化機制:

    ①把伺服器不常使用的session對象暫時序列化到系統檔案或者是資料庫中,當使用時還原序列化到記憶體中,整個過程由伺服器自動完成;

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

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

4.1 使用條件

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

  2、JDK在1.6以上版本

  3、編譯器的編譯層級為6.0

  4、在web.xml檔案中,使用3.0規範

  5、使用支援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

(轉)JavaWeb開發——Servlet監聽器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.