Servlet 事件監(jiān)聽器是一個實現(xiàn)了特定接口的 Java 程序,這個程序?qū)iT用于監(jiān)聽 Web 應(yīng)用中 ServletContext、HttpSession 和 ServletRequest 等域?qū)ο蟮膭?chuàng)建和銷毀過程、監(jiān)聽這些域?qū)ο髮傩缘男薷囊约案兄壎ǖ?HttpSession 域中的某個對象的狀態(tài)。
Servlet 規(guī)范中定義了八種監(jiān)聽器,這八種監(jiān)聽器的類型及作用如表 1 所示。
在表 1 中,HttpSessionActivationListener 的描述中涉及活化和鈍化的概念,HttpSession 對象從內(nèi)存中轉(zhuǎn)移至硬盤的過程稱為鈍化,HttpSession 對象從持久化狀態(tài)變?yōu)檫\行狀態(tài)的過程稱為活化。
表 1 Servlet事件監(jiān)聽器
類 型 |
描 述 |
---|---|
ServletContextListener |
用于監(jiān)聽 ServletContext 對象的創(chuàng)建與銷毀過程 |
HttpSessionListener |
用于監(jiān)聽 HttpSession 對象的創(chuàng)建和銷毀過程 |
ServletRequestListener |
用于監(jiān)聽 ServletRequest 對象的創(chuàng)建和銷毀過程 |
ServletContextAttributeListener |
用于監(jiān)聽 ServletContext 對象中的屬性變更 |
HttpSessionAttributeListener |
用于監(jiān)聽 HttpSession 對象中的屬性變更 |
ServletRequestAttributeListener |
用于監(jiān)聽 ServletRequest 對象中的屬性變更 |
HttpSessionBindingListener |
用于監(jiān)聽 JavaBean 對象綁定到 HttpSession 對象和從 HttpSession 對象解綁的事件 |
HttpSessionActivationListener |
用于監(jiān)聽 HttpSession 中對象活化和鈍化的過程 |
根據(jù)監(jiān)聽事件的不同,可以將表中的監(jiān)聽器分為如下三類。
① 用于監(jiān)聽域?qū)ο髣?chuàng)建和銷毀的事件監(jiān)聽器(ServletContextListener 接口、HttpSessionListener 接口、ServletRequestListener 接口)。
② 用于監(jiān)聽域?qū)ο髮傩栽黾雍蛣h除的事件監(jiān)聽器(ServletContextAttributeListener 接口、HttpSessionAttributeListener 接口、ServletRequestAttributeListener 接口)。
③ 用于監(jiān)聽綁定到 HttpSession 域中某個對象狀態(tài)的事件監(jiān)聽器(HttpSessionBindingListener 接口、HttpSessionActivationListener 接口)。
在 Servlet 規(guī)范中,這三類事件監(jiān)聽器都定義了相應(yīng)的接口,在編寫事件監(jiān)聽器程序時只需實現(xiàn)對應(yīng)的接口即可。在使用監(jiān)聽程序時,Web 服務(wù)器會根據(jù)監(jiān)聽器所實現(xiàn)的接口,把它注冊到被監(jiān)聽的對象上,當(dāng)觸發(fā)了某個對象的監(jiān)聽事件時,Web 容器將會調(diào)用 Servlet 監(jiān)聽器與之相關(guān)的方法對事件進(jìn)行處理。