- - PR -
サーブレットについて
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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("&"); break; case '<' : strResult.append("<"); break; case '>' : strResult.append(">"); 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> どこか不審な点、おかしな点がありましたら教えていただけないでしょうか? よろしくお願いいたします。 _________________ | ||||
|
投稿日時: 2003-01-28 14:35
こんにちわ。
返答が返ってきていないのではなく 真っ白いページが表示されてるのではないですか? 見たところ、PrintWriterをclose()していない ようですが、どうでしょうか? | ||||
|
投稿日時: 2003-01-28 14:45
返信ありがとうございます。
>返答が返ってきていないのではなく >真っ白いページが表示されてるのではないですか? submitボタンを押したあとの反応はボタンを押す直前と同じままです。 >見たところ、PrintWriterをclose()していない >ようですが、どうでしょうか? 本を見て作っているのですが、私が使用している本にはそのような説明及びサンプルソース内の記述が見当たりません。 close()というのは具体的にどのように記述し、使用するものなのでしょうか? 又、サンプルがCDに入っていたので、一応コンパイルをし実行してみたところ問題なく動きました。 そのサンプルにテキストボックスの項目を増やしただけなのですが、それでなぜうまくいかないかが理解できないでいます。 PrintWriterをclose()するということは必ず必要なことなのでしょうか? わからないことばかりで申し訳ありませんが、簡単にでもいいので教えてください。 お願い致します。 _________________ | ||||
|
投稿日時: 2003-01-28 14:54
ペーストされたソースが原本のままとすればタイプミスが原因かと
from->form <from method="POST" action="./wada/servlet/mail_k"> | ||||
|
投稿日時: 2003-01-28 14:56
unibon です。こんにちわ。
#以下 close についてのみ書きます。 他の掲示板で教えてもらったのですが、 Servlet において getWriter して得た PrintWriter は close しないほうが良いです。 というか close してはダメです。 http://www.vc-net.ne.jp/~ytp/bbs/java/bbs10190.html | ||||
|
投稿日時: 2003-01-28 15:01
書き込みありがとうございます
tabbyさんのおっしゃる通り記述ミスでした>< unibonさんなんとなくですが理解できた気がします(油断大敵ですが^^;;) 今度はエラー404が出てしまいました^^;; 一難去ってまた一難とはこのことですね オープン系は初めてで右も左もわからない状態です>< 書き込みに感謝し、まともに動くよう精進していきます>< _________________ | ||||
|
投稿日時: 2003-01-28 15:09
皆様の暖かいご指導のおかげで、無事起動できました。
また何かありましたら(きっとあると思いますm(__)m)懲りずに教えてください。 今回は本当にありがとうございました。 _________________ | ||||
|
投稿日時: 2003-01-28 15:20
こんにちわ。 リンク先を見させて頂きました。 そのような事象が発生するとは考えたこともありませんでした。 今まではI/O関連を取得したら必ずclose()は必須だと思っていました。 確かにコンテナ管理ということからすると、勝手にclose()すると まずいという気がしますが、そもそもコンテナ管理ということから して意識しておりませんでした。 >ひさじろう様 誤った助言をしてしまってすいません。 #ただ、DBのコネクションプーリングなんかでも #DataSourceからgetConnection()してきてきちんとclose() #しますよね。Conectionを手放すという感覚で。 #ConnectionとPrintWriterでは話が違いますが。 #まぁマニュアル、APIリファレンスをよく読めってことですね・・。 | ||||
