2.16.2 URLパターンのマッピング処理
同時実行スレッド数制御で制御できるURL,およびURLパターンに指定したURLとリクエストURLとのマッピングの順序について説明します。また,welcomeファイルに対してURLパターンを設定している場合についても説明します。
(1) 同時実行スレッド数制御で制御できるURL
URLグループ単位での同時実行スレッド数制御で制御できるURLとは,RFC 2616で定義されているリクエストURIを指します。URLグループ単位での同時実行スレッド数制御で制御できるURLは,リクエストURIのスキーム,ホスト,ポート,およびクエリ文字列を含みません。
URLグループ単位での同時実行スレッド数制御で制御できるURLの例を次に示します。
- 受信したHTTPリクエストのリクエストURI:
-
http://localhost/webapp/index.html?id=0001
- URLグループ単位の同時実行スレッド数制御で使用する部分:
-
/webapp/index.html
(2) マッピングの順序
リクエストURLは,次の1.〜3.の順序でマッピングされます。なお,マッピングの順序は,Servlet仕様のサーブレットマッピングの適用順序と同じです。
-
完全一致
リクエストURLとURLパターンが完全に一致する場合,一致したURLパターンが適用されます。
-
プリフィックス一致
リクエストURLとプリフィックスが一致し,さらに,リクエストURLとできるだけ長く文字列が一致するURLパターンが適用されます。
-
拡張子一致
リクエストURLと拡張子が一致する場合,一致したURLパターンが適用されます。
なお,上記の1.〜3.に一致しない場合は,URLグループ単位の同時実行スレッド数制御の対象にはなりません。このようなリクエストURLは,Webアプリケーション単位の同時実行スレッド数制御の対象になります。
次に示すURLパターンを使用して,URLのマッピングの例を説明します。
URLパターン |
URLパターンに対応するURLグループ |
---|---|
/foo/bar |
Control1 |
/foo/* |
Control2 |
/foo/bar/* |
Control3 |
*.do |
Control4 |
- マッピング例1:リクエストURLが「/foo/bar」の場合
-
Control1のURLパターンと完全一致するため,Control1に振り分けられます。
- マッピング例2:リクエストURLが「/foo/bb」の場合
-
完全一致するURLパターンがないため,プリフィックスが一致するControl2に振り分けられます。
- マッピング例3:リクエストURLが「/foo/aa.do」の場合
-
この場合,Control2とControl4で次の個所が一致します。
-
プリフィックス「/foo」がControl2と一致します。
-
拡張子「.do」がControl4と一致します。
マッピング順序では,拡張子一致よりプリフィックス一致が優先されるため,Control2に振り分けられます。
-
- マッピング例4:リクエストURLが「/foo/bar/」の場合
-
この場合,Control2とControl3でそれぞれプリフィックスが一致します。
-
プリフィックス「/foo」がControl2と一致します。
-
プリフィックス「/foo/bar」がControl3と一致します。
より長い文字列で一致するControl3に振り分けられます。
-
- マッピング例5:リクエストURLが「/foo/bar/action.do」の場合
-
この場合,Control2,Control3,Control4で次の個所が一致します。
-
プリフィックス「/foo」がControl2と一致します。
-
プリフィックス「/foo/bar」がControl3と一致します。
-
拡張子「.do」がControl4と一致します。
マッピング順序では拡張子一致よりプリフィックス一致が優先され,さらにより長い文字列が一致するURLパターンが優先されるので,Control3に振り分けられます。
-
- マッピング例6:リクエストURLが「/context/fo」の場合
-
該当するURLパターンがないため,Webアプリケーション単位での同時実行スレッド制御として扱われます。
- マッピング例7:リクエストURLが「/action.do」の場合
-
Control4と拡張子が一致するため,Control4に振り分けられます。
- マッピング例8:リクエストURLが「/boo/action.do」の場合
-
Control4と拡張子が一致するため,Control4に振り分けられます。
(3) welcomeファイルにURLパターンを設定しているときの処理の流れ
welcomeファイルにURLパターンを設定しているときの処理の流れについて,次の図で説明します。この図の例では,Webアプリケーションのコンテキストルートはcontextとし,welcomeファイルはweb.xmlで/index.htmlが設定されているものとします。また,URLパターンとURLグループ単位での同時実行スレッド数制御の定義名は次のとおりとします。
-
URLパターン:/index.html
-
URLグループ単位での同時実行スレッド数制御の定義名:Control1
図2‒18 welcomeファイルにURLパターンを設定する場合の例
図の流れについて次に説明します。
-
クライアントはhttp://localhost/context/にリクエストを送信する。
-
J2EEサーバでは,web.xmlに設定されたwelcomeファイルに対して再度クライアントにアクセスしてもらうため,HTTPステータスコード302を返す。また,Locationヘッダにhttp://localhost/context/index.htmlを含める。
-
HTTPレスポンスを受信したクライアントは,Locationヘッダの値(http://localhost/context/index.html)にリクエストを送信する。
-
該当するWebアプリケーションのリクエストが/index.htmlなので,Control1のURLグループ単位の同時実行スレッド数制御の制御対象となる。リクエスト処理終了後,クライアントに対してレスポンスとしてindex.htmlを送信する。