カテゴリ: Jakarta EE 更新日: 2026/01/05

Jakarta サーブレットリスナーの仕組みと利用例を徹底解説!初心者向けリクエスト処理ガイド

Jakarta サーブレットリスナーの仕組みと利用例
Jakarta サーブレットリスナーの仕組みと利用例

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

生徒

「先生、Jakarta サーブレットリスナーってどんなときに使うんですか?フィルタとどう違うんですか?」

先生

「リスナーはサーブレットのライフサイクルやセッションの開始や終了といったイベントを検知して処理を実行できる仕組みなんだ。フィルタはリクエストやレスポンスを横取りして処理を加えるけれど、リスナーはイベントの発生を待って反応する点が違うよ。」

生徒

「なるほど!例えばセッションが作られたときや破棄されたときに、自動で処理できるってことですね。」

先生

「その通り。ではJakarta サーブレットリスナーの仕組みと具体的な利用例を順番に学んでいこう。」

1. Jakarta サーブレットリスナーとは

1. Jakarta サーブレットリスナーとは
1. Jakarta サーブレットリスナーとは

Jakarta サーブレットリスナーは、アプリケーション全体やリクエスト、セッションに関するイベントを検知して処理を実行できる仕組みです。例えばアプリケーションが起動したときに初期化処理を行ったり、ユーザーのセッションが破棄されたときにリソースを解放したりといった場面で活用されます。リスナーはjakarta.servletパッケージのインターフェースを実装して作成します。

2. 代表的なJakarta サーブレットリスナーの種類

2. 代表的なJakarta サーブレットリスナーの種類
2. 代表的なJakarta サーブレットリスナーの種類

Jakarta サーブレットでは複数のリスナーインターフェースが用意されています。それぞれ用途に応じて使い分けることができます。

  • ServletContextListener:アプリケーションの開始と終了を検知
  • HttpSessionListener:セッションの作成と破棄を検知
  • ServletRequestListener:リクエストの開始と終了を検知
  • ServletContextAttributeListener:アプリケーションスコープ属性の変更を検知
  • HttpSessionAttributeListener:セッション属性の追加や削除を検知
  • ServletRequestAttributeListener:リクエスト属性の追加や削除を検知

3. ServletContextListenerの利用例

3. ServletContextListenerの利用例
3. ServletContextListenerの利用例

アプリケーションが起動したときにデータベース接続プールを初期化し、終了時にクローズするような処理をServletContextListenerで実現できます。


import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;

@WebListener
public class AppContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("アプリケーション起動時に初期化処理を実行します");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("アプリケーション終了時にリソースを解放します");
    }
}

4. HttpSessionListenerの利用例

4. HttpSessionListenerの利用例
4. HttpSessionListenerの利用例

ユーザーがログインしてセッションが開始されたり、一定時間でセッションが破棄されたりするイベントをキャッチできます。例えば同時ログイン数をカウントする用途に使えます。


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

@WebListener
public class SessionCounterListener implements HttpSessionListener {
    private static int activeSessions = 0;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        activeSessions++;
        System.out.println("セッション開始: 現在のセッション数 = " + activeSessions);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        activeSessions--;
        System.out.println("セッション終了: 現在のセッション数 = " + activeSessions);
    }
}

5. ServletRequestListenerの利用例

5. ServletRequestListenerの利用例
5. ServletRequestListenerの利用例

リクエストが来たときやレスポンスが返る直前に処理を実行できます。例えばアクセスログを記録するのに便利です。


import jakarta.servlet.ServletRequestEvent;
import jakarta.servlet.ServletRequestListener;
import jakarta.servlet.annotation.WebListener;

@WebListener
public class RequestLoggerListener implements ServletRequestListener {
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("リクエスト開始: " + sre.getServletRequest().getRemoteAddr());
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("リクエスト終了");
    }
}

6. Jakarta サーブレットリスナーのメリット

6. Jakarta サーブレットリスナーのメリット
6. Jakarta サーブレットリスナーのメリット

Jakarta サーブレットリスナーを使うと、アプリケーションの状態変化を自動的に監視できるため、コードの分離やメンテナンス性が高まります。例えばログの管理、セッション監視、リソースの解放、属性の変更検知などを一元的に扱うことができ、開発効率や保守性の向上につながります。

まとめ

まとめ
まとめ

Jakarta サーブレットリスナーの全体像を振り返る

