- PR -

JSPアンケートフォーム (テキスト書き込み)

1
投稿者投稿内容
seven-star
会議室デビュー日: 2004/11/12
投稿数: 3
投稿日時: 2004-11-12 22:38
ゼミナールでJSPを勉強していましてアンケートシステムを作っています。
文字化けが起こる問題とテキストに追記で書き込まれる設定のやり方がわかりません。
Windows XP Tomcat 4.1 java 1.42_05

HTMLフォームでテキストボックスを作り

conf.jspで空白のテキストボックスがないかを判断し
NGな場合はやり直し OKの場合はこの内容で送信してよいかと確認し

write.jspでテキストに書き込まれるようになっています。

conf.jsp
<%@ page contentType="text/html;charset=EUC-JP"
import="java.io.*" %>
<html>
<head>
<title>テキスト書き込みフォーム</title>
</head>
<body>
<h2>送信内容確認画面</h2>
<%
//フォームの値を取得
String mName = request.getParameter("name");
String mFrom = request.getParameter("from");
String mTitle = request.getParameter("title");
String mNaiyou = request.getParameter("naiyou");

//値をチェック
boolean mErrFlg = false;
if (mName.equals("")) {
out.println("<p>お名前を入力してください。");
mErrFlg = true;
}
if (mFrom.equals("")) {
out.println("<p>メールアドレスを入力してください。");
mErrFlg = true;
}
if (mTitle.equals("")) {
out.println("<p>タイトルを入力してください。");
mErrFlg = true;
}
if (mNaiyou.equals("")) {
out.println("<p>内容を入力してください。");
mErrFlg = true;
}

if (mErrFlg == false) {
%>
<h2>内容を確認して送信ボタンをクリックしてください
<form method="POST" action="write.jsp">
<table border="0">
<tr>
<td width="100">お名前</td>
<td width="300"><%=mName%></td>
</tr>
<tr>
<td width="100">メールアドレス</td>
<td width="300"><%=mFrom%></td>
</tr>
<tr>
<td width="100">メールタイトル</td>
<td width="300"><%=mTitle%></td>
</tr>
<tr>
<td width="100">メッセージ</td>
<td width="300"><%=mNaiyou%></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="送信"></td>
</tr>
</table>
<input type="hidden" name="name" value="<%= mName %>">
<input type="hidden" name="from" value="<%= mFrom %>">
<input type="hidden" name="title" value="<%= mTitle %>">
<input type="hidden" name="naiyou" value="<%= mNaiyou %>">
</form>
<% } %>
</body>
</html>

write.jsp
<%@ page contentType="text/html;charset=EUC-JP" import="java.io.*" %>
<html>
<head>
<title>テキスト書き込みフォーム</title>
</head>
<body>
<h2>書き込み完了</h2>
<%
//フォームの値を取得
String mName = request.getParameter("name");
String mFrom = request.getParameter("from");
String mTitle = request.getParameter("title");
String mNaiyou = request.getParameter("naiyou");


//FileWriterオブジェクトを作成する
FileWriter fw = new FileWriter(request.getRealPath("test.txt"));

//BufferedWriterオブジェクトを作成する
BufferedWriter bw = new BufferedWriter(fw);

//ファイルに文字列を書き込む
bw.write(request.getParameter("name") + "\r\n");
bw.write(request.getParameter("from") + "\r\n");
bw.write(request.getParameter("title") + "\r\n");
bw.write(request.getParameter("naiyou") + "\r\n");


//BufferedWriterオブジェクトを閉じる
bw.close();
%>
</body>
</html>

解決方法を教えて頂きたいです。
またこのようにしたほうがよいなど
アドバイスして頂けると非常にうれしいです。

よろしくお願いします。
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-12 23:59
わたしはServlet/JSP関係はド素人ですので間違いの折はご容赦を。

seven-starさんが書かれたソースはどのエンコードで保存されてますか?
EUC_JP以外でエンコードされていれば、それをcharsetに指定しましょう。

テキスト(ファイル)への追記(データの追加)をする場合には、
public FileWriter(String fileName,boolean append)
コンストラクタを用いると簡単です。
appendのあたいをtrueにすればデータが追加で書きこめます。

引用:

解決方法を教えて頂きたいです。
またこのようにしたほうがよいなど
アドバイスして頂けると非常にうれしいです。



