6.18.1 URIのデコード機能の概要
URIのデコード機能を使用すると,アプリケーションサーバでは,リクエストURIのサーブレットパスおよび追加のパス情報に含まれるURLエンコードされた文字列がデコードされます。ただし,コンテキストパスはデコードされません。
デコードされたURIを使用しないWebアプリケーションを実行するときは,URIのデコード機能を使用しないように設定するか,Webアプリケーション側で対応する必要があります。
URIのデコード機能の使用時に影響があるServlet API,デコードされた文字列を使用する機能,デコード時に使用される文字コード,および文字列のデコードと正規化の実行順序を次に記述します。
- 〈この項の構成〉
(1) URIのデコード機能の使用時に影響があるServlet API
URIのデコード機能を使用する場合,javax.servlet.http.HttpServletRequestインタフェースの次のメソッドでは,デコードされたURIが戻り値となります。
-
getPathInfoメソッド
-
getPathTranslatedメソッド
-
getServletPathメソッド
ただし,getRequestURIメソッドおよびgetRequestURLメソッドでは,デコードされていないURLが戻り値となります。
(2) デコードされた文字列を使用する機能
URIのデコード機能を使用する場合,次に示すマッチング処理で,デコードされた文字列が使用されます。
-
サーブレットおよびJSPのURLパターンとのマッチング
-
デフォルトマッピングとのマッチング
-
静的コンテンツとのマッチング
-
フィルタのURLパターンとのマッチング
-
web.xmlの<error-page>タグ,またはJSPのpageディレクティブのerrPage属性で指定するエラーページとのマッチング
-
アクセスを制限するURLパターンとのマッチング
-
ログイン認証のURL判定
-
リクエストのフォワードおよびインクルード
-
HTTPレスポンス圧縮フィルタのURLパターンとのマッチング
-
URLグループ単位の同時実行スレッド数制御のURLパターンとのマッチング
ただし,コンテキストパスはデコードされないで,元の文字列のまま扱われるため,コンテキストルートと一致しない場合は「404 Not Found」が戻り値となります。
また,アプリケーションサーバの次の機能では,デコード後の文字列でのマッチングは行われません。
-
インプロセスHTTPサーバのエラーページのカスタマイズ機能
-
インプロセスHTTPサーバのリダイレクトによるリクエストの振り分け機能
(3) デコード時に使用される文字コード
URIのデコード機能を使用する場合,デコード時に使用される文字コードはUTF-8です。
(4) 文字列のデコードと正規化の実行順序
クライアントから送信されたリクエストURIで,マッチングに利用されるURLは,デコードされたあとで正規化されます。