カテゴリ: Servlet 更新日: 2026/02/04

JavaのHttpServletMappingインターフェースを徹底解説!Servletのマッピング情報を取得する方法

HttpServletMapping
HttpServletMapping

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

生徒

「ServletのURLにマッピングされている情報って、実行時に取り出せるんですか?」

先生

「はい、Java Servletではjavax.servlet.http.HttpServletMappingインターフェースを使えば、実行時にServletへのマッピング情報を取得できますよ。」

生徒

「どういうときに使うんですか?」

先生

「URLパターンによって処理を分岐させたいときや、どのServletがどのパターンで呼ばれたかをログに残したいときに便利です。それでは、詳しく見ていきましょう。」

1. HttpServletMappingとは?

1. HttpServletMappingとは?
1. HttpServletMappingとは?

Javaのjavax.servlet.http.HttpServletMappingは、Servletにリクエストが届いたときに、そのリクエストがどのURLパターンによってマッピングされたかの情報を提供するインターフェースです。

Servlet 4.0以降で追加されたこの機能を使うと、リクエストごとにマッピングされたパターンやServlet名、リクエストパスなどを取得できます。

2. HttpServletMappingを取得する方法

2. HttpServletMappingを取得する方法
2. HttpServletMappingを取得する方法

HttpServletRequestオブジェクトのgetHttpServletMapping()メソッドを使うことで、HttpServletMappingインターフェースのインスタンスを取得できます。


HttpServletMapping mapping = request.getHttpServletMapping();

このmappingオブジェクトから、マッピングに関する詳細な情報を取得できます。

3. 主なメソッド一覧

3. 主なメソッド一覧
3. 主なメソッド一覧

HttpServletMappingには以下のようなメソッドがあります。

  • getMatchValue():実際にマッチしたパターン(例:*.jsp
  • getPattern():Servletに指定されたマッピングパターン
  • getServletName():呼び出されたServletの名前
  • getMappingMatch():マッピングの種類(EXACTDEFAULTEXTENSIONなど)

これらを使えば、リクエストされたURLがどのようにServletと対応づけられているかがわかります。

4. サンプルコード:Servletでマッピング情報を取得

4. サンプルコード:Servletでマッピング情報を取得
4. サンプルコード:Servletでマッピング情報を取得

@WebServlet("/sample/*")
public class MappingExampleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpServletMapping mapping = request.getHttpServletMapping();

        System.out.println("Servlet名: " + mapping.getServletName());
        System.out.println("マッチした値: " + mapping.getMatchValue());
        System.out.println("パターン: " + mapping.getPattern());
        System.out.println("マッチ種別: " + mapping.getMappingMatch());

        response.getWriter().println("マッピング情報を出力しました。");
    }
}

5. どんなときに使う?実用例を紹介

5. どんなときに使う?実用例を紹介
5. どんなときに使う?実用例を紹介

HttpServletMappingは、動的なルーティングを行いたい場合や、URLに応じたログ出力、認証の分岐処理などで活用されます。具体的には以下のような場面があります。

  • 拡張子ごとに処理を変えたいとき
  • Servletの呼び出し元を特定してログを記録したいとき
  • パターンによって異なる認可処理を実行したいとき

こうした柔軟な処理を簡単に実装できるのがHttpServletMappingの強みです。

まとめ

まとめ
まとめ

ここまで、Java Servlet 4.0以降で導入されたHttpServletMappingインターフェースの基本機能から具体的な使い方、そして実務での活用シーンまでを詳しく解説してきました。Webアプリケーションの開発において、リクエストがどのように処理系へとルーティングされたかをプログラム側で正確に把握できることは、システムの柔軟性を高める上で非常に重要な要素となります。

HttpServletMappingがもたらす開発上のメリット

従来のServlet開発では、request.getServletPath()request.getPathInfo()を組み合わせて、複雑な文字列操作を行いながらリクエストの意図を解析する必要がありました。しかし、HttpServletMappingを利用することで、開発者は「どのURLパターンによってこのServletが起動されたのか」という情報を、直感的なメソッド呼び出しのみで取得できるようになりました。

特に、大規模なプロジェクトで複数のライブラリやフレームワークが混在している環境では、予期せぬURLマッピングによる競合が発生することがあります。デバッグ時にgetMappingMatch()getPattern()の結果をログに出力するようにしておけば、問題の切り分けが格段にスムーズになります。

マッピング種別(MappingMatch)の理解を深める