恐らくServlet/JSPでは「文字化け」問題は最も情報量の多い
事項の1つではないかと思います。
Google等で「JSP 文字化け」で検索すれば殆どの解答は得られ
るのではないでしょうか。
seven-star
会議室デビュー日: 2004/11/12
投稿数: 3
投稿日時: 2004-11-13 01:15
引用:

takamaroさんの書き込み (2004-11-12 23:59) より:
わたしはServlet/JSP関係はド素人ですので間違いの折はご容赦を。

seven-starさんが書かれたソースはどのエンコードで保存されてますか?
EUC_JP以外でエンコードされていれば、それをcharsetに指定しましょう。

テキスト(ファイル)への追記(データの追加)をする場合には、
public FileWriter(String fileName,boolean append)
コンストラクタを用いると簡単です。
appendのあたいをtrueにすればデータが追加で書きこめます。

引用:

解決方法を教えて頂きたいです。
またこのようにしたほうがよいなど
アドバイスして頂けると非常にうれしいです。



恐らくServlet/JSPでは「文字化け」問題は最も情報量の多い
事項の1つではないかと思います。
Google等で「JSP 文字化け」で検索すれば殆どの解答は得られ
るのではないでしょうか。



レスありがとうございます。
すべてのJSPにてcharset=EUC-JPで設定しているのですが
文字化けが起こってしまっている状況です。
ちなみにHTMLのほうもEUC設定にしました。
テキストに書き込まれる際に文字化けが発生していると
いまのところ思っているのすが詳しくわかりません。
日本語の場合?などの文字になってしまいます。

追記の件はAPIと色々自分で研究をしてみたいと思います。

アドバイスしていただきありがとうございます。
na2fusi
会議室デビュー日: 2003/06/08
投稿数: 16
投稿日時: 2004-11-13 02:05
以下のページを見てどこからどこへ文字が渡されるときに
文字化けが起こるのか考えてみると分かりやすいかも。
私はだいぶこのページのお世話になりました。
http://www.atmarkit.co.jp/fjava/rensai2/webopt08/webopt08.html
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-13 02:12
引用:

テキストに書き込まれる際に文字化けが発生していると
いまのところ思っているのすが詳しくわかりません。


ってことは、文字化けってクライアント側のブラウザ上での文字化けではなく、
ファイルに書きこんだ時の文字化けってことなんですね。
で、seven-starさんのソースを見る限り、FileWriterを使ってますから
ファイルへの書き出しにはOSのデフォルトの文字コードが使われる事になります。
自分が望む文字コードを指定してファイルに書きこむにはOutputStreamWriter
クラスを使って見て下さい。

File file = new File(request.getRealPath("test.txt"));
FileOutputStream fos = new FileOutputStream(file,true);
OutputStreamWriter osw = new OutputStreamWriter(fos,"EUC_JP");
BufferedWriter bw = new BufferedWriter( osw );

こんなところでしょうか、、、確認してないけどw
それでも尚文字化けがあるようならば、request.getParameter()での文字列取得時
のエンコードが上手くいっていない可能性が在るので、その部分の処理を加えてあげ
れば上手くいくのでは無いかと思います(たぶん、、、)
恐らく、request.setCharacterEncoding() を使う事で解決するのではないかと。
影フリー
常連さん
会議室デビュー日: 2004/11/12
投稿数: 39
お住まい・勤務地: 東京都
投稿日時: 2004-11-13 03:24
私もtakamaroさんのとおりだと思います。
jspファイルの一番最初の所にrequest.setCharacterEncoding("euc_jp") をセットすれば
OKです
seven-star
会議室デビュー日: 2004/11/12
投稿数: 3
投稿日時: 2004-11-14 00:38
引用:

影フリーさんの書き込み (2004-11-13 03:24) より:
私もtakamaroさんのとおりだと思います。
jspファイルの一番最初の所にrequest.setCharacterEncoding("euc_jp") をセットすれば
OKです



追記でテキストに書くことができました。

文字化けはやり方が悪いのかTOMCATの設定が悪いのか
まだ改善できませんがひとまず前進したのでとても
うれしいです。

夜遅くにレスしていただき有難う御座いました。
1

スキルアップ/キャリアアップ(JOB@IT)