アプリケーションで日本語などのマルチバイト文字を正確に扱うために、文字コードに関する設定を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>