クライアントのブラウザがサポートする言語のリストを取得することは、サーブレットや JSP をローカライズするときの重要な手順です。クライアントは、各リクエストで HTTP Accept-Language
ヘッダーを送信します。ターゲットのサーブレットや JSP は、リクエスト内のヘッダーの値を読み込み、これを使用して、コンテンツタイプを設定し、カスタムレスポンスを生成できます。
サーブレット API には、クライアントのロケールを取得するための次の便利なメソッドがあります。
HttpServletRequest オブジェクトには、次のメソッドがあります。
getLocale
getLocales
getLocale
メソッドは Locale オブジェクトを返します。このロケールは、クライアントのブラウザの設定で定義されます。この方法は、Accept-Language
HTTP ヘッダーの値を取得するには便利です。getLocales
メソッドは、重要度の降順でロケールのリストを返します。
HttpServletResponse オブジェクトには、レスポンスに割り当てられた local オブジェクトを返す getLocale
メソッドもあります。
次の例は、getLocale
を呼び出してリクエストのロケールを取得し、ダイナミックに文字セットを設定し、レスポンスのコンテンツを条件付きで返します。
...
<% String charset = ""; Locale locale = request.getLocale(); if(locale.getLanguage().equals("ko")) { charset = "EUR_KR"; } else { charset = "ISO-8859-1"; } response.setContentType("text/html; charset=" + charset); response.setLocale(locale); out.println("<p>charset :" + charset + "</p>"); %> <%@ page import="java.util.*" %> <% if(locale.getLanguage().equals("ko")) { %> // 韓国語のリクエストに特有のレスポンス <% } else { %> // その他のすべてのレスポンス <% } %> ...
JSP では、page
ディレクティブはスタティックメソッドです。つまり、これを使用して文字セットをダイナミックに変更することはできません。その結果、前の例では、スクリプトレットで response.setContentType
メソッドを使用して、文字セットを識別しています。
サーブレットや JSP での文字セットの使用については、 「文字セットとエンコードの理解」 を参照してください。