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

Servlet Session 綁定 JavaBean:HttpSessionBindingListener 與 HttpSessionActivationListener 實戰

     編輯:Java 綜合教學

Servlet Session 綁定 JavaBean:HttpSessionBindingListener 與 HttpSessionActivationListener 實戰

當 JavaBean 需感知自身被放入/移出 Session、或被鈍化/活化時,實現對應監聽器接口即可,無需在 web.xml 配置,容器自動回調。

1. HttpSessionBindingListener

感知綁定/解除綁定:

public class UserBean implements HttpSessionBindingListener {
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("對象被放入 Session: " + event.getName());
    }
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("對象從 Session 移除: " + event.getName());
    }
}

用法:session.setAttribute("user", new UserBean()) 觸發 valueBound;session.removeAttribute("user") 或 Session 失效觸發 valueUnbound。

2. HttpSessionActivationListener

感知鈍化/活化(Session 持久化到磁盤/從磁盤恢復):

public class UserBean implements HttpSessionActivationListener {
    public void sessionWillPassivate(HttpSessionEvent se) {
        System.out.println("對象即將被鈍化(寫入磁盤)");
    }
    public void sessionDidActivate(HttpSessionEvent se) {
        System.out.println("對象已被活化(從磁盤讀取)");
    }
}

3. 啟用 Session 持久化配置

在 META-INF/context.xml 配置 PersistentManager + FileStore:

<Context>
    <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
        <Store className="org.apache.catalina.session.FileStore" directory="it315"/>
    </Manager>
</Context>
  • maxIdleSwap="1":空閒 1 秒即觸發鈍化(測試用,生產環境調大)。
  • directory:鈍化文件存放目錄。

核心特點總結

特性HttpSessionBindingListenerHttpSessionActivationListener
觸發時機綁定/解除綁定 Session鈍化/活化(持久化)
實現者JavaBean 自身JavaBean 自身
需 web.xml 配置否否
典型用途在線用戶計數、資源釋放集群 Session 同步、重啟恢復

善用這兩個接口,讓領域對象擁有「自我感知」能力,代碼更內聚、架構更乾淨。

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