2020-10-23 JavaWeb_07

零>發表於2020-10-23

監聽器

servlet幾大功能
控制器
過濾器
監聽器
顯示器–(jsp)

監聽器
監聽器就是一個實現特定介面的java類,其功能用於監聽某些物件的建立和銷燬或物件屬性改變,當被監聽物件發生上述事件後,監聽器某個方法將立即被執行。

servlet監聽器
在servlet規範中定義了多種型別的監聽器,可用於監聽ServletContext,HttpSession和ServletRequest這三個域物件的事件源。主要有三種:
監聽三個域物件建立和銷燬的事件監聽器,與域物件的生命週期有關。
監聽域物件中的屬性增加和刪除的事件,與域物件的屬性有關。
監聽繫結到HttpSession域中的某個物件的狀態的事件監聽器。

域物件生命週期監聽

ServletContextListener
用於監聽servletContext物件的建立或銷燬。
實現ServletContextListener 介面,可用於監聽 ServletContext 物件的建立和銷燬事件。

當 ServletContext 物件被建立時,觸發contextInitialized (ServletContextEvent sce)方法。
當 ServletContext 物件被銷燬時,觸發contextDestroyed(ServletContextEvent sce)方法。

HttpSessionListener
實現HttpSessionListener介面,可用於監聽HttpSession的建立和銷燬。

建立一個Session時,sessionCreated(HttpSessionEvent se) 方法將會被呼叫。
銷燬一個Session時,sessionDestroyed (HttpSessionEvent se) 方法將會被呼叫。

ServletRequestListener
實現ServletRequestListener 介面,可用於監聽ServletRequest 物件的建立和銷燬。

Request 物件被建立時,監聽器的requestInitialized方法將會被呼叫。
Request物件被銷燬時,監聽器的requestDestroyed方法將會被呼叫。

域物件屬性監聽器

ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener
三種型別域物件的屬性,
當執行域物件.setAttribute();域物件.removeAttribute(); 的時候,因物件的屬性發生變化將自動執行對應的方法!

常用方法
三種型別域物件增加一個屬性時,web容器就呼叫事件監聽器的 attributeAdded 方法:

public void attributeAdded(ServletContextAttributeEvent scae) 
public void attributeAdded(HttpSessionBindingEvent  hsbe) 
public void attributeAdded(ServletRequestAttributeEvent srae)

三種型別域物件中的某個屬性被替換時,web容器呼叫事件監聽器的attributeReplaced方法:

public void attributeReplaced(ServletContextAttributeEvent scae) 
public void attributeReplaced (HttpSessionBindingEvent  hsbe) 
public void attributeReplaced(ServletRequestAttributeEvent srae)

三種型別域物件中的某個屬性被刪除時,web 容器呼叫事件監聽器的attributeRemoved方法:

public void attributeRemoved(ServletContextAttributeEvent scae) 
public void attributeRemoved(HttpSessionBindingEvent  hsbe) 
public void attributeRemoved(ServletRequestAttributeEvent srae)

HttpSession監聽器

HttpSession監聽器,可以監聽物件繫結到session中的事件。儲存在 Session 域中的物件可以有多種狀態:繫結到 Session 中;從 Session 域中解除繫結;隨 Session 物件持久化到一個儲存裝置中(鈍化);隨 Session 物件從一個儲存裝置中恢復(活化)。
Servlet 規範中定義了兩個特殊的監聽介面:
通過實現
HttpSessionBindingListener介面(用於感知繫結或解除繫結)
HttpSessionActivationListener介面(用於鈍化或活化)

可以完成相關相關功能
注意:使用這兩個介面的類不需要 web.xml 檔案中進行註冊