監聽器的分類 監聽域對象自身創建和銷毀的監聽器: ①ServletContextListener介面 監聽 SercvletContext對象 ②HttpSessionListener介面 監聽 HttpSession對象 ③ServletRequestListener介面 監聽 ServletRe ...
監聽器的分類
監聽域對象自身創建和銷毀的監聽器:
①ServletContextListener介面 監聽 SercvletContext對象
②HttpSessionListener介面 監聽 HttpSession對象
③ServletRequestListener介面 監聽 ServletRequest對象
監聽域對象中的屬性的增加、修改和刪除的事件監聽器
④ServletContextAttributeListener介面 監聽 SercvletContext對象屬性
⑤HttpSessionAttributeListener介面 監聽 HttpSession對象屬性
⑥ServletRequestAttributeListener介面 監聽 ServletRequest對象屬性
監聽綁定到 HttpSession 域中某個對象的狀態的事件監聽器
⑦HttpSessionBindingListener介面 監聽 實現了HttpSessionBindingListener介面的對象的session綁定和解除
⑧HttpSessionActivationListener介面 (實現會話的持久化)
監聽器的包含類及其作用
①ServletContextListener
相關方法
contextInitialized(ServletContextEvent arg0):在Web應用載入的時候被調用
contextDestroyed(ServletContextEvent arg0): 在Web應用卸載的時候被調用
arg0.getServletContext()可獲取當前應用的上下文對象
該監聽器的作用:
對相關資源進行初始化工作,如創建資料庫連接池、創建Spring IOC 容器、讀取當前Web應用的初始化參數等
②HttpSessionListener
相關方法
sessionCreated(HttpSessionEvent arg0): Session創建時被調用
sessionDestroyed(HttpSessionEvent arg0): Session銷毀時被調用
Session什麼時候銷毀?
關閉伺服器、Session過期、手動調用session.invalidate()方法
註意:用戶關閉瀏覽器時原有Session並不會銷毀,會等到timeout超時自動銷毀
該監聽器的作用:
統計線上人數、記錄訪問日誌等
③ServletRequestListener
相關方法
requestInitialized(ServletRequestEvent arg0): Request創建時被調用
requestDestroyed(ServletRequestEvent arg0): Request銷毀時被調用
每次請求相應會創建一次和銷毀一次
即每次刷新頁面都會導致Request的創建和銷毀
轉發是一次響應,可以獲取Request的信息
重定向是兩次響應,即前一個頁面的Request對象和重定向後的頁面的Request對象不是同一個對象,因此不能獲得前一個對象的Request信息
該監聽器的作用:
讀取參數,記錄訪問歷史等
④ServletContextAttributeListener
相關方法
attributeAdded(ServletContextAttributeEvent arg0): request.getServletContext().setAttribute("name","value")初次創建調用
attributeReplaced(ServletContextAttributeEvent arg0): request.getServletContext().setAttribute("name","newValue")被修改時調用
attributeRemoved(ServletContextAttributeEvent arg0): 執行request.getServletContext().removeAttribute("name")時調用
以上三個方法中可用arg0.getName()獲取屬性名arg0.getValue()獲取屬性值,但是要註意在attributeReplaced()中獲取的是舊的值
⑤HttpSessionAttributeListener
相關方法
attributeAdded(HttpSessionBindingEvent arg0): session.setAttribute("name", "sessionValue")初次創建調用
attributeReplaced(HttpSessionBindingEvent arg0): session.setAttribute("name", "newSessionValue")被修改時調用
attributeRemoved(HttpSessionBindingEvent arg0): 執行session.removeAttribute("name")時調用
以上三個方法中可用arg0.getName()獲取屬性名arg0.getValue()獲取屬性值,但是要註意在attributeReplaced()中獲取的是舊的值
⑥ServletRequestAttributeListener
相關方法
attributeAdded(ServletRequestAttributeEvent arg0): request.setAttribute("name", "requestValue")初次創建調用
attributeReplaced(ServletRequestAttributeEvent arg0): request.setAttribute("name", "newRequestValue")被修改時調用
attributeRemoved(ServletRequestAttributeEvent arg0): 執行request.removeAttribute("name")時調用
以上三個方法中可用arg0.getName()獲取屬性名arg0.getValue()獲取屬性值,但是要註意在attributeReplaced()中獲取的是舊的值
⑦HttpSessionBindingListener
前提:javaBean實現了該介面
相關方法
valueBound(HttpSessionBindingEvent arg0): session.setAttribute("name", javaBean)觸發綁定方法
valueUnbound(HttpSessionBindingEvent arg0): session.removeAttribute("name")觸發綁定解除方法
⑧HttpSessionActivationListener
實現會話的持久化
前提:實現該介面和序列化介面Serializable
可以感知自己被活化(從硬碟到記憶體)和鈍化(從記憶體到硬碟)的過程
當伺服器突然關閉,用戶的session就不存在了,即用戶就需要重新登錄等操作,這樣很麻煩,於是我們就需要實現會話的持久化來解決。
可以讓我們在重新啟動伺服器之後用戶的session還在伺服器中存在
相關方法
sessionWillPassivate(HttpSessionEvent arg0): 鈍化方法,關閉伺服器調用的方法
可以將用戶的Session儲存到tomcat目錄下的/work/Catalina/localhost/項目名 下的SESSION.ser文件中
sessionDidActivate(HttpSessionEvent arg0): 活化方法,重新啟動伺服器時調用
Session從硬碟回覆到記憶體中,目錄下的SESSION.ser文件小消失