Trasis Inc.

渋谷拠点のシステム開発会社

tomcat5でGETメソッドのリクエストパラメータが文字化けする

概要

例えば、次のようなフォームで servlet にリクエストを送信する。

<form method="get" action="/test.servlet">
<input name="query" />
<input type="submit" vallue="送信" />
</form>

そして、Servlet 側で次のように文字列を受け取ると、日本語が文字化けしてしまう。

public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String query = req.getParameter("query");
System.out.println(query);
}

解決方法

Tomcat5 では、デフォルトでGETパラメータのときは setCharacterEncoding 指定を無視する仕様になったらしい。(ご参考: @IT)

ということで、tomcat の conf/ ディレクトリの中にある server.xml で、Connector に「useBodyEncodingForURI="true"」を追加すると改善される。

<Connector acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" enableLookups="false"
maxHttpHeaderSize="8192" maxSpareThreads="75"
maxThreads="150" minSpareThreads="25" port="80"
redirectPort="8443"
useBodyEncodingForURI="true" />

Eclipse WTP での設定方法

Eclipse 3.3.2 の WTP で tomcat を起動している場合は、左側ペインの「パッケージ・エクスプローラ」の中に「Servers」プロジェクトがあるので、その中の server.xml を修正する。