たとえば、filter-mapping、intercept-url、mvc:resources などの xml で、いくつかの URL パターンを見てきました。これらのパターンは常に同じですか? これらの URL パターンの違いは/
何/*
ですか/**
?
1 に答える
この質問をするコンテキストによって異なります。
- サーブレット/フィルター マッピング
- Spring Security マッピング
サーブレット/フィルター マッピング
Web アプリケーションのデプロイメント記述子では、次の構文を使用してマッピングを定義します。
- 「/」文字で始まり「/*」サフィックスで終わる文字列は、パス マッピングに使用されます。
- 「*.」で始まる文字列。プレフィックスは拡張マッピングとして使用されます。
- 空の文字列 ("") は、アプリケーションのコンテキスト ルート (つまり、フォームのリクエスト) に正確にマップされる特別な URL パターンです
http://host:port/<contextroot>/
。この場合、パス情報は「/」で、サーブレット パスとコンテキスト パスは空の文字列 ("") です。- 「/」文字のみを含む文字列は、アプリケーションの「デフォルト」サーブレットを示します。この場合、サーブレット パスはリクエスト URI からコンテキスト パスを引いたものであり、パス情報は null です。
- 他のすべての文字列は完全一致のみに使用されます
これは、サーブレット仕様 (JSR 315) (セクション 12.2) に由来します。
サーブレット/フィルター マッピング シナリオ/
では、「デフォルト」サーブレットを意味します。通常、これはDefaultServlet
(Tomcat では) がマップされる場所です。基本的に、すべての受信リクエストを処理し、処理のためにチェーンのさらに下にそれらを渡しません (基本的に、これはラスト キャッチオール マッピングです)。
/*
サーブレット マッピング シナリオでは、すべての着信 URL を意味します (処理できない場合は、last-catch-all-mapping から渡されます)。
Spring Security マッピング
Springについて話すとき、 、/
、/*
および/**
は別の意味を持ちます。いわゆる Ant スタイルのパス式を参照します。
where/
は / (アプリケーションのルート) のみを/*
意味し、where は 1 レベルの深さを含むルートを意味し、where/**
はすべてを意味します。
したがって/foo/*
、URL は と一致しますが、一致し/foo/bar
ません/foo/bar/baz
。一方/**
、または/foo/**
それらすべてに一致します。