2.6 デフォルトの文字エンコーディング設定機能
2.6.2 デフォルトの文字エンコーディングの適用個所と適用条件
ここでは,J2EE サーバ単位,または Web アプリケーション単位で設定したデフォルトの文字エンコーディ ングの適用個所と,適用時の条件について説明します。
(1) 適用個所
J2EE サーバ単位または Web アプリケーション単位に設定したデフォルトの文字エンコーディングは,次 の個所に適用されます。
• リクエストのデコード
リクエストボディおよびクエリのデコードに使用する,デフォルトの文字エンコーディングに適用され ます。
• レスポンスのエンコード
レスポンスボディおよびレスポンスの Content-Type ヘッダのエンコードに使用する,デフォルトの文 字エンコーディングに適用されます。
• JSP ファイル
JSP ファイルのデフォルトの文字エンコーディングに適用されます。
(2) 適用条件
デフォルトの文字エンコーディングは,Servlet 仕様での文字エンコーディングが設定されていない場合に 適用されます。Servlet 仕様での文字エンコーディングの設定方法については,「2.6.5 デフォルトの文字 エンコーディングの実装(Servlet 仕様の場合)」を参照してください。
また,リクエストのデコードおよびレスポンスのエンコードで使用する文字エンコーディングについては,
さらに次に示す適用条件があります。
(a) リクエストでの適用条件
リクエストのデコードで使用する文字エンコーディングの場合,次に示す適用条件があります。
• クライアントから送信されたリクエストの HTTP リクエストヘッダに,charset パラメタを含む,
Content-Type ヘッダが含まれていない。
さらに,リクエストボディおよびクエリには,次に示す適用条件があります。
● リクエストボディ サーブレットの場合
リクエストの POST データを,次のどちらかの方法で読み込んでいる場合に適用されます。
• javax.servlet.ServletRequest の getReader メソッドを使用して取得した BufferedReader で読 み込む。
• リクエストのパラメタとして読み込む。
リクエストのパラメタとして読み込む場合,javax.servlet.ServletRequest の getParameter メソッド,
getParameterMap メソッド,getParameterName メソッド,getParameterValues メソッドを使用 します。
JSP ファイルの場合
リクエストの POST データを,次のどちらかの方法で読み込んでいる場合に適用されます。
• 暗黙オブジェクト request の getReader メソッドを使用して取得した BufferedReader で読み込 む。
• リクエストのパラメタとして読み込む。
リクエストのパラメタとして読み込む場合,暗黙オブジェクト request の getParameter メソッド,
getParameterMap メソッド,getParameterName メソッド,getParameterValues メソッドを使用,
または Expression Language で暗黙オブジェクト param,paramValues を使用します。
● クエリ
サーブレットの場合
javax.servlet.ServletRequest の getParameter メソッド,getParameterMap メソッド,
getParameterName メソッド,getParameterValues メソッドを使用する方法で,クエリをリクエス トのパラメタとして読み込んでいる場合に,適用されます。
JSP ファイルの場合
次のどちらかの方法で,クエリをリクエストのパラメタとして読み込んでいる場合に適用されます。
• 暗黙オブジェクト request の getParameter メソッド,getParameterMap メソッド,
getParameterName メソッド,getParameterValues メソッドを使用して読み込む。
• Expression Language で暗黙オブジェクト param,paramValues を使用して読み込む。
(b) レスポンスでの適用条件
レスポンスのエンコードで使用する文字エンコーディングの適用条件を,レスポンスボディとレスポンスの Content-Type ヘッダの文字エンコーディング名に分けて説明します。
● レスポンスボディ サーブレットの場合
javax.servlet.ServletResponse の getWriter メソッドで取得した PrintWriter でレスポンスデータを 作成している場合に適用されます。
JSP ファイルの場合
暗黙オブジェクト response の getOutputStream()メソッドによって ServletOutputStream オブジェ クトを取得しないで,レスポンスを出力している場合に適用されます。※
注※
ServletOutputStream オブジェクトを取得した場合,JSP 本文のテキストや,暗黙オブジェクト out への出力などの ServletOutputStream オブジェクトを使用しない出力は,すべて実行時にエラーと なります。このため,レスポンスとして出力することはできません。
● レスポンスの Content-Type ヘッダの文字エンコーディング名 サーブレットの場合
レスポンスのコンテンツ形式に「text/」で始まる MIME タイプを設定し,charset は設定していない 場合に適用されます。
JSP ファイルの場合
次のどちらかの場合に適用されます。
• レスポンスのコンテンツ形式を設定していない。
• 「text/」で始まる MIME タイプを設定し,charset は設定していない。
静的コンテンツの場合
次の条件を満たした場合に適用されます。
• 静的コンテンツの拡張子が,デフォルトエンコーディング設定機能の対象として設定された拡張子 である。
• 拡張子が「text/」で始まる MIME タイプに設定されている。
• 静的コンテンツを出力するより前に,サーブレット,JSP,フィルタなどでレスポンスに対して文字 エンコーディングを設定しない。
参考
コンテンツ形式とは,コンテンツの MIME タイプを指します。コンテンツ形式には,文字エンコーディ ングを含めることができます。次に,サーブレットおよび JSP ファイルでのコンテンツ形式の設定例を 示します。
• サーブレットの場合
javax.servlet.ServletResponse の setContentType メソッドを使用します。
設定例:response.setContentType("text/html");
• JSP ファイルの場合
Page ディレクティブの contentType 属性を設定します。
設定例:<%@ page contentType="text/plain" %>
また,デフォルトの文字エンコーディング設定が適用される MIME タイプの例と,適用されない MIME タイプの例を示します。
• 適用される MIME タイプの例:「text/plain」,「text/html」
• 適用されない MIME タイプの例:「image/gif」,「text/html;charset=UTF-8」