Servlet 事件監聽器是一個實現了特定接口的 Java 程序,這個程序專門用于監聽 Web 應用中 ServletContext、HttpSession 和 ServletRequest 等域對象的創建和銷毀過程、監聽這些域對象屬性的修改以及感知綁定到 HttpSession 域中的某個對象的狀態。
Servlet 規范中定義了八種監聽器,這八種監聽器的類型及作用如表 1 所示。
在表 1 中,HttpSessionActivationListener 的描述中涉及活化和鈍化的概念,HttpSession 對象從內存中轉移至硬盤的過程稱為鈍化,HttpSession 對象從持久化狀態變為運行狀態的過程稱為活化。
表 1 Servlet事件監聽器
類 型 |
描 述 |
---|---|
ServletContextListener |
用于監聽 ServletContext 對象的創建與銷毀過程 |
HttpSessionListener |
用于監聽 HttpSession 對象的創建和銷毀過程 |
ServletRequestListener |
用于監聽 ServletRequest 對象的創建和銷毀過程 |
ServletContextAttributeListener |
用于監聽 ServletContext 對象中的屬性變更 |
HttpSessionAttributeListener |
用于監聽 HttpSession 對象中的屬性變更 |
ServletRequestAttributeListener |
用于監聽 ServletRequest 對象中的屬性變更 |
HttpSessionBindingListener |
用于監聽 JavaBean 對象綁定到 HttpSession 對象和從 HttpSession 對象解綁的事件 |
HttpSessionActivationListener |
用于監聽 HttpSession 中對象活化和鈍化的過程 |
根據監聽事件的不同,可以將表中的監聽器分為如下三類。
① 用于監聽域對象創建和銷毀的事件監聽器(ServletContextListener 接口、HttpSessionListener 接口、ServletRequestListener 接口)。
② 用于監聽域對象屬性增加和刪除的事件監聽器(ServletContextAttributeListener 接口、HttpSessionAttributeListener 接口、ServletRequestAttributeListener 接口)。
③ 用于監聽綁定到 HttpSession 域中某個對象狀態的事件監聽器(HttpSessionBindingListener 接口、HttpSessionActivationListener 接口)。
在 Servlet 規范中,這三類事件監聽器都定義了相應的接口,在編寫事件監聽器程序時只需實現對應的接口即可。在使用監聽程序時,Web 服務器會根據監聽器所實現的接口,把它注冊到被監聽的對象上,當觸發了某個對象的監聽事件時,Web 容器將會調用 Servlet 監聽器與之相關的方法對事件進行處理。