オールインワン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"←ボディのエンコードを使う指定を追加しました
/>
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
拙者宅の環境でテストすると、
●ケース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
この回答への補足
お返事ありがとうございます!
>> useBodyEncodingForURI="true"
>を指定しない場合には、EchoServlet2クラスにて受け取れるパラメー>タはWindows-31J
>となっています。
>ですから、
>> request.setCharacterEncoding("Windows-31J");
>を使って、正しくエンコーディング出来ました。
ということは、useBodyEncodingForURI="true"
の一文を削除すれば、環境の違いこそあれ、表示されるかもしれないということでしょうか?
最初それが記述していない状態でできなくて、その後で記述したのですが、ひょっとしてやらないほうが良かったんでしょうか?
ありがとうございます!
いただいたアドバイスをもとに、
試行錯誤を繰り返した結果、文字化け解消しました!
おっしゃっていた、 useBodyEncodingForURI="true"
を消して、コンテントタイプの指定とエンコーディングのおいてあった場所をちょこっと変えただけで出来ました!!
ご指導ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
csv出力について
-
yyyymmddからyyyy/mm/d...
-
javaのfor文が機能してないみた...
-
JavaでString型をChar型に変換...
-
InputStream.read()でタイムア...
-
javaのファイル読み込み時の文...
-
九九を横に表示する。
-
Javaの質問です。テキストファ...
-
テキストファイルから空白行をよむ
-
equalsの逆
-
テキストファイルの読み書き
-
[JAVA]エラーが解決できません。
-
Javaの質問です。テキストファ...
-
Java int sum = 0は必要ですか?
-
java シンボルが見つかりません
-
テキストファイルの任意の文字...
-
Class.forNameでエラーになる
-
System.out.printlnの意味がよ...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
csv出力について
-
equalsの逆
-
InputStream.read()でタイムア...
-
java連結
-
Javaでデータに登録する度にID...
-
ソケットを使ったサーバとクラ...
-
テキストファイルから空白行をよむ
-
JAVAでエラーがでる。
-
[JAVA]エラーが解決できません。
-
Java int sum = 0は必要ですか?
-
javaのfor文が機能してないみた...
-
Class.forNameでエラーになる
-
九九を横に表示する。
-
Inputstreamについて
-
Javaの質問です。テキストファ...
-
テキストファイルにおいて任意...
-
BufferedReaderでのエラー
-
Java FileDialog に関して
-
以下のJAVAプログラムでご質問...
おすすめ情報