关于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,问题解决。
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,问题解决。
相关文章推荐
- WebService返回数据前台获取并处理JSON的相关问题
- Servlet的request获取前台json数据
- 关于从后台获取数据List<User>转化为JSON格式在前台用easyui以表格显示
- 关于java中long类型的数据转换json传到前台时丢失精度问题的解决办法
- 解决springmvc 从后台获取json数据传入前台jsp中文显示???的方法
- 关于前台合并获取后台动态table中数据相同的单元格的问题;th td合并
- 关于在servlet和action中返回json数据的一些问题
- 关于ExtJs前台Form获取后台的JSON数据
- 关于jquery获取json数据的格式问题
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
- 关于从不同的URL获取JSON数据时Ext.data.Store反映迟缓问题的解决
- 关于一加载jsp页面就跳转到servlet获取数据然后再跳回jsp页面的问题
- 关于测试$.getJSON获取json数据的问题
- 关于64位系统上运行32位IIS,而不能调用的ODBC获取数据的问题。
- <项目一>请教一个关于获取post json数据的问题
- Servlet如何获取ajax中以json格式传入的数据?
- 关于获取JSON数据,出现格式错误的问题记录
- Servlet如何获取ajax中以json格式传入的数据
- 关于Microsoft.XMLHTTP或Ajax中异步获取数据的问题
- 关于jQuery获取Action返回的JSON数据 项目真实案例 记录(Struts2)