JSP事件監聽機制(Listener)

在基於JSP/Servlet的Web開發中,在配置web.xml文件時,有時候會需要配置一些Listener元素。那麼在Web開發中,都有哪些Listener呢,它們各自都有什麼作用,下面將對這個問題做個介紹

            在基於Windows的桌面系統中,事件機制很常用,通過這種機制,一個監聽器類(Listener)可以在特定的事件(Event)發生時,採取一些行爲。在基於JSP/Servlet的Web開發中我們通常使用的Listener也是基於這樣一種事件機制。它只有在特定的事件發生時,纔會產生響應。

            打開一份Servlet API 文檔,在javax.servlet和javax.servlet.http兩個包下,能夠找到一共8個以Listener結尾的接口以及6個以Event結尾的類,它們共同構成了Servlet的事件處理模型。當你需要針對某個事件進行處理時,只需要構建一個Listener類,實現相應的Listener接口即可。

1、ServletContextListener 接口

          該接口主要是監聽應用的啓動和終止,並在應用啓動時或者應用終止前執行一些用戶行爲。如在應用啓動時初始化應用的全局變量。 
         【接口方法】contextInitialized() 與 contextDestroyed() 
         【事件參數】ServletContextEvent(getServletContext()可以返回應用的上下文對象) 
         【觸發場景】在容器加載Web應用程序時(例如啓動容器之後),會觸發contextInitialized()方法,而當容器移除Web應用程序時,會觸發contextDestroyed ()方法。

2、ServletContextAttributeListener 接口

          該接口主要監聽應用上下文中的屬性列表的變化,並在變化發生時執行一些用戶行爲。
         【接口方法】attributeAdded()、 attributeReplaced()、attributeRemoved() 
         【接收事件】ServletContextAttributeEvent (通過事件可以得到上下文對象,以及發生變化的屬性的Name和Value)
         【觸發場景】若有屬性被加入到application(ServletContext)對象,則會觸發attributeAdded()方法,同理在替換屬性和移除屬性時,會分別觸發attributeReplaced()、attributeRemoved()方法。

3、ServletRequestListener 接口

          該接口用來監聽請求到達和結束,並在請求達到前和請求結束前執行一些用戶行爲。 
         【接口方法] requestInitialized() 與 requestDestroyed() 
         【接收事件] RequestEvent(通過事件可以得到應用上下文對象和正在監聽的請求對象) 
         【觸發場景] 在request(HttpServletRequest)對象建立或被消滅時,會分別觸發requestInitialized()和requestDestroyed()方法。

4、ServletRequestAttributeListener 接口

          該接口用來監聽請求對象中屬性列表的變化,並在變化發生後執行一些用戶行爲。
         【接口方法】attributeAdded()、 attributeReplaced()、attributeRemoved() 
         【接收事件】ServletRequestAttributeEvent(通過事件可以得到上下文對象、請求對象以及發生變化的屬性的Name和Value) 
         【觸發場景】若有屬性加入到request(HttpServletRequest)對象,則會觸發attributeAdded(),同理在替換屬性與移除屬性時,會分別觸發attributeReplaced()、 attributeRemoved()。

5、HttpSessionListener 接口

          該接口用來監聽Web應用中session列表的改變,並在某個session對象建立和銷燬之前執行一些用戶行爲
         【接口方法】sessionCreated()與sessionDestroyed () 
         【接收事件】HttpSessionEvent(通過事件可以得到發生變化的session對象)
         【觸發場景】在一個session(HttpSession)對象建立或被消滅時,會分別觸發sessionCreated()和sessionDestroyed()方法。

6、HttpSessionAttributeListener 接口

          該接口用來監聽某個session的屬性列表的變化,並在變化發生後執行一些用戶行爲。
         【接口方法】attributeAdded()、 attributeReplaced()、attributeRemoved() 
         【接收事件】HttpSessionBindingEvent(通過事件可以得到變化的session以及變化的屬性的Name和Value) 
         【觸發場景】若有屬性加入到某個session(HttpSession)對象,則會觸發attributeAdded(),同理在替換屬性與移除屬性時,會分別觸發attributeReplaced()、 attributeRemoved()。

7、HttpSessionActivationListener 接口

         【接口方法】sessionDidActivate()與 sessionWillPassivate() 
         【接收事件】HttpSessionEvent(通過事件可以得到發生變化的session對象) 
         【觸發場景】Activate與Passivate是用於置換對象的動作,當session對象爲了資源利用或負載平衡等原因而必須暫時儲存至硬盤或其它儲存器時(透過對象序列化),所作的動作稱之爲Passivate,而硬盤或儲存器上的session對象重新加載JVM時所採的動作稱之爲Activate,所以容易理解的,sessionDidActivate()與sessionWillPassivate()分別於Activeate後與將Passivate前呼叫。

8、HttpSessionBindingListener 接口

         【接口方法】valueBound()與valueUnbound() 
         【接收事件】HttpSessionBindingEvent(通過事件可以得到變化的session以及變化的屬性的Name和Value)
         【觸發場景】實現HttpSessionBindingListener接口的類,其實例如果被加入至session(HttpSession)對象的屬性中,則會觸發valueBound(),如果被從session(HttpSession)對象的屬性中移除,則會觸發valueUnbound(),實現HttpSessionBindingListener接口的類不需在web.xml中註冊。

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