- PR -

サーブレットについて

投稿者投稿内容
ひさじろう
会議室デビュー日: 2003/01/28
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2003-01-28 13:38
サーブレットの勉強中のひさじろうと申します。
今、HTMLファイルにアクセスさせ、テキストボックスに入力し、ボタンを押すと、
入力した項目の内容を表示させるページを作成。。。というものを作っているのですが、
どうもうまく動かないのです。
サーブレットにアクセスしてその処理中のままでとまっているようなのですが。。。(永久ループかもです)
ソースは以下のとおりです。
mail_k.java

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class mail_k extends HttpServlet {
int i;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
out.println("<html>");
out.println("<head><title>mail form</title></head>");
out.println("<body bgcolor=\"#FFE4E1\" text=\"#696969\" link=\"#696969\" alink=\"696969\" vlink=\"#696969\">");
out.println("<center>");
out.println("<h1>メール送信フォームver_1.0.1α</h1>");
out.println("<h2>内容確認</h2>");
out.println("<br><br>");
out.println("E-MAIL:");
out.println(request.getParameter("mail"));
out.println("<br>");
out.println("名前:");
out.println(request.getParameter("name"));
out.println("<br>");
out.println("メッセージ:");
out.println(strMess(request.getParameter("mass")));
out.println("</center>");
out.println("</body>");
out.println("</html>");
}
private String strMess(String strMass){
StringBuffer strResult=new StringBuffer();
for(i=0;i<strMass.length();i++){
switch(strMass.charAt(i)){
case '&' :
strResult.append("&amp;");
break;
case '<' :
strResult.append("&lt;");
break;
case '>' :
strResult.append("&gt;");
break;
default :
strResult.append(strMass.charAt(i));
break;
}
}
return strResult.toString();
}
}


mail_k.html

<html>
<head>
<title>mail form</title>
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
</head>
<body body bgcolor="#FFE4E1" text="#696969" link="#696969" alink="#696969" vlink="#696969">
<center>
<h1>メール送信フォームver_1.0.1α</h1>
<from method="POST" action="./wada/servlet/mail_k">
<br>
<br>
<br>
E-MAIL:
<input type="text" name="mail" size="40">
<br>
名前:
<input type="text" name="name" size="20">
<br>
メッセージ:
<input type="text" name="mass" size="50">
<br>
<input type="submit" value="確認">
</form>
</center>
</body>
</html>

どこか不審な点、おかしな点がありましたら教えていただけないでしょうか?
よろしくお願いいたします。
_________________
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-01-28 14:35
こんにちわ。

返答が返ってきていないのではなく
真っ白いページが表示されてるのではないですか?

見たところ、PrintWriterをclose()していない
ようですが、どうでしょうか?
ひさじろう
会議室デビュー日: 2003/01/28
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2003-01-28 14:45
返信ありがとうございます。


>返答が返ってきていないのではなく
>真っ白いページが表示されてるのではないですか?

submitボタンを押したあとの反応はボタンを押す直前と同じままです。

>見たところ、PrintWriterをclose()していない
>ようですが、どうでしょうか?

本を見て作っているのですが、私が使用している本にはそのような説明及びサンプルソース内の記述が見当たりません。
close()というのは具体的にどのように記述し、使用するものなのでしょうか?
又、サンプルがCDに入っていたので、一応コンパイルをし実行してみたところ問題なく動きました。
そのサンプルにテキストボックスの項目を増やしただけなのですが、それでなぜうまくいかないかが理解できないでいます。
PrintWriterをclose()するということは必ず必要なことなのでしょうか?
わからないことばかりで申し訳ありませんが、簡単にでもいいので教えてください。
お願い致します。
_________________
tabby
ベテラン
会議室デビュー日: 2002/06/26
投稿数: 55
お住まい・勤務地: 埼玉県・東京都
投稿日時: 2003-01-28 14:54
ペーストされたソースが原本のままとすればタイプミスが原因かと

from->form

<from method="POST" action="./wada/servlet/mail_k">
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-01-28 14:56
unibon です。こんにちわ。

引用:

ひさじろうさんの書き込み (2003-01-28 14:45) より:

PrintWriterをclose()するということは必ず必要なことなのでしょうか?


#以下 close についてのみ書きます。

他の掲示板で教えてもらったのですが、
Servlet において getWriter して得た PrintWriter は close しないほうが良いです。
というか close してはダメです。
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs10190.html
ひさじろう
会議室デビュー日: 2003/01/28
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2003-01-28 15:01
書き込みありがとうございます

tabbyさんのおっしゃる通り記述ミスでした><

unibonさんなんとなくですが理解できた気がします(油断大敵ですが^^;;)

今度はエラー404が出てしまいました^^;;
一難去ってまた一難とはこのことですね
オープン系は初めてで右も左もわからない状態です><
書き込みに感謝し、まともに動くよう精進していきます><
_________________
ひさじろう
会議室デビュー日: 2003/01/28
投稿数: 5
お住まい・勤務地: 横浜
投稿日時: 2003-01-28 15:09
皆様の暖かいご指導のおかげで、無事起動できました。
また何かありましたら(きっとあると思いますm(__)m)懲りずに教えてください。
今回は本当にありがとうございました。
_________________
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2003-01-28 15:20
引用:

unibonさんの書き込み (2003-01-28 14:56) より:
他の掲示板で教えてもらったのですが、
Servlet において getWriter して得た PrintWriter は close しないほうが良いです。
というか close してはダメです。
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs10190.html




こんにちわ。

リンク先を見させて頂きました。
そのような事象が発生するとは考えたこともありませんでした。
今まではI/O関連を取得したら必ずclose()は必須だと思っていました。
確かにコンテナ管理ということからすると、勝手にclose()すると
まずいという気がしますが、そもそもコンテナ管理ということから
して意識しておりませんでした。

>ひさじろう様
誤った助言をしてしまってすいません。

#ただ、DBのコネクションプーリングなんかでも
#DataSourceからgetConnection()してきてきちんとclose()
#しますよね。Conectionを手放すという感覚で。
#ConnectionとPrintWriterでは話が違いますが。
#まぁマニュアル、APIリファレンスをよく読めってことですね・・。

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