• 締切済み

POSTを使って送信

PICNICServlet3にアクセスすると,名前とIPアドレスとポートのフォームが表示されて,入力してOKボタンをクリックするとPICNICへ送信されるというプログラムを作成しています. 一応作成してみたのですが,http://アドレス/POST.htmlとアドレスバーに打ち込み,フォームに入力してもエラーが出ます. 作成したプログラムです↓ (省略してあります.[;]など足りないときは移動ミスです) public void doGet(...){  DataString=...;  String command=getParameterValue(request,"command");  putFileContents(filename,"request : "+request,true);  putFileContents(filename,"command : "+command,true);  try{   DatagramSocket datagram=new DatagramSocket(); //入力フォームからの名前を受け取り   String s = request.getParameter("NAME");   byte[] a=s.getBytes(); 名前を入れる //入力フォームからIPアドレスを受け取り   InetAddress add=InetAddress.getByName(request.getParameter("IPADDR")); //入力フォームからポートを受け取り   int port=Integer.parseInt(request.getParameter("PORT"));   pot,add,name送信 datagram.send(dpacket); datagram.close(); }エラー表示  携帯で見るための記述,送信したときの表示 }  private String getParameterValue(HttpServletRequest request,String key){   String[] para=request.getParameterValues(key);   if(para!=null&&para.length>=0)    return para[0];    return"";   } エラー表示など省略 } }

みんなの回答

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.1

doGetに書いてあるようですが、フォームのメソッドはGETにしてあるのでしょうか?HTMLに <form method="POST" action="~~ と書いてあるのであれば、サーブレット側はdoPostが呼び出されます。 私はDatagramSocketを使ったことがないので、そちらは詳しい方のアドバイスを待ちましょう…。エラーメッセージや出てくる例外の種類、スタックトレースなどを書いてもらえると、ほかの方も回答しやすいでしょう。

e301
質問者

お礼

回答ありがとうございました。 <form method="POST"となっていましたので変えてみましたが、まだ成功しませんでした。 /アドレス/POST.htmlで実行したとき、エラーは type Status report message /アドレス/PICNICServlet3 description The requested resource(アドレス/PICNICServlet3) is not available. というものです。アドレスバーには送信後、http://略/PICNICServlet3?UNAME=Kei&IPADDR=略&PORT=10となっていました。 /アドレス/PICNICServlet3で実行したときは <携帯で見るための記述,送信したときの表示>の部分に「OK! /PICNICServlet3 」と表示するようにしたので、それがブラウザに表示されていました。

e301
質問者

補足

