2020-10-23 JavaWeb_07
監聽器
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 檔案中進行註冊