您的位置:首页 > Web前端 > JavaScript

关于servlet中不能获取前台传入的json数据的问题

2017-10-30 11:54 513 查看
今天上午遇到一个奇怪的问题,自己写了一个测试小程序,没有用框架,前台传入一个json数据给servlet,但servlet中接受不到,代码如下:

servlet的代码:public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String nn = request.getParameter("name");
PrintWriter out = response.getWriter();
System.out.println("doGet invoked!");
out.println(nn);
out.flush();
}前端代码:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script>

function requestJson(){
var j ={"name":"wang","sex":"nan"};
$.ajax({
type:"post",
url:"servlet/Test",
contentType:'application/json;charset=UTF-8',
//数据格式 json字符串传递
data:j,
success:function(data){
alert(data);
}
});
}
</script>
</head>

<body>
<input type="button" value="jj" onclick="requestJson()">

</body>
</html>但在后台,一直那不到要的值,这个问题困扰了我一上午,之前用spring框架,后台直接拿到json数据封装到对象中,但没用框架的话不可以这样做。
之后在网上看到其他前辈的建议,前端的代码:contentType:'application/json;charset=UTF-8',
改为

contentType: "application/x-www-form-urlencoded",问题解决。
原理:

application/x-www-form-urlencoded方式是Jquery的Ajax请求默认方式,这种方式的好处就是浏览器都支持,在请求发送过程中会对数据进行序列化处理,以键值对形式?key1=value1&key2=value2的方式发送到服务器,如果用Jquery,它内部已经进行了处理,如果自己写原生的Ajax请求,就需要自己对数据进行序列化。

OK,问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