今天重新研究了一下用servlet和jsp通过ajax传json格式的值,完成前后端分离的小测试。
其中,使用了json的jar包,和jquery的jar包
前端界面,主要是用了jquery调用ajax较为简单,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ajax传json值测试</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
function check(){
var name= $("#name").val();
var pwd= $("#pwd").val();
var user={name:name,pwd:pwd};
$.ajax({
url:"Jsontest",
contentType: 'application/json;charset=UTF-8',
type:"post",
data:JSON.stringify(user),
//返回数据的格式
datatype: "json",
success:function(result){
alert(result);
alert(JSON.parse(result).pwd)
},
error:function(){
}
}
)
}
</script>
</head>
<body>
用户名:<input type="text" id="name"/> <br/>
密码:<input type="text" id="pwd"/>
<input type="button" value="校验" onclick="check()"/>
</body>
</html>
后台代码:
public class Jsontest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接受前台发送的数据,通过流的形式接收数据
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8")); //将数据使用流进行传递
StringBuffer strb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) { //遍历数据
strb = strb.append(line); //数据暂存StringBuffer
}
System.out.println("接受数据为"+strb);
User o= JSON.parseObject(strb.toString(), User.class);
//只设置响应编码格式,前台接收到的是一个字串
// response.setCharacterEncoding("utf-8");
//设置之后前端接收到的是一个对象
response.setContentType("application/json;charset=UTF-8");
System.out.println(o);
PrintWriter out = response.getWriter();
out.write(JSON.toJSONString(o));//通过流的形式响应
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
实体对象User
public class User {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public User(String name, String pwd) {
this.pwd = pwd;
}
public User() {
super();
}
@Override
public String toString() {
return "User [name=" + name + ", pwd=" + pwd + "]";
}
}
注意点:
1.json序列化:
String s=JSON.toJSONString(object obj);
2.反序列化
Object o=JSON.parseObject(s,obj.class);
3.json转为js对象
Var obj=JSON.parse(s);
将js对象转为字符串
var s=JSON.stringfy(obj);
5.servlet接收json数据字符串使用读取数据流的形式
发送json数据字符串也使用流的形式发送
6.前台发送json格式时,要注意设置:
contentType: 'application/json;charset=UTF-8',