Getパラメータの日本語が文字化け | jectoのブログ

jectoのブログ

コンピュータ関連の
記事を載せています。
@ 日常生活とかも

環境
OS: Windows XP Service Pack 3
Eclipse 3.4.2 WTP
Tomcat v6.0


httpリクエストのGetメソッドでパラメータが日本語の場合文字化けが起こったので
その解決方法を記録しておきます

Tomcat5.xより、FORMのGETメソッドでパラメータを送信した場合、
setCharacterEncodingメソッドを無視するようになりました。POSTメソッドの場合は有効です。


setCharacterEncodingメソッド有効にするためには、Tomcatの設定ファイルserver.xml
の下記の部分を編集する

変更前

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />


変更後

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" />

赤字の部分を追加する

HttpServletRequestインタフェースのsetCharacterEncodingメソッドを使って文字コードを指定すれば
文字化けが解消する



サーブレットのソース
Sample2.java

package lesson6;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class Sample2
*/
public class Sample2 extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public Sample2() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub

try{

// フォームデータの取得
request.setCharacterEncoding("UTF-8");
String carname = request.getParameter("cars");


// コンテンツタイプの設定
response.setContentType("text/html; charset=UTF-8");

// HTML文書の書出し
PrintWriter pw = response.getWriter();
pw.println(
"<html>\n"
+ "<head>\n"
+ "<title>" + carname + "</title>\n"
// + "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n"
+ "</head>\n"
+ "<body><center>\n"
+ "<h2>" + carname + "</h2>\n"
+ carname + "のお買い上げありがとうございました。<br/>\n"
+ "</center></body>\n"
+ "</html>\n"
);

}catch(Exception e){
e.printStackTrace();
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

}