当前位置: 首页 > 面试题库 >

获取通过Java Servlet中的jquery ajax发送的参数[重复]

林念
2023-03-14
问题内容

我在网络上搜索了此主题,但找不到有效的示例。我会很高兴有人可以给我帮助。

这是我测试的。

 $.ajax({
    url: 'GetJson',
    type: 'POST',        
    dataType: 'json',
    contentType: 'application/json',

    data: {id: 'idTest'},
    success: function(data) {
        console.log(data);
    }
});

在塞夫莱特

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String id = request.getParameter("id");
    String id2[] = request.getParameterValues("id");        
    String id3 = request.getHeader("id");

}

我在所有事情上都变得空虚。


问题答案:

排序答案是此数据隐藏在请求中InputStream

以下servlet是一个演示如何使用它的示例(我正在JBoss 7.1.1上运行它):

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="fooServlet", urlPatterns="/foo")
public class FooServlet extends HttpServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is = req.getInputStream();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        byte[] buf = new byte[32];
        int r=0;
        while( r >= 0 ) {
            r = is.read(buf);
            if( r >= 0 ) os.write(buf, 0, r);
        }
        String s = new String(os.toByteArray(), "UTF-8");
        String decoded = URLDecoder.decode(s, "UTF-8");
        System.err.println(">>>>>>>>>>>>> DECODED: " + decoded);

        System.err.println("================================");

        Enumeration<String> e = req.getParameterNames();
        while( e.hasMoreElements() ) {
            String ss = (String) e.nextElement();
            System.err.println("    >>>>>>>>> " + ss);
        }

        System.err.println("================================");

        Map<String,String> map = makeQueryMap(s);
        System.err.println(map);
        //////////////////////////////////////////////////////////////////
        //// HERE YOU CAN DO map.get("id") AND THE SENT VALUE WILL BE ////
        //// RETURNED AS EXPECTED WITH request.getParameter("id")     ////
        //////////////////////////////////////////////////////////////////

        System.err.println("================================");

        resp.setContentType("application/json; charset=UTF-8");
        resp.getWriter().println("{'result':true}");
    }

    // Based on code from: http://www.coderanch.com/t/383310/java/java/parse-url-query-string-parameter
    private static Map<String, String> makeQueryMap(String query) throws UnsupportedEncodingException {
        String[] params = query.split("&");
        Map<String, String> map = new HashMap<String, String>();
        for( String param : params ) {
            String[] split = param.split("=");
            map.put(URLDecoder.decode(split[0], "UTF-8"), URLDecoder.decode(split[1], "UTF-8"));
        }
        return map;
    }
}

符合要求:

$.post("foo",{id:5,name:"Nikos",address:{city:"Athens"}})

输出为:

>>>>>>>>>>>>> DECODED: id=5&name=Nikos&address[city]=Athens
================================
================================
{address[city]=Athens, id=5, name=Nikos}
================================

(注意:req.getParameterNames()不起作用。打印在第4行的地图包含通常可以使用访问的所有数据request.getParameter()。请注意嵌套对象符号{address:{city:"Athens"}}
address[city]=Athens)。

与您的问题无关,但出于完整性考虑:

如果要使用服务器端JSON解析器,则应使用JSON.stringify该数据:

$.post("foo",JSON.stringify({id:5,name:"Nikos",address:{city:"Athens"}}))

我认为与服务器通信JSON的最佳方法是使用JAX-RS(或与之等效的Spring)。在现代服务器上,它非常简单,可以解决这些问题。



 类似资料:
  • 问题内容: 我在网上搜索了此主题,但找不到有效的示例。我会很高兴有人可以给我帮助。 这是我测试的。 在塞夫莱特 我在所有事情上都变得空虚 问题答案: 排序答案是此数据隐藏在请求中。 以下servlet是一个演示如何使用它的示例(我正在JBoss 7.1.1上运行它): 符合要求: 输出为: (注意:不起作用。打印在第4行的地图包含通常可以使用访问的所有数据。请注意嵌套对象符号→ )。 稍微与您的问

  • 问题内容: 我正在使用此Ajax代码。但是我不知道如何使用Javascript在服务器端的asp上检索value1的值。 在我的服务器端,我想要类似<%var newdata = value1(这是服务器端的一个-已发送到此处)%> 请帮忙 !!!太感谢了 我知道PHP可以实现,但如何使用javascript 问题答案: 当您的Ajax-Request成功时,您将在Request-Object的Q

  • 问题内容: 我需要插入所有随发布发送的变量,它们是每个代表用户的复选框。 如果我使用GET,将会得到如下信息: 我需要在数据库中插入变量。 如何获取所有通过POST发送的变量?用逗号或其他东西隔开的数组或值? 问题答案: 该变量将自动填充。 尝试查看内容。 您可以这样访问各个值: 当然,这假设您的表单使用的是典型的表单编码(即 如果您的帖子数据采用其他格式(例如JSON或XML),则可以执行以下操

  • 问题内容: Java-通过POST方法发送HTTP参数? 问题答案: 在GET请求中,参数作为URL的一部分发送。 在POST请求中,将参数作为请求的正文发送到标头之后。 要使用进行POST,你需要在打开连接后将参数写入连接。 这段代码可以帮助你入门:

  • 这是我问的新问题,因为我还没有得到任何答案。 我正在使用亚马逊SNS Push向我注册的设备发送推送,一切都很好,我可以在我的应用程序上注册设备,可以发送推送等。我面临的问题是,当我通过推送打开我的应用程序时,我想打开一个特定的页面。我想发送一些额外的有效载荷参数,但我不能这样做。 我试过这个链接:-http://docs.aws.amazon.com/sns/latest/api/API_Pub

  • 通过Java发送邮件时获取异常 例外情况是: 以下是Java代码: 我在运输方面出了差错。发送(msg);我在这里使用的JAR::smtp 1.6.0、Javax Mail 1.4.7、邮件激活