カテゴリ: Jakarta EE 更新日: 2025/12/11

JakartaEE サーブレットフィルタと例外処理の連携方法を完全解説!初心者でもわかるエラーハンドリング

Jakarta EE サーブレットフィルタと例外処理の連携方法
Jakarta EE サーブレットフィルタと例外処理の連携方法

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

生徒

「先生、サーブレットでエラーが出たときにどうやって処理すればいいんですか?」

先生

「良い質問だね。JakartaEEではフィルタを使って例外処理をまとめて管理することができるんだ。これによって、各サーブレットにエラーハンドリングのコードをたくさん書かなくても済むんだよ。」

生徒

「なるほど!じゃあ、フィルタで例外をキャッチしてエラーページに転送するみたいなことができるんですか?」

先生

「その通り!エラーが起きたらフィルタで例外を捕まえて、ログを残したり、統一されたエラーページにフォワードしたりできるんだ。実装方法を見ていこう。」

1. サーブレットフィルタと例外処理の役割

1. サーブレットフィルタと例外処理の役割
1. サーブレットフィルタと例外処理の役割

JakartaEEのサーブレットフィルタは、リクエストやレスポンスに対して前処理や後処理を追加できる仕組みです。通常はログ記録やエンコーディング設定、セキュリティチェックなどに使われますが、例外処理の統合にも活用できます。アプリケーション全体のエラーハンドリングをフィルタでまとめることで、可読性が高まり、保守性も向上します。

2. 例外処理フィルタの仕組み

2. 例外処理フィルタの仕組み
2. 例外処理フィルタの仕組み

フィルタのdoFilterメソッド内でリクエストを処理するとき、通常はchain.doFilter()を呼び出します。この呼び出しの中で発生する例外をtry-catchで捕まえて、適切な処理を行うことが可能です。例えば、IOExceptionServletExceptionをログ出力した上でエラーページへ転送する、といった使い方が典型的です。

3. 例外処理フィルタの実装例

3. 例外処理フィルタの実装例
3. 例外処理フィルタの実装例

以下はサーブレットフィルタで例外をキャッチして、ログを記録した後にエラーページへフォワードするサンプルです。


@WebFilter("/*")
public class ExceptionHandlingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        try {
            chain.doFilter(request, response);
        } catch (Exception e) {
            e.printStackTrace(); // ログ出力
            request.setAttribute("errorMessage", e.getMessage());
            request.getRequestDispatcher("/error.jsp").forward(request, response);
        }
    }
}

このフィルタを設定すると、アプリ全体で発生する例外を共通的にキャッチし、エラーページへ誘導できます。

4. エラーページの作成

4. エラーページの作成
4. エラーページの作成

次に、フィルタで転送先となるエラーページを作成します。ここではJSPを利用し、ユーザーにわかりやすいエラーメッセージを表示しましょう。


<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>エラーが発生しました</title>
</head>
<body>
    <h2>申し訳ありません。エラーが発生しました。</h2>
    <p>エラーメッセージ: ${errorMessage}</p>
</body>
</html>

これでアプリケーションの例外が発生した際に、統一されたエラーページを表示できるようになります。

5. 例外処理フィルタを使うメリット

5. 例外処理フィルタを使うメリット
5. 例外処理フィルタを使うメリット
  • アプリ全体のエラーハンドリングを一元管理できる
  • サーブレットごとにエラーロジックを書く必要がなくなる
  • ログの記録や通知処理を統合できる
  • ユーザーに統一されたエラーメッセージを提供できる

6. 導入時の注意点

6. 導入時の注意点
6. 導入時の注意点

例外処理フィルタを導入するときは、全ての例外をまとめて処理するため、想定外のエラーが隠れてしまう可能性があります。そのため、重大な例外はログに詳細を残しつつ、ユーザーには必要最低限の情報を伝えるように設計することが大切です。また、セキュリティ面からスタックトレースを直接画面に出さない工夫も必要です。

関連記事:
カテゴリの一覧へ
新着記事
New1
Jakarta EE
Jakarta EEとクラウドネイティブ開発の相性とは?初心者向けにわかりやすく解説
New2
Jakarta EE
JakartaEE JSPのリクエスト属性とスコープの基本を徹底解説!初心者向け入門ガイド
New3
Play Framework
Play Frameworkのビューテストを徹底解説!Twirlテンプレートの品質を高める方法
New4
Jakarta EE
JakartaEE フィルタで認証と認可を実装する方法を初心者向けに解説!サーブレットのセキュリティ入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Play Framework
Play Frameworkのビューを共通化!テンプレート間のインクルード方法を徹底解説
No.3
Java&Spring記事人気No3
Play Framework
Play Frameworkプロジェクト作成直後にやるべき初期設定ガイド!初心者でも安心
No.4
Java&Spring記事人気No4
Play Framework
Play FrameworkでCSSやJavaScriptを読み込む方法を徹底解説!静的リソースの組み込みガイド
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.6
Java&Spring記事人気No6
Play Framework
Play Frameworkで多言語対応(i18n)を徹底解説!Twirlテンプレートでの使い方
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEの標準仕様とAPI一覧を完全解説!初心者でもわかるエンタープライズJavaの基本