こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JSPからパラメータを取得してサーブレットに遷移する際文字化けしてしまいます。

オールインワンEclipse3.4
tomcat5.5
上記の環境で、サーブレットの参考書に沿ってサンプルを作成していたのですが、パラメータボックスに日本語を入力すると文字化けしてしまい、ブラウザに日本語で表示することができません。
英文字では問題なく表示できるので、エンコード・デコードのどこかで間違っているのだと思うのですが、参考書に書いてあることを試しましても、うまくいきません。
どなたかご指導お願いいたします。
----------
echo.jsp
----------
<%@page contentType="text/html; charset=Windows-31J"       pageEncoding="Windows-31J"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<body>

<h2>EchoServletの入力</h2>

<form action = "/basic2/EchoServlet2">
<input type="text" name="message">
<input type="submit" value="表示" >
</form>
</body>
</html>
---------------------
EchoEchoServlet2.java
---------------------
package input;

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;

public class EchoServlet2 extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{

request.setCharacterEncoding("Windows-31J");
String msg = request.getParameter("message");
System.out.println("msg =" + msg);//確認用

//response.setContentType("text/plain; charset=Windows-31J");

PrintWriter out = response.getWriter();
System.out.println("out = " + out);//確認用
out.println("message=" + msg);
}
}
--------------------------------
tomcatの保存されているserver.xml
--------------------------------
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8000"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
useBodyEncodingForURI="true"←ボディのエンコードを使う指定を追加しました
/>


よろしくお願いいたします。

投稿日時 - 2008-11-06 11:04:57

QNo.4457387

すぐに回答ほしいです

質問者が選んだベストアンサー

拙者宅の環境でテストすると、
●ケース1
> useBodyEncodingForURI="true"
を記述した場合、 EchoServlet2クラスにて受け取れるパラメータが既にUnicodeに
エンコーディング済みになってましたよ。
ですから、Unicodeパラメタに
> request.setCharacterEncoding("Windows-31J");
とすると、当然文字化けしました。(UnicodeはWindows-31Jじゃないですからね)

●ケース2
> useBodyEncodingForURI="true"
を指定しない場合には、EchoServlet2クラスにて受け取れるパラメータはWindows-31J
となっています。
ですから、
> request.setCharacterEncoding("Windows-31J");
を使って、正しくエンコーディング出来ました。

確認環境:
Windows2000Pro
JDK1.6.0_04
Tomcat5.5.12
Firefox2.0,0.17

投稿日時 - 2008-11-06 19:54:36

補足

お返事ありがとうございます!

>> useBodyEncodingForURI="true"
>を指定しない場合には、EchoServlet2クラスにて受け取れるパラメー>タはWindows-31J
>となっています。
>ですから、
>> request.setCharacterEncoding("Windows-31J");
>を使って、正しくエンコーディング出来ました。

ということは、useBodyEncodingForURI="true"
の一文を削除すれば、環境の違いこそあれ、表示されるかもしれないということでしょうか?

最初それが記述していない状態でできなくて、その後で記述したのですが、ひょっとしてやらないほうが良かったんでしょうか?

投稿日時 - 2008-11-11 00:56:38

お礼

ありがとうございます!

いただいたアドバイスをもとに、
試行錯誤を繰り返した結果、文字化け解消しました!

おっしゃっていた、 useBodyEncodingForURI="true"
を消して、コンテントタイプの指定とエンコーディングのおいてあった場所をちょこっと変えただけで出来ました!!

ご指導ありがとうございました。

投稿日時 - 2008-11-12 10:55:06

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問