获取通过Java Servlet中的jquery ajax发送的参数

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

这是我测试的。

 $.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)。它在现代服务器上非常简单,可以解决这些问题。

以上是 获取通过Java Servlet中的jquery ajax发送的参数 的全部内容, 来源链接: utcz.com/qa/409756.html

回到顶部