ちょっと勘違いしており、不明な点がまた出てきましたので、質問を改めさせていただきたいと思います。 1)http://アドレス/PICNICServlet3.javaと打ち、htmlのフォームを表示させたいのですが、それがわかりません。 2)また、htmlファイルから参照したいときは(htmlファイルは2つ上にある) request.getParameter("IPADDR")); このような表記でいいのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaの課題プログラムでどうしてもわかりません。

    以下(senderTest)のプログラムを適切に繰り返すように書き換えたいのですが、どうしてもうまくいきません。while文で自分なりに繰り返した結果は同じ文字を送り続けるというものになってしまいました。 本来は送信して、待機状態になりまた新たに文字を入力したら送信、また待機というようにしたいのですがどうしたらよいでしょうか? どうかよろしくおねがいします。 ******************************** senderTest import java.io.*; import java.net.*; public class senderTest { private InetAddress address; private int port = 13400; private DatagramSocket socket; public senderTest() throws Exception { this.address = InetAddress.getByName("192.168.0.16"); this.socket = new DatagramSocket(); } public void send(String s) throws Exception { byte buffer[]; buffer = s.getBytes("Shift_JIS"); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, this.address, this.port); this.socket.send(packet); } public static void main(String[] args)throws IOException { senderTest sender1; System.out.println("↓送信する文字を入力してください↓"); String name = ("健児>"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String msg = name +br.readLine(); try { sender1 = new senderTest(); sender1.send(msg); System.out.println("『" + msg + "』を送信しました。"); } catch (Exception ex) { System.err.println("Error: " + ex.getMessage()); } } } ********************************

    • ベストアンサー
    • Java
  • java質問

    @Override protected String execute(HttpServletRequest request, HttpServletResponse response) { String itemName = request.getParameter("iName"); String jancode = request.getParameter("code"); if (!isValidInput(Name, code)) { return "/Order"; } /** * 入力値のチェックを行う */ private boolean isValidInput(String Name, String code,) { /** 未入力チェック処理(省略)*/ return false; } } これをtrueの場合は request.setAttribute("itemName",Name); request.setAttribute("janCode",code); try { Part image = request.getPart("image"); Long fileName = System.currentTimeMillis(); image.write(fileName.toString()); request.setAttribute("fileName", fileName); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "/WEB-INF/view/orderstragedata.jsp"; } といった処理をしたいのですがtrueはどのように作成すればよいのでしょうか?

  • 文字コード

    少し、聞かせてください。 今、WEBアプリケーションを作っています。 HTMLからのリクエスト文字を受け取りServletで処理を考えています。 そこで、 String para = request.getParameter(para); String param = new String(para.getBytes("8859_1","JISAutoDetect"); で、8859_1,Shift_JIS,EUC-JP,ISO-2022-JP の Unicode 変換することが できるのは、分かりました。 では、この HTML からのリクエスト文字が、どのタイプの文字コード でかかれているかを検出できるのでしょうか? 自分では、バイト列をつかさどる方法が浮かぶのですが・・・。 HPでもかまいませんので、教えてください。

    • ベストアンサー
    • Java
  • 空欄のテキストフィールドの判定の方法

    HTMLのフォームに入力されたテキストフィールドの値より処理を変化させる ロジックを作ろうと下記のようにプログラムしました。 テキストフィールドに何か入力して送信した場合は、elseの処理を正常に行ってくれるのですが、 未入力でsubmitした場合だと、処理が止まってブラウザ上には真っ白な画面しか表示されません。 やはり判定文が悪いのでしょうか? 未入力のテキストフィールドの判定方法を教えてください。 ----------------------------------------------------- String tf1 = request.getParameter("text1"); String tf2 = request.getParameter("text2"); if((tf1 == null) || (tf2 == null)) {  HttpSession session = request.getSession();  session.setAttribute("errmessage", "未入力の項目があります。");  RequestDispatcher dispatcher     = request.getRequestDispatcher("/err.jsp");  dispatcher.forward(request, response); } else {  //テキストフィールドに何かが入力されている場合の処理 }

    • ベストアンサー
    • Java
  • サーブレットとJSPの連携

    今、サーブレットとJSPについて勉強しまいます。 HTMLからサーブレットでリクエストを受け付け、 JSPに転送し表示させたいのですが、フォームからの入力の場合は String carname = request.getParameter("cars"); で入力データを取得するコードを書きますよね? (本ではこう書いてました・・・。) では、HTMLの入力フォームからではなくリンクからの 受付けの場合はどう書けばいいのですか? 勉強を始めたばかりで初心者なので、説明不足の点もあるかも 知れませんが分かりやすくご指導宜しくお願いします…。

  • getParameter()について

    getParameter()を使ってフォームからの送信をservletに渡し処理するプログラムを作っているのですが、うまくいきません、誰か教えていただけないでしょうか 問題となる部分は String name = getParameter("name"); if(name != null){ 処理1 }else{処理2} フォームからの入力が無い場合処理2をしたいのですが、うまくいかないのです。(入力ななくても処理1をしちゃうんです) どこが間違っているのでしょうか?教えてください。

  • JSP・サーブレット・HTMLについて・・・

    今、サーブレットとJSPについて勉強しています。 HTMLからサーブレットでリクエストを受け付け、 JSPに転送し表示させたいのですが、フォームからの入力の場合は String carname = request.getParameter("cars"); で入力データを取得するコードを書きますよね? (本ではこう書いてました・・・。) では、HTMLの入力フォームからではなくHTMLのリンク部分を クリックされた時の受付けの場合はどう書けばいいのですか? 勉強を始めたばかりで初心者なので、説明不足の点もあるかも 知れませんが分かりやすくご指導宜しくお願いします…。

    • ベストアンサー
    • Java
  • request.getparameterで取得した値を次のファイルでも使う方法は?

    a.jspのフォームに入力された値を b.jspで表示するためにrequest.getparameterで取得します。 その後、c.jspでもさき程のrequest.getparameterで取得した値を 使用したいと思っているのですが 何か方法はありませんか? わかる方、よろしくお願い致します。

    • ベストアンサー
    • Java
  • getParameter と getAttributeの違いについて

    Servletで、Form内の任意の項目を取得する場合には、 「getParameter」 と 「getAttribute」があります。 この二つの違いとしては getParameter 戻り値:String なのに対して getAttribute 戻り値:Object という違いがあります。 感覚的には getParameterも、getAttributeも、 Form内の任意の項目の値を取得する場合に getParameter("項目名"); getAttribute("項目名"); という使い方で 「どちらでもHTML(JSP)のフォーム内のデータを取得できる」という感覚がありあます。 ちょっと上手く纏められず、前提が長くなってしまったのですが 【ご質問1】 getParameterとgetAttributeの、 決定的な違いとはなんなのでしょうか? 参考のURLにもあるように 「Parameter は request にユーザが乗せてきたもの。 」であり、 「Attribute は request 生成後に Servlet だか JSP だかがくっつけたもの。」であるという違いが決定的な違いでしょうか? 言い換えれば Parameter は フォーム内のリクエストデータを受け、渡す役割をもつ、担当者であり Attribute は フォーム内のリクエストデータを受け、加工し、渡す役割を持つ担当者である ということでしょうか? 【ご質問2】 getAttributeがあるにも関わらず、 getParameterは何故存在するのでしょうか? getAttributeは戻り値をObject型として戻りますが、String型にキャストしてやれば、それでgetParameterで取得した効果と同じ効果が得られるものだと思われるので getParameterの存在理由が見出せないのですけども、getParameterはgetParameterで何か特別な役割をもっているのでしょうか? 【ご質問3】 フォーム内データを取得する場合、 「getParameter」でなければならないとか「getAttribute」を使用しなければならない、とかそういった決まりはありますでしょうか? [参考URL] http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=403&forum=12

    • ベストアンサー
    • Java
  • javaによるファイル送信のプログラム

    ユニキャスト通信のおけるプログラミングで、1のプログラムを2のプログラムを使ってファイル送信ができるようにしたいのですがうまくいきません。私のjavaの知識が授業についていかなくて図書館でいろいろと本を探したのですが見つかりませんでした。誰か教えていただけませんか? /*1*/ import java.net.*; import java.io.*; public class udpechoServer{ static final int echo_PORT = 7; //エコーポート番号 static final int BUFSIZE = 1024; //バッファサイズ public static void main(String[] args) throws IOException{ int port = echo_PORT; //ポート番号 int cliport; //クライアントポート番号 int len; //データ長 int i; //キーインバッファクリアインデックス DatagramSocket sock = null; //データグラムソケット宣言,初期化 byte[] buf = new byte[BUFSIZE]; byte[] wbuf = new byte[BUFSIZE]; String recvdata; //受信データ try{ sock = new DatagramSocket(port); DatagramPacket recvpacket = new DatagramPacket(buf,BUFSIZE); DatagramPacket sendpacket = new DatagramPacket(buf,BUFSIZE); System.out.println("Connected to echo server"); while(true){ sock.receive(recvpacket); //データ受信 recvdata = new String(recvpacket.getData(),0,recvpacket.getLength()); recvdata = recvdata.trim(); //トリミング(CRLF) wbuf = recvdata.getBytes(); //文字列→バイト配列変換 i = 0; len = wbuf.length; buf = new byte[BUFSIZE]; while(wbuf[i] != 0x0d){ //途中のCR検出 buf[i] = wbuf[i]; //データコピー i++; if(i >=len){ break; } } recvdata = new String(buf,0,i); //バイト配列→文字列変換 System.out.println(recvdata); //画面出力 InetAddress ipadr = recvpacket.getAddress(); cliport = recvpacket.getPort(); buf = recvdata.getBytes(); len = buf.length; sendpacket = new DatagramPacket(buf,len,ipadr,cliport); sock.send(sendpacket); //データ送信 recvpacket.setLength(BUFSIZE); //データグラムパケット長リセット } }catch(SocketException e){ e.printStackTrace(); } } } /*2 */ import java.io.*; class FileCopy { public static void main(String argv[]){ try{ InputStream in = new FileInputStream(argv[0]); //入力ファイルを開く //BufferedInputStreamオブジェクトの生成 BufferedInputStream bin = new BufferedInputStream(in); OutputStream out = new FileOutputStream(argv[1]); //出力ファイルを開く //BufferedOutputStreamオブジェクトの生成 BufferedOutputStream bout = new BufferedOutputStream(out); byte buf[] = new byte[1024]; int c; //読み込みデータがなくなるまで読み込み while((c = bin.read(buf, 0, buf.length)) != -1){ bout.write(buf, 0, c); //データの書き込み処理 } System.out.println("\""+argv[0]+"\" was converted into \""+argv[1]+"\""); bin.close(); //入力ファイルを閉じる bout.close(); //出力ファイルを閉じる }catch(Exception e){} } }

    • ベストアンサー
    • Java