JSP 2.0,2.1 JSP ページ ISO-8859-1
2.22 URI のデコード機能
URI のデコード機能は,Web サーバ連携,およびインプロセス HTTP サーバで利用できます。
この節では,URI のデコード機能について説明します。
この節の構成を次の表に示します。
表 2‒66 この節の構成(URI のデコード機能)
分類 タイトル 参照先
解説 URI のデコード機能の概要 2.22.1
設定 実行環境での設定(J2EE サーバの設定) 2.22.2
注意事項 URI のデコード機能を使用する場合の注意事項 2.22.3
注 「実装」および「運用」について,この機能固有の説明はありません。
2.22.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 は,デコードされたあと で正規化されます。
2.22.2 実行環境での設定(J2EE サーバの設定)
URI のデコード機能を使用する場合,J2EE サーバの設定が必要です。
J2EE サーバの設定は,簡易構築定義ファイルで実施します。URI のデコード機能の定義は,簡易構築定義 ファイルの論理 J2EE サーバ(j2ee-server)の<configuration>タグ内の
webserver.http.request.uri_decode.enabled に指定します。このパラメタでは,URI のデコード機能を 使用するかどうかを指定します。
簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーションサー バ リファレンス 定義編(サーバ定義)」の「4.6 簡易構築定義ファイル」を参照してください。
2.22.3 URI のデコード機能を使用する場合の注意事項
ここでは,URI のデコード機能を使用する場合の注意事項について説明します。
(1) 文字列のデコードと正規化の実行順序
サーブレットパスと URL パターンのマッチングでは,デコードされたあとで正規化された URI が使用さ れます。
コンテキストパスとコンテキストルートのマッチングでは,デコードされないで正規化された URI が使用 されます。
(2) リクエストの属性
フォワード時またはインクルード時にリクエストに追加される属性にも,デコードされた値が格納されるも のがあります。フォワード時またはインクルード時にリクエストに設定される各属性について,格納される 値がデコードされるかどうかを次の表に示します。
処理 属性 格納される値のデコードの実行
フォワー ド
javax.servlet.forward.request_uri × javax.servlet.forward.context_path × javax.servlet.forward.servlet_path ○ javax.servlet.forward.path_info ○ javax.servlet.forward.query_string × インク
ルード
javax.servlet.include.request_uri × javax.servlet.include.context_path × javax.servlet.include.servlet_path ○ javax.servlet.include.path_info ○ javax.servlet.include.query_string ×
(凡例)
○:デコードされる
×:デコードされない
各属性および各属性に格納される値については,サーブレット仕様書を参照してください。
(3) HTTP セッションの引き継ぎ
コンテキストパスはデコードされないで,元の文字列のまま扱われるため,HTTP セッションは引き継が れます。