web.xml:url-patternタグは互いに比較的ですか?
-
01-10-2019 - |
質問
<servlet-mapping>
<servlet-name>myName</servlet-name>
<url-pattern>/aName</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
...
<url-pattern>
/*
</url-pattern>
</web-resource-collection>
...
</security-constraint>
これは、web.xmlからの抜粋です(JBoss/Tomcat Webサービスを構成するために使用します)。ただしているのではないかと思っています url-pattern
の web-resource-collection
に関連しています url-pattern
の servlet-mapping
.
解決
url-pattern
特定の要求の制約を選択するために使用されます。ここのサーブレット仕様の興味深い部分は次のとおりです。
SRV.12.8.3リクエストの処理
サーブレットコンテナがリクエストを受信した場合、srv.11.1で説明されているアルゴリズムを使用して、で定義されている制約(存在する場合)を選択するものとします。
url-pattern
それはリクエストURIに最適な一致です。 制約が選択されていない場合、コンテナはリクエストを受け入れるものとします。それ以外の場合、コンテナは、リクエストのHTTPメソッドが選択したパターンで制約されているかどうかを判断するものとします。そうでない場合、要求は受け入れられます。それ以外の場合、リクエストはに適用される制約を満たす必要がありますhttp-method
でurl-pattern
. 。次のルールの両方を満たし、関連するサーブレットに派遣され、派遣される必要があります。
と:
SRV.11.1 URLパスの使用
クライアントのリクエストを受け取ると、Webコンテナはそれを転送するWebアプリケーションを決定します。選択されたWebアプリケーションには、リクエストURLの開始と一致する最長のコンテキストパスが必要です。 URLの一致した部分は、サーブレットにマッピングするときのコンテキストパスです。
次にWebコンテナは、以下に説明するパスマッピング手順を使用して要求を処理するためにサーブレットを見つける必要があります.
サーブレットへのマッピングに使用されるパスは、リクエストオブジェクトからコンテキストパスとパスパラメーターを差し引いたリクエストURLです。以下のURLパスマッピングルールは、順番に使用されます。最初の成功した試合は、それ以上の試合を試みることなく使用されます:
- コンテナは、サーブレットのパスへの要求のパスの正確な一致を見つけようとします。成功した試合がサーブレットを選択します。
- コンテナは再帰的に最長のPath-Prefixを一致させようとします。これは、パスセパレーターとして「/」文字を使用して、パスツリーを一度にディレクトリに踏み込むことによって行われます。最長の一致が選択されたサーブレットを決定します。
- URLパスの最後のセグメントに拡張機能(.JSPなど)が含まれている場合、サーブレットコンテナは、拡張機能のリクエストを処理するサーブレットを一致させようとします。拡張機能は、最後の「」の後の最後のセグメントの一部として定義されます。キャラクター。
- 以前の3つのルールのいずれもサーブレットマッチをもたらさない場合、コンテナは要求されたリソースに適したコンテンツを提供しようとします。アプリケーション用に「デフォルト」サーブレットが定義されている場合、使用されます。
SRV.11.2マッピングの仕様
Webアプリケーションの展開記述子では、次の構文を使用してマッピングを定義します。
- 「/」文字で始まり、「/*」の接尾辞で終わる文字列がパスマッピングに使用されます。
- 「*。」で始まる文字列プレフィックスは、拡張マッピングとして使用されます。
- 「/」文字のみを含む文字列は、アプリケーションの「デフォルト」サーブレットを示します。この場合、サーブレットパスはリクエストURIからコンテキストパスを差し引いて、パス情報はnullです。
- 他のすべての文字列は、正確な一致にのみ使用されます。
他のヒント
それは私には理にかなっているでしょう Security-Constraint/Web-Resource-Collection/URL-Pattern は いいえ に関連して サーブレットマッピング/URLパターン, 、次の理由で:いくつかがあることがあります サーブレットマッピング web.xmlの要素、その場合、どちらが明確ではないでしょう サーブレットマッピング/URLパターン 相対的なURIを解決するために、それは1つでした。 (ただの推測 - 私はまだTomcatでセキュリティの制約を使用していません)。
いいえ、それらは互いに相対的ではありません。与えられたものをバインドする方法はありません サーブレットマッピング に セキュリティ制約. 。どちらも特定のURLパターンに適用されます。セキュリティの制約は、特定のHTTPメソッド(GET、POST、...)にのみ適用できます。そのため、非常に独立しています。
両方の要素が定義され、で説明されています サーブレット仕様. 。セキュリティに関するセクションSRV.12.8、およびURLパターン要素に関する詳細をお読みください。