Servlet 前后端分离,通过json传值(一)

今天重新研究了一下用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',

猜你喜欢

转载自blog.csdn.net/qq_38735996/article/details/89106387