首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Servlet 八大監聽器全解析:生命周期、屬性變更與會話管理

     編輯:Java 相關知識

核心概念

Servlet 規範定義 8 個 Listener 接口、6 個 Event 類,對應 Web 應用的三大作用域(Context、Session、Request)的創建銷毀與屬性變更事件。

八大 Listener 詳表

Listener 接口核心方法事件類觸發場景
ServletContextListenercontextInitialized()
contextDestroyed()
ServletContextEventWeb 應用啟動/停止、重新部署
ServletContextAttributeListenerattributeAdded()
attributeReplaced()
attributeRemoved()
ServletContextAttributeEventApplication 域屬性增/改/刪
HttpSessionListenersessionCreated()
sessionDestroyed()
HttpSessionEventSession 創建/銷毀(超時、invalidate)
HttpSessionAttributeListenerattributeAdded()
attributeReplaced()
attributeRemoved()
HttpSessionBindingEventSession 域屬性增/改/刪
ServletRequestListenerrequestInitialized()
requestDestroyed()
ServletRequestEventRequest 對象創建/銷毀(每次請求)
ServletRequestAttributeListenerattributeAdded()
attributeReplaced()
attributeRemoved()
ServletRequestAttributeEventRequest 域屬性增/改/刪
HttpSessionBindingListenervalueBound()
valueUnbound()
HttpSessionBindingEvent實現該接口的對象被放入/移出 Session 時自動回調,**無需在 web.xml 註冊**
HttpSessionActivationListenersessionDidActivate()
sessionWillPassivate()
HttpSessionEventSession 鈍化/活化(分布式/集群環境序列化持久化),**無需在 web.xml 註冊**

註冊配置 (web.xml)

除 HttpSessionBindingListener 和 HttpSessionActivationListener 外,其餘 6 個需在 web.xml 註冊:

<listener>
    <listener-class>com.example.CustomServletContextListener</listener-class>
</listener>

Servlet 3.0+ 可用 @WebListener 註解替代 XML 配置。

典型應用場景

  • ServletContextListener:初始化全局資源(連接池、配置緩存、定時任務啟動),銷毀時釋放。
  • HttpSessionListener:統計在線用戶數、Session 銷毀時清理購物車等臨時數據。
  • ServletRequestListener:請求級資源初始化、耗時統計、日志記錄。
  • HttpSessionBindingListener:實體類自帶綁定邏輯(如用戶對象進 Session 時記錄登入時間、離開時寫入登出日志)。

事件傳播順序

  1. Context 初始化 → contextInitialized
  2. 請求到達 → requestInitialized → 處理業務 → requestDestroyed
  3. Session 創建 → sessionCreated → 屬性操作觸發 Attribute 事件 → 銷毀 → sessionDestroyed
  4. Context 銷毀 → contextDestroyed

掌握八大監聽器,即掌握了 Web 應用全生命周期的切面編程能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved