在servlet技術中已經定義了一些事件,并且我們可以針對這些事件來編寫相關的事件監聽器,進而對事件作出相應處理。servlet事件主要有3類:servlet上下文事件、會話事件與請求事件。下面具體講解這3類事件的監聽器實作。
1.對servlet上下文進行監聽(就是jsp中的application)
可以監聽servletcontext對象的建立和删除以及屬性的添加、删除和修改等操作。該監聽器需要使用到如下兩個接口類:
● servletcontextattributelistener:監聽對servletcontext屬性的操作,如增加、删除、修改操作。
● servletcontextlistener:監聽servletcontext。
當建立servletcontext時,激發contextinitialized (servletcontextevent sce)方法;
當銷毀servletcontext時,激發contextdestroyed(servletcontext- event sce)方法。
2.監聽http會話
可以監聽http會話活動情況、http會話中屬性設定情況,也可以監聽http會話的active、paasivate情況等。
該監聽器需要使用到如下多個接口類:
● httpsessionlistener:監聽httpsession的操作。
當建立一個session時,激發session created (sessionevent se)方法;
當銷毀一個session時,激發sessiondestroyed (httpsessionevent se) 方法。
● httpsessionactivationlistener:用于監聽http會話active、passivate情況。
● httpsessionattributelistener:監聽httpsession中屬性的操作。
當在session增加一個屬性時,激發attributeadded(httpsessionbindingevent se) 方法;
當在session删除一個屬性時,激發attributeremoved(httpsessionbindingevent se)方法;
在session屬性被重新設定時,激發attributereplaced(httpsessionbindingevent se) 方法。
3.對用戶端請求進行監聽
對用戶端的請求進行監聽是在servlet 2.4規範中新添加的一項技術,使用的接口類如下:
● servletrequestlistener接口類。
● servletrequestattrubutelistener接口類。
servlet上下文監聽器執行個體
下面編寫一個執行個體,使它能夠對servletcontext以及屬性進行監聽。由以上介紹可知,該類需要實作servletcontextattributelistener和servletcontextlistener接口類,其詳細代碼如下:
程式說明:該監聽器類實作了servletcontextattributelistener和servletcontextlistener兩個接口類中的5個方法:
● contextinitialized(servletcontextevent s)方法用來初始化servletcontext對象。
● contextdestroyed(servletcontextevent s)方法在上下文中删除某個屬性時調用。
● attributeadded(servletcontextattributeevent sa)方法在上下文中添加一個新的屬性時調用。
● attributereplaced(servletcontextattributeevent sa)方法在更新屬性時調用。
● attributeremoved(servletcontextattributeevent sa)方法在上下文中删除某個屬性時會被調用。
在使用這個監聽器之前還需要在web子產品中的web.xml配置檔案中進行聲明,代碼如下:
http會話監聽器執行個體
通過上一個監聽器執行個體,讀者應該對監聽器的實作過程有所了解,本小節将要介紹基于http會話的監聽器。首先建立監聽器類mysessionlistener.java,其源代碼如下:
程式說明:
(1)該程式實作了httpsessionlistener接口類中的兩個方法:
● sessioncreated(httpsessionevent arg0)方法進行http會話建立的監聽,如果http會話被建立将調用該方法。
● sessiondestroyed(httpsessionevent arg0)方法對http會話銷毀進行監聽,如果某個http會話被釋放将調用該方法。
(2)實作httpsessionactivationlistener接口類中的如下兩個方法:
● sessiondidactivate(httpsessionevent arg0)方法對http會話處于active情況進行監聽。
● sessionwillpassivate(httpsessionevent arg0)方法對http會話處于passivate情況進行監聽。
(3)實作httpsessionattributelistener接口類中的如下3種方法:
● attributeadded(httpsessionbindingevent arg0)方法對http會話中屬性添加進行監聽。
● attributereplaced(httpsessionbindingevent arg0)方法對http會話中屬性修改進行監聽。
● attributeremoved(httpsessionbindingevent arg0)方法對http會話中屬性删除進行監聽。