HttpServletMappingを使いこなす鍵は、getMappingMatch()が返すMappingMatch列挙型の値を正しく理解することにあります。主要な種別をおさらいしておきましょう。

  • EXACT(完全一致)/user/profileのように、URLが完全に指定されたパターンと一致した場合。
  • EXTENSION(拡張子一致)*.do*.phpのように、特定の拡張子に基づいてマッピングされた場合。
  • PATH(パス一致)/api/*のように、パスのプレフィックスに基づいてマッチングが行われた場合。
  • DEFAULT(デフォルト):どのパターンにも合致せず、デフォルトのServlet(通常は/)が呼び出された場合。

実践的な応用プログラム例

最後に、取得したマッピング情報を用いて、動的にレスポンスを切り替える実践的なコードを紹介します。これにより、1つのServletで複数の役割を持たせつつ、コードの可読性を保つことが可能になります。


@WebServlet(urlPatterns = {"/report/daily/*", "/report/monthly/*", "*.pdf"})
public class AdvancedMappingServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // HttpServletMappingの取得
        HttpServletMapping mapping = request.getHttpServletMapping();
        
        // 文字エンコーディングの設定
        response.setContentType("text/html; charset=UTF-8");
        var out = response.getWriter();

        out.println("<html><body>");
        out.println("<h1>リクエスト解析レポート</h1>");

        // マッピング種別に応じた条件分岐
        switch (mapping.getMappingMatch()) {
            case EXACT:
                out.println("<p>このリクエストは個別設定されたURLから呼び出されました。</p>");
                break;
            case EXTENSION:
                out.println("<p>拡張子「" + mapping.getMatchValue() + "」に基づく処理を実行します。</p>");
                break;
            case PATH:
                out.println("<p>ディレクトリパス「" + mapping.getPattern() + "」配下のリクエストです。</p>");
                // 動的なパラメータ(IDなど)を抽出するロジックをここに記述
                String detailId = mapping.getMatchValue();
                out.println("<p>対象ID: " + detailId + "</p>");
                break;
            default:
                out.println("<p>デフォルト設定で処理されました。</p>");
        }

        out.println("<hr>");
        out.println("<ul>");
        out.println("<li>Servlet名: " + mapping.getServletName() + "</li>");
        out.println("<li>適用されたパターン: " + mapping.getPattern() + "</li>");
        out.println("</ul>");
        out.println("</body></html>");
    }
}

このように、getMatchValue()を活用すれば、ワイルドカード部分に何が入ってきたかを簡単に取り出すことができます。これは、RESTfulなAPI設計や、URLに階層構造を持たせたWebアプリケーションを構築する際に非常に役立ちます。Java EEからJakarta EEへと進化を続けるJava Web技術において、こうした「かゆいところに手が届く」インターフェースを使いこなすことは、プロフェッショナルなエンジニアへの第一歩と言えるでしょう。

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

生徒

「先生、HttpServletMappingの使いどころがかなり具体的に見えてきました!今までだと、URLから文字列を切り出すロジックを自分で一生懸命書いていたんですが、これを使えばスマートに解決できますね。」

先生

「その通りです。車輪の再発明を避けて、標準で提供されているAPIを使うのが、バグを減らすコツですよ。特にマッピングの種別が判別できるのは、セキュリティチェックのフィルタを作るときなどにも重宝します。」

生徒

「セキュリティチェックですか?例えば、特定の拡張子のときだけ認証を厳しくする、といった使いかたでしょうか?」

先生

「いいところに気づきましたね。あるいは、EXACT(完全一致)で呼ばれたときだけ管理者用メニューを表示させる、といった制御も可能です。文字列の比較だけで判定するよりも、フレームワークが認識している『マッピングの意図』を直接取得できるので、誤動作が少なくなります。」

生徒

「なるほど。あと、サンプルコードで見た『getMatchValue()』がすごく便利そうです。URLのワイルドカード部分がそのまま取れるのは、パスパラメータの解析に役立ちますね。」

先生

「そうですね。モダンなフレームワークを使わずにピュアなServletで開発する場面や、既存システムの改修案件では、この機能を知っているかどうかが開発効率に大きく影響します。ぜひ自分のプロジェクトでも、デバッグログにマッピング情報を出すところから始めてみてください。」

生徒

「わかりました!さっそく現在の開発環境に組み込んで、どんな値が取れるか実験してみます。先生、ありがとうございました!」

サーブレットやJSPの基礎を体系的に理解したい人には、 定番の入門書がこちらです。

スッキリわかるサーブレット&JSP入門をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説