1

たとえば、filter-mapping、intercept-url、mvc:resources などの xml で、いくつかの URL パターンを見てきました。これらのパターンは常に同じですか? これらの URL パターンの違いは//*ですか/**?

4

1 に答える 1

7

この質問をするコンテキストによって異なります。

  1. サーブレット/フィルター マッピング
  2. 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/**それらすべてに一致します。

于 2013-09-18T07:03:35.380 に答える