4

.send()の部分に文字列を含む POST リクエストを送信しています"id=jeff&command=test"

HttpServletRequestオブジェクトを介してJavaでこれらの値を解析して使用するにはどうすればよいですか?

コンテンツ タイプをtext/htmlとに変更してみましたapplication/x-www-form-urlencoded。私のJavaサーバーは桟橋に埋め込まれています。

var text = form.command.value;
var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function()
    {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
          {
            xmlhttp.responseText
          }
        }

    xmlhttp.open("POST", 'go', true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("id=jeff&command=" + text);

ここに私のJavaコードがあります

public class GoHandler extends HttpServlet 
{
Commands c = Commands.getInstance();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException
{
    BufferedReader reader = request.getReader();
    String str = "";
    while ((str = reader.readLine()) != null)
    {
        System.out.println(str);
    }

    String p = request.getParameter("id");
    String input = request.getParameter("command"); 
    System.out.print(p);

ブラウザからリクエストを行ったときの出力は次のとおりです

id=jeff&command=test (これはバッファリングされたリーダーからのものです)

null (これは、id である必要がある私の文字列 p からのものです)

ここにChromeのツールキットがあります..

Request URL:http://localhost:8080/go
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:20
Content-Type:application/xml
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko)     Chrome/22.0.1229.79 Safari/537.4
Request Payload
id=jeff&command=test
Response Headersview source
Content-Length:66
Content-Type:application/json;charset=utf-8
Server:Jetty(8.1.7.v20120910)

サーバーからの私の応答

{"flavor":"You are in the goHandler"}
4

2 に答える 2

2

「それはうまくいきます。しかし、これらの値を取得する組み込みの方法はありませんか?」

入力ストリームを読み取って入力ストリームの最後に到達すると、ネイティブメソッドgetParameter()が入力ストリームをリセットしないため、パラメーターを取得するために入力ストリームを読み取らないでください。そのため、null が返されます。getParameter()直接使用して値を取得します。

どちらInputStreamかを使用するか、getParameter()両方を使用しないか

@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException
{`    `

String p=request.getParameter("id");
String input=request.getParameter("command");
System.out.println(p);
于 2015-02-08T15:01:38.160 に答える
1

バッファリーダーとして取得できます。これにより、完全な文字列が得られます。手動で解析できます。セパレータが「\n」の場合、

BufferedReader reader = request.getReader();
while ((str = reader.readLine()) != null)
  jb.append(str);

編集:

これらの http ヘッダーの 1 つまたは両方を試すことができますか?! これが更新されたコードです。

var text = form.command.value;
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
        alert(xmlhttp.responseText);
      }
    }
var params = "id=jeff&command=" + encodeURIComponent(text);
xmlhttp.open("POST", "go", true);
xmlhttp.send(params);

encodeURIComponent() を使用して、URI を有効な ASCII に変換します。

デフォルトの content-type は「application/x-www-form-urlencoded」であるため、JavasScript を更新して削除しました。ここで、サーブレット内のすべてのパラメーターにアクセスしてみてください。

于 2012-10-08T18:30:10.913 に答える