20200311 12. サーブレットへのリクエストのマッピング

2805 ワード

12.サーブレットへの要求のマッピング
Webコンテナは、本章で説明するマッピング技術を用いてクライアント要求をサーブレットにマッピングする必要がある(この仕様2.5の以前のバージョンでは、これらのマッピング技術を使用することは、要求ではなく提案として、servletコンテナがクライアント要求をservletにマッピングするためにそれぞれ異なるschemaを有することを可能にする).
12.1 URLパスの使用
クライアント要求を受信すると、ウェブコンテナは、どのWebアプリケーションに転送されるかを決定する.選択したWebアプリケーションは、要求URLの開始に最も長いコンテキストパスを持つ必要があります.サーブレットにマッピングすると、URLマッチングの一部がコンテキストになります.
Webコンテナは、次に、以下に説明するパスマッチングステップを用いてservletを見つけて要求を処理しなければならない.
サーブレットにマッピングするパスは、要求オブジェクトの要求URLからコンテキストとパスパラメータを減算する部分です.以下のURLパスマッピングルールは順番に使用されます.最初の一致を使用して成功し、さらに一致を試みることはありません.
  • コンテナは、servletパスへのリクエストパスの正確な一致を見つけようとします.一致に成功したらservletを選択します.
  • コンテナは、最長パス接頭辞のマッチングを再帰的に試みる.これは、パス区切り記号として/文字を使用して、1つのディレクトリのパスツリーを巡ることによって行われます.最長マッチングは、選択したservletを決定します.
  • URLの最後の部分に拡張子(.jspなど)が含まれている場合、servletコンテナは、拡張子処理要求のサーブレットとしてビューを一致させる.拡張子は、最後のセクションの最後の.文字の後に定義されます.
  • 最初の3つのルールがservletマッチングを生成しない場合、コンテナは要求リソースに関連するコンテンツを提供しようとします.アプリケーションにdefault servletが定義されている場合は、使用されます.多くのコンテナは、コンテンツを提供するための暗黙的なdefault servletを提供しています.コンテナは、大文字と小文字を区別する文字列を使用して一致する必要があります.

  • 12.2マッピング仕様
    Webアプリケーションデプロイメント記述子では、マッピングを定義するために次の構文を使用します.
  • は、/文字で始まり、/*接尾辞で終わる文字列は、パスマッチングのために使用される.
  • は、*.から始まる文字列で拡張子マッピングに使用される.
  • 空文字列「」は、アプリケーションのコンテキストルート、すなわちhttp://host:port//要求形式に正確にマッピングされる特殊なURLモードである.この場合、パス情報は/であり、servletパスおよびコンテキストパスは空の文字列("")である.
  • は、/文字の文字列のみを含み、アプリケーションの「default」servletを表す.この場合、servletパスは、要求URLからコンテキストパスを減算し、パス情報はnullである.
  • であるため、他の文字列は正確な一致にのみ使用されます.

  • 有効なweb.xml(fragmentと注釈から情報が統合された後)に、複数のservletにマッピングされた任意のurl-patternが含まれている場合、デプロイメントは失敗します.
    12.2.1暗黙的マッピング
    コンテナに内部JSPコンテナがある場合、*.jsp拡張子がそれにマッピングされ、JSPページの要求を実行できます.このマッピングは暗黙的マッピングと呼ばれます.Webアプリケーションが*.jspマッピングを定義する場合、その優先度は暗黙的マッピングよりも高い.
    サーブレットコンテナでは、マッピングの優先順位を表示する限り、他の暗黙的なマッピングを許可します.例えば、*.shtmlの暗黙的マッピングは、サーバに含まれる機能にマッピングすることができる.
    12.2.2サンプルマッピングセット
    次のマッピングのセットを見てください.
    表12-1マッピングセットの例
    Path Pattern
    Servlet
    /foo/bar/*
    servlet1
    /baz/*
    servlet2
    /catalog
    servlet3
    *.bop
    servlet4
    次の動作が発生します.
    表12-2入力パスのサンプルマッピングへの適用
    Incoming Path
    Servlet Handling Request
    /foo/bar/index.html
    servlet1
    /foo/bar/index.bop
    servlet1
    /baz
    servlet2
    /baz/index.html
    servlet2
    /catalog
    servlet3
    /catalog/index.html
    “default ” servlet
    /catalog/racecar.bop
    servlet4
    /index.bop
    servlet4 /catalog/index.htmlおよび/catalog/racecar.bopの場合、正確に一致しないため、/catalogにマッピングされたservletは使用されないことに注意してください.