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」
-