【问题标题】:Reading JQuery data sent from Ajax in Java Servlet在 Java Servlet 中读取从 Ajax 发送的 JQuery 数据
【发布时间】:2012-04-07 00:27:29
【问题描述】:

这是我的 Ajax 代码:

    var myJSONObject = {"bindings": [
                                     {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}]
                             };
    $.ajax({
        url : "ships",
        data : myJSONObject,
        success : function(data){
            GLOBAL.player.startShooting(data);
        },
        error : function(data) {
            console.log("error:", data);
        },
        dataType : "json",
        timeout : 30000,
        type : "post"
    });

这是我的 Java Servlet 代码:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    System.out.println("im in PSOT");
    System.out.println(request.getParameter("myJSONObject"));

    StringBuilder sb = new StringBuilder();
    BufferedReader br = request.getReader();
    String str;
    while( (str = br.readLine()) != null ){
        sb.append(str);
    }   
    System.out.println(sb.toString());
    response.setContentType("application/json");
    response.getWriter().write("{\"key\":\"hello\",\"key2\":\"world\"}");
}

Java servlet 返回我的 Hello World 对象,但我无法读取 Java Servlet 中的数据 控制台打印出以下内容:

im in PSOT
null

最后一行是最后一个 println 的空字符串。

我正在使用 Tomcat 7

谁能告诉我我做错了什么以及为什么我无法在 Java Servlet 中读取数据_

【问题讨论】:

  • 尝试 getParameterbindings 而不是 myJSONObject 这只是一个变量

标签: java javascript jquery ajax servlets


【解决方案1】:

参数名称不是myJSONObject。那是JS变量名。参数名称是您在 JSON 对象中拥有的所有根键。例如

String bindings = request.getParameter("bindings");
// ...

您只需要手动进一步解析它。您可以为此使用Google Gson

至于为什么Reader 没有返回任何内容,那是因为请求正文只能读取和解析一次。任何getParameter() 调用都会隐式执行此操作。因此,当您调用getParameter() 之前 getReader() 时,您将无法通过Reader 读取请求正文(反之亦然!)。但无论如何你都不需要它。只需使用带有正确参数名称的getParameter()

【讨论】:

【解决方案2】:

您只需要手动进一步解析它。您可以为此使用 Google Gson。

为什么 Reader 没有返回任何内容,那是因为请求正文只能被读取和解析一次。任何 getParameter() 调用都会隐式执行此操作。因此,当您在 getReader() 之前调用 getParameter() 时,您将无法通过 Reader 读取请求正文(反之亦然!)。但无论如何你都不需要它。只需使用带有正确参数名称的 getParameter()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 2017-12-30
    • 2013-11-03
    • 2013-10-22
    • 1970-01-01
    • 2023-03-25
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多