1

Tomcatサーバー上で実行されるEclipseで単純なサーブレットを作成しました。

message=20文字列をサーブレットに渡す単純なJavaアプリケーションを実行しています。サーブレットはデータを取得します。使ってます

String name= request.getParameter("message");

渡された文字列を取得します。名前の値をアプリケーションに戻すと、元に戻すことができます。しかし、文字列名を処理しようとすると、次のようになります。

int val=Integer.parseInt(name);

取得しNumberFormatExceptionます。何が問題なのかわかりません。サーブレットからname変数の値を取り戻すことができましたが、なぜそれを使用できないのですか?

私が使用しているコードは次のとおりです。

クライアントサイドコード

URL url = new URL("http://localhost:8080/DemoServer/demoservelet");

URLConnection conn = url.openConnection();

conn.setDoOutput(true);

BufferedWriter out = new BufferedWriter( new OutputStreamWriter( conn.getOutputStream() ) );

out.write("message=20");

サーブレットコード

String username = request.getParameter("message").toString();

int val=Integer.parseInt(username);  //get error msg on this line

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("Passed val :"+ username+username.length());


}

変換中にエラーが発生します。返品時にもう1つ、長さの値が4になりますが、これも意味がありませんか?

これに関して私を助けてください。

4

4 に答える 4

1

GETスタイルのパラメーター受け渡しまたはPUSHスタイルのパラメーター受け渡しを使用しようとしていますか?

GETスタイルの受け渡しは、次のようにURLの末尾のパラメーターをタックします。

http://localhost:8080/DemoServer/demoservelet?value=20

このようなURLはかなり簡単に組み立てることができます。URL作成行を変更するだけで、BufferedWriterのオープンに関連する2行を削除できます。

URL url = new URL(String.format("http://localhost:8080/DemoServer/demoservelet?value=%d", 20));

POSTスタイルの受け渡しは、HTTPプロトコルに準拠する必要があります。これは、これまで使用していたものとかなり似ていますが、すべてのパラメーターの末尾に改行文字が必要であるという事実を除けば。あなたの例を使用して:

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));

out.writeln("message=20");

PrintStreamを使用することもできます。これにより、パラメーターを変更する必要がある場合に、パラメーターのフォーマットが少し簡単になります。

PrintStream out = new PrintStream(conn.getOutputStream());

out.printf("message=%d\n", 20);

GETスタイルとPUSHスタイルのどちらを使用するかはあなた次第ですが、渡すデータのタイプによって異なります。

于 2012-05-10T22:47:11.817 に答える
0

名前が有効な番号であるかどうかを確認する必要があります。name.match( "^-?\ d + $"); 数値の場合はtrueを返します

于 2012-05-10T21:43:16.550 に答える
0

パラメータを1つとして検出するには、パラメータをパラメータとして記述する必要があると思います。

out.write("<param name=\"message\" value=\"20\">");
于 2012-05-10T23:43:02.233 に答える
0

チェック値のデバッグ時に、出力名の値があり、名前が数値であると判断します。

于 2012-05-11T05:23:33.443 に答える