如何使用XMLHttpRequest.send中的信息(字符串)

时间:2012-10-08 18:20:32

标签: java javascript ajax

我正在.send()部分"id=jeff&command=test"发送一个带有字符串的POST请求。

如何通过HttpServletRequest对象在Java中解析和使用这些值?

我尝试将内容类型更改为text/htmlapplication/x-www-form-urlencoded。 我的java服务器是嵌入式jetty btw。

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(这是来自我的String p,应该是id)

这是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"}

2 个答案:

答案 0 :(得分:1)

您可以将其作为缓冲读卡器。这将给出完整的字符串。您可以手动解析它。如果你的分隔符是“\ n”,那么,

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

编辑:

你可以尝试这些http标题中的一个/两个吗?!这是您更新的代码。

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。

更新了JavsScript,因为默认内容类型是“application / x-www-form-urlencoded”,因此将其删除。现在尝试访问servlet中的所有参数。

答案 1 :(得分:1)

"这有效。但是,没有内置的方法来获取这些价值观吗?"

请勿读取输入流以获取参数,因为一旦读取输入流末尾的输入流,本机方法getParameter()就不会重置输入流,这就是它返回null的原因。 直接使用getParameter()获取值。

使用InputStreamgetParameter()不要同时使用

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

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