※ ChatGPTを利用し、要約された質問です(原文:JSPからパラメータを取得してサーブレットに遷移する際文字化けしてしまいます。)
JSPからパラメータを取得してサーブレットに遷移する際文字化けする問題
このQ&Aのポイント
JSPからパラメータを取得してサーブレットに遷移する際に文字化けする問題があります。
突然文字化けが発生し、参考書に書かれている内容を試しても解決しない状況です。
エンコード・デコードのミスが原因と思われますが、具体的な解決策がわかりません。どなたかご指導お願いいたします。
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"←ボディのエンコードを使う指定を追加しました
/>
よろしくお願いいたします。
お礼
ありがとうございます! いただいたアドバイスをもとに、 試行錯誤を繰り返した結果、文字化け解消しました! おっしゃっていた、 useBodyEncodingForURI="true" を消して、コンテントタイプの指定とエンコーディングのおいてあった場所をちょこっと変えただけで出来ました!! ご指導ありがとうございました。
補足
お返事ありがとうございます! >> useBodyEncodingForURI="true" >を指定しない場合には、EchoServlet2クラスにて受け取れるパラメー>タはWindows-31J >となっています。 >ですから、 >> request.setCharacterEncoding("Windows-31J"); >を使って、正しくエンコーディング出来ました。 ということは、useBodyEncodingForURI="true" の一文を削除すれば、環境の違いこそあれ、表示されるかもしれないということでしょうか? 最初それが記述していない状態でできなくて、その後で記述したのですが、ひょっとしてやらないほうが良かったんでしょうか?