HttpSessionListenerインターフェースの実装と設定方法

HttpSessionListenerインターフェースを利用すると、アプリケーションサーバ内でのセッションを監視し、生成と破棄のタイミングを検知することができます。

HttpSessionListenerインターフェースの実装によるセッション監視の仕方

検知するには、HttpSessionListenerインターフェースを実装したクラスを作成し、対象のWebアプリの「web.xml」に以下のような設定を追加すればOKです。

下記では、<listener>として、<listener-class>に記述している、

jp.co.pa-kun.listener.AppHttpSessionListenerクラスを設定しています。

<listener>
        <listener-class>
            jp.co.pa-kun.listener.AppHttpSessionListener
        </listener-class>
</listener>

AppHttpSessionListenerクラスというのが、HttpSessionListenerインターフェースを実装したクラスですね。

実際に、AppHttpSessionListenerクラスの例を見てみましょう。

このクラスで定義するメソッドは、以下の2つです。

public void sessionCreated(HttpSessionEvent se)

セッションが生成されたタイミングで呼ばれます。

public void sessionDestroyed(HttpSessionEvent se)

セッションが破棄されたタイミングで呼ばれます。セッションが破棄されるのは、設定されたタイムアウトが経過したときと、明示的に、session.invalidate()メソッドが呼ばれてセッションが無効化されたタイミングです。

実装例

import java.util.Date;
 
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
 
import jp.co.koji.common.SessionHolder;
 
public class AppHttpSessionListener implements HttpSessionListener {
 
 
    public void sessionCreated(HttpSessionEvent se)
    {
        HttpSession session = se.getSession();
        System.out.print(getTime() + " Created session :ID="+ session.getId() + " for " + session.getMaxInactiveInterval());
    }
    public void sessionDestroyed(HttpSessionEvent se)
    {
        HttpSession session = se.getSession();
        System.out.println(getTime() + " Destroyed session :ID=" + session.getId());
    }
    private String getTime()
    {
        return new Date(System.currentTimeMillis()).toString();
    }
}

複数のリスナーを定義すれば、どちらの実装メソッドも呼ばれますが、呼ばれる順番が保障されているわけではないことに注意してください。