今回の記事では、Jakarta サーブレットリスナーの仕組みや役割について、初心者の方でも理解できるように段階的に解説してきました。サーブレットリスナーは、Webアプリケーションの中で発生するさまざまなイベントを検知し、自動的に処理を実行できる非常に重要な機能です。アプリケーションの起動や終了、ユーザーセッションの開始や破棄、リクエストの受信や完了といったタイミングを正確に捉えることで、処理の抜け漏れを防ぎ、安定したWebアプリケーションを構築できます。 サーブレットやフィルタと比べると、リスナーは「何かが起きた瞬間」に反応する仕組みであり、処理の流れに直接介入するのではなく、裏側で状態変化を見守る存在だと理解すると分かりやすくなります。

リスナーとフィルタの違いを理解する重要性

記事の冒頭で触れたように、Jakarta サーブレットリスナーとフィルタは混同されやすい機能ですが、役割は大きく異なります。フィルタはリクエストやレスポンスの処理に割り込み、内容を変更したり制御したりするのに対し、リスナーはイベントの発生そのものを検知して処理を実行します。この違いを理解することで、「どの処理をリスナーに書くべきか」「どの処理をフィルタに任せるべきか」という設計判断ができるようになります。これは、JakartaEE を使ったサーブレット開発において非常に重要な考え方です。

代表的なリスナーと実務での活用イメージ

ServletContextListener はアプリケーション全体のライフサイクルを管理するために使われ、起動時の初期化処理や終了時のリソース解放などで活躍します。HttpSessionListener はユーザー単位の状態変化を把握できるため、同時ログイン数の管理やセッション監視に役立ちます。また、ServletRequestListener を使えば、リクエスト単位でのログ取得や処理時間の計測なども可能です。これらのリスナーを適切に使い分けることで、Webアプリケーション全体の挙動を把握しやすくなり、トラブルシューティングや運用監視にも強くなります。

サンプルコードから学ぶリスナーの基本構造


@WebListener
public class SampleListener implements ServletRequestListener {
    @Override
    public void requestInitialized(ServletRequestEvent event) {
        System.out.println("リクエストが開始されました");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent event) {
        System.out.println("リクエストが終了しました");
    }
}

このようなシンプルなコードでも、リクエストの開始と終了を確実に検知できます。処理をサーブレットの中に直接書かなくても、リスナーとして分離できる点が大きな特徴です。これにより、コードの見通しが良くなり、機能追加や修正も行いやすくなります。

Jakarta サーブレットリスナーを理解するメリット

サーブレットリスナーを理解し活用できるようになると、Webアプリケーションの設計力が一段階向上します。イベント駆動の考え方を身につけることで、「いつ」「どこで」「何をするべきか」を整理しやすくなり、結果として保守性と拡張性の高いアプリケーションを構築できます。初心者のうちからリスナーの役割を意識しておくことは、将来的に大規模な JakartaEE アプリケーションを扱う際にも必ず役立ちます。

先生と生徒の振り返り会話

生徒「リスナーは裏側でイベントを見守る存在だという説明が、とても分かりやすかったです」

先生「それを理解できたのは大きいね。フィルタやサーブレットとの役割分担が見えてくるはずだよ」

生徒「セッションやリクエストの変化を自動で検知できるのは、とても便利だと感じました」

先生「実務でもログ管理やリソース管理でよく使われるから、ぜひ活用してみてね」

生徒「これからは、どの処理をリスナーに任せるかを考えながら設計してみます」

カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkでフォームデータをコントローラで扱う方法を完全解説|Java初心者向けコントローラ入門
New2
Jakarta EE
Jakarta EE JSPにおけるJSTLとスクリプトレットの違いと使い分けを初心者向けに徹底解説
New3
Play Framework
Play Frameworkでクエリパラメータをコントローラで処理する方法を完全解説|Java初心者向け入門
New4
Play Framework
Play FrameworkとSpring Bootの違いを徹底比較!初心者でもわかるJavaフレームワーク入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EE JSPでJSTL SQLタグを使った簡易データベースアクセスをやさしく解説
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE JSPにおけるJSTL国際化タグ(fmt:message)の使い方を初心者向けに完全解説
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EE JSPでJSTLを使ったJSONやREST APIレスポンス処理を初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Play Framework
Play Frameworkでリクエストデータの受け取り方を完全解説|Java初心者向けコントローラ入門