BESAppServer中listener開發使用

Listener

Listener(監聽器)用來監控Servlet上下文或HTTP會話對象的狀態,監聽器部署到WEB模塊或應用中之後,一旦這些對象的狀態發生了變更,WEB容器就會向事件監聽器發出通知,由事件監聽器對狀態的變更做出響應。

WEB模塊或應用的事件監聽器常用於執行下列操作:

1.         管理數據庫連接

2.         創建計數器等實用工具

3.         監視HTTP會話的狀態及特性

1.1 Servlet上下文事件

Servlet上下文事件指WEB模塊或應用的部署或解部署,上下文屬性的添加、刪除和替換。下表列出了Servlet上下文事件的類型、事件監聽器必須實現的接口,以及上下文事件發生時調用的方法。

表1-1 Servlet上下文事件

事件類型

接口

方法

創建Servlet上下文

javax.servlet.ServletContextListener

contextInitialized()

關閉Servlet上下文

contextDestroyed()

添加屬性

javax.servlet.ServletContextAttributesListener

attributeAdded()

刪除屬性

attributeRemoved()

替換屬性

attributeReplaced()

1.1.1  HTTP會話事件

HTTP會話事件指HTTP會話的激活或鈍化,以及HTTP會話屬性的添加、刪除或替換。下表中列出了HTTP會話事件的類型、事件監聽器必須實現的接口,以及HTTP會話事件發生時調用的方法。

表1-2HTTP會話事件

事件類型

接口

方法

激活HTTP會話

javax.servlet.http.HttpSessionListener

sessionCreated()

鈍化HTTP會話

sessionDestroyed()

添加屬性

javax.servlet.http.HttpSessionAttributeListener

attributeAdded()

刪除屬性

attributeRemoved()

替換屬性

attributeReplaced()

Servlet 3.0規範還包含javax.servlet.http.HttpSessionBindingListener和javax.servlet.http.HttpSessionActivationListener接口。這些接口由存儲爲會話屬性的對象來實現,不需要在web.xml中註冊事件監聽器。

1.1.2  Servlet請求事件

下表中列出了Servlet請求事件的類型、事件監聽器必須實現的接口,以及請求事件發生時調用的方法。

表1-3 Servlet請求事件

事件類型

接口

方法

請求即將超出WEB模塊或應用的範圍

javax.servlet.ServletRequestListener

requestDestroyed()

請求即將進入WEB模塊或應用的範圍

requestInitialized()

在Servlet請求中添加屬性

javax.servlet.ServletRequestAttributeListener

attributeAdded()

從Servlet請求中刪除屬性

attributeRemoved()

替換了Servlet請求中的屬性

attributeReplaced()

1.1.3  編寫監聽器

監聽器需要根據所響應的事件類型實現相應的接口,並實現接口定義的方法,有關接口的列表請參看前面章節。監聽器還需要創建不含任何參數的公共構造函數。

WEB容器在發出通知、調用監聽器的方法時,已將下列有用的事件類傳遞給相應的監聽器方法:

1.         javax.servlet.http.HttpSessionEvent——提供對HTTP會話對象的訪問

2.         javax.servlet.ServletContextEvent——提供對Servlet上下文對象的訪問

3.         javax.servlet.ServletContextAttributeEvent——提供對Servlet上下文屬性的訪問

4.         javax.servlet.http.HttpSessionBindingEvent——提供對HTTP會話及其屬性的訪問

Servlet 3.0規範可以使用註解@WebListener來定義監聽器,使用註解@WebListener標註的類必須至少實現以下接口之一:

1.       javax.servlet.ServletContextListener

2.       javax.servlet.ServletContextAttributeListener

3.       javax.servlet.http.HttpSessionListener

4.       javax.servlet.http.HttpSessionAttributeListener

5.       javax.servlet.http.HttpSessionActivationListener

6.       javax.servlet.http.HttpSessionBindingListener

7.       javax.servlet.ServletRequestListener

8.       javax.servlet.ServletRequestAttributeListener

下面的代碼片段定義了一個對創建和關閉Servlet上下文事件感興趣的監聽器:

import javax.servlet.ServletContextEvent;

importjavax.servlet.ServletContextListener;

importjavax.servlet.annotation.WebListener;

 

@WebListener

public class ContextListenerImplimplements ServletContextListener {

1.1.4  配置事件監聽器類

要將監聽器配置爲WEB模塊或應用的一部分,可以使用註解@WebListener標註相關的監聽器的實現類,同一種事件可以存在多個對其感興趣的監聽器。也可以將監聽器配置在web.xml(web-fragment.xml)中。如果同一種事件存在多個對其感興趣的監聽器,並且這些監聽器需要按照一定順序執行,則必須在web.xml(web-fragment.xml)中配置監聽器,BES應用服務器將按監聽器在部署描述符中出現的順序對其進行調用(關閉事件除外,將按相反的順序進行調用),舉例來說:

<!-- 監聽器聲明 -->

<listener>

<listener-class>samples.filter.ContextListenerImpl</listener-class>

</listener>

<listener>

<listener-class>samples.filter.SessionAttributeListenerImpl</listener-class>

</listener>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章