カテゴリ: Servlet 更新日: 2025/08/08

JavaのHttpSessionListenerのsessionDestroyedメソッドとは?初心者でもわかるセッション終了処理の基本

HttpSessionListenerのsessionDestroyedメソッド
HttpSessionListenerのsessionDestroyedメソッド

先生と生徒の会話形式で理解しよう

生徒

「JavaのWebアプリケーションで、ユーザーのセッションが終わったときに何か処理を実行する方法ってあるんですか?」

先生

「ありますよ。それにはHttpSessionListenerインターフェースのsessionDestroyedメソッドを使えば、セッション終了時に自動で処理が呼び出されます。」

生徒

「セッションが切れたときにログを出したり、データベースを更新したりもできますか?」

先生

「もちろんできますよ。それでは、sessionDestroyedメソッドの基本的な使い方を見ていきましょう!」

1. HttpSessionListenerとは

1. HttpSessionListenerとは
1. HttpSessionListenerとは

Javaのjavax.servlet.http.HttpSessionListenerインターフェースは、Webアプリケーションでユーザーセッションの生成と破棄を監視するために用意された仕組みです。

このインターフェースを実装することで、サーバー側でセッションが作られたときや削除されたときに特定の処理を実行することができます。セッションのライフサイクルを管理するために非常に便利な機能です。

2. sessionDestroyedメソッドとは

2. sessionDestroyedメソッドとは
2. sessionDestroyedメソッドとは

sessionDestroyedメソッドは、HttpSessionListenerに定義されているメソッドのひとつで、ユーザーのセッションが無効になったときに自動で呼び出されます。

このメソッドを使えば、セッション終了時にログを記録したり、リソースを解放したり、データベースに情報を保存したりといった処理を実装できます。

3. セッションが破棄されるタイミング

3. セッションが破棄されるタイミング
3. セッションが破棄されるタイミング

セッションは以下のようなタイミングで破棄されます:

  • セッションタイムアウトが発生したとき
  • 明示的にsession.invalidate()が呼ばれたとき
  • Webアプリケーションが停止または再起動されたとき

これらのどのケースでも、sessionDestroyedメソッドは呼び出されます。

4. sessionDestroyedメソッドの基本実装

4. sessionDestroyedメソッドの基本実装
4. sessionDestroyedメソッドの基本実装

以下にsessionDestroyedメソッドを使ったHttpSessionListenerの基本的なコード例を紹介します。


import jakarta.servlet.http.HttpSessionEvent;
import jakarta.servlet.http.HttpSessionListener;

public class MySessionDestroyLogger implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        // 省略:セッション生成時の処理
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        String sessionId = event.getSession().getId();
        System.out.println("セッションが破棄されました: " + sessionId);
    }
}

5. セッション属性を使った処理の例

5. セッション属性を使った処理の例
5. セッション属性を使った処理の例

セッションに保存されたデータを使って、終了時にログ記録やデータベース更新を行うことも可能です。以下はセッションからユーザー名を取得してログに出力する例です。


@Override
public void sessionDestroyed(HttpSessionEvent event) {
    Object user = event.getSession().getAttribute("username");
    System.out.println("セッション終了 - ユーザー名: " + user);
}

6. web.xmlやアノテーションでの登録

6. web.xmlやアノテーションでの登録
6. web.xmlやアノテーションでの登録

HttpSessionListenerをServletアプリケーションで有効化するには、以下のどちらかでリスナーを登録します。

web.xmlに記述する方法:

<listener>
    <listener-class>com.example.MySessionDestroyLogger</listener-class>
</listener>
@WebListenerアノテーションを使う方法:

import jakarta.servlet.annotation.WebListener;

@WebListener
public class MySessionDestroyLogger implements HttpSessionListener {
    // 上記と同じ実装
}

7. セッション終了処理で注意すべきこと

7. セッション終了処理で注意すべきこと
7. セッション終了処理で注意すべきこと

sessionDestroyedメソッド内で重い処理や長時間かかる通信処理を実行すると、Webサーバー全体のパフォーマンスに悪影響を与える場合があります。

そのため、実行する処理はできるだけ軽量にし、ログ記録やフラグ更新など最小限の内容に留めるのが一般的です。

8. アクティブセッション数の管理にも活用できる

8. アクティブセッション数の管理にも活用できる
8. アクティブセッション数の管理にも活用できる

sessionCreatedsessionDestroyedを組み合わせて使うことで、現在のアクティブセッション数をリアルタイムにカウントすることが可能になります。

たとえば、セッションが作られるたびにカウントをインクリメントし、破棄されるたびにデクリメントすれば、現在ログイン中のユーザー数などを管理できます。

カテゴリの一覧へ
新着記事
Springの@Transactional徹底解説!トランザクションの伝播・分離レベル・タイムアウトの基本
JavaのHashMapクラスgetメソッドの使い方を完全ガイド!初心者でもわかるjava.util入門
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本