アプリケーションで日本語などのマルチバイト文字を正確に扱うために、文字コードに関する設定をWebコンテナが提供する機能を利用して行うことができます。
設定方法や文字コードに関する注意事項は、以下を参照してください。
リクエストURIの解析に使用するエンコーディング(uri-encoding)
「3.2.1 Interstage deployment descriptor」
parameter-encoding
fileEncoding
文字コードについて
Webコンテナが提供する設定は、以下のように使い分けてください。
例:「/sample/テスト」をUTF-8でエンコードしてGETリクエストを送信する場合、リクエストURIの解析に使用するエンコーディング(uri-encoding)にUTF-8を設定します。
GET /sample/%E3%81%A6%E3%81%99%E3%81%A8 HTTP/1.1 Host: samplehost
なお、uri-encodingのデフォルト値はUTF-8です。そのため、WebブラウザがリクエストURIをUTF-8でエンコードして送信する場合は、uri-encodingは設定不要です。
WebブラウザがリクエストURIをUTF-8以外でエンコードして送信する場合、uri-encodingを設定してください。
例:GETリクエストのクエリがUTF-8でエンコードされて送信される場合、parameter-encodingにUTF-8を設定します。
GET /sample/test?query=%e3%82%af%e3%82%a8%e3%83%aa HTTP/1.1 Host: samplehost
例:POSTリクエストのBODYがUTF-8でエンコードされて送信される場合、parameter-encodingにUTF-8を設定します。
POST /sample/test HTTP/1.1 Host: samplehost Content-Type: application/x-www-form-urlencoded Content-Length: 34 body=%e3%82%af%e3%82%a8%e3%83%aa
なお、クエリやBODYを読む前にjavax.servlet.ServletRequest#setCharacterEncoding(java.lang.String)を実行すると、setCharacterEncodingに指定した値が有効になります。
また、Content-Typeヘッダにcharset属性が指定されている場合、charset属性の値が有効になります。
POST /sample/test HTTP/1.1 Host: samplehost Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Content-Length: 34 body=%e3%82%af%e3%82%a8%e3%83%aa
このように、アプリケーションで文字コードの設定をしている場合は、parameter-encodingの設定は不要です。
fileEncodingは、サーブレットやJSPから静的リソース(htmlやtxtファイルなど)にディスパッチした場合に、静的リソースを表示するために使用されます。
例:JSPファイルでtxtファイルをincludeする場合、txtファイルのエンコードをfileEncodingで指定します。
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="java.net.URLClassLoader, java.net.URL" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <jsp:include page="sample.txt" flush="true" />
</body> </html>