在请求中通过 JSON 格式传递数据
- 除了在响应中通过 JSON 格式来传递数据,在请求中也可以使用 JSON 格式传递数据。
- 在请求中使用 JSON 格式传递数据,提交方式需要使用 POST 方式,
- 通过 JavaScript 中的 JSON.stringify()函数将 JavaScript 对象转换为 JSON 格式数据。
- 通过 send 方法将参数传递到 Servlet 中,在 Servlet 中通过字符输入流获取 JSON 格式数据。
步骤
- 添加 jackson-annotations.jar、jackson-core.jar、jackson-databind.jar
- JSON.stringify()函数将 JavaScript 对象转换为 JSON 格式的数据
- POST 方式
- send()函数将 JSON 格式的数据提交到服务端。
- JSON 格式的数据
- 通过 jackson API 将获取到的 JSON 格式的数据转换为 Java 对象
servlet的编写
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 在请求中通过json格式传递数据
*/
@WebServlet("/request")
public class requestjson extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求编码
req.setCharacterEncoding("utf-8");
//通过字符输入流从请求体中获取提交的JSON格式的数据
String s=req.getReader().readLine();
//使用Jackson将JSON格式的字符串对象转换成java对象
ObjectMapper objectMapper=new ObjectMapper();
User user=objectMapper.readValue(s, User.class);
System.out.println(user.getUserid()+" "+user.getUsername());
resp.setContentType("application/json");
PrintWriter pw=resp.getWriter();
pw.println(user);
pw.flush();
pw.close();
}
}
JSP页面的编写
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script>
function but(){
//取文本域中的值
var id=document.getElementById("userid").value
var name=document.getElementById("username").value
//定义一个js对象
var obj={userid:id,username:name}
//将js对象转换成json格式的数据
var content=JSON.stringify(obj)
alert(content)
//创建XMLHttpRequest对象
var xhr=new XMLHttpRequest()
//给定请求方式和请求地址
xhr.open("post","request")
//异步请求的发送,讲数据发送到请求的地址
xhr.send(content)
//send执行完毕后,立刻执行下列方法(将函数的地址赋给onreadystatechange)
//回调函数,通过onreadystatechange回调自己写的函数
xhr.onreadystatechange=function (){
//0:open函数没有被调用
//1:open函数正在被调用
//2:send函数正在被调用
//3:服务端正在返回结果
//4:请求结束,并且服务端已经结束发送数据到客户端
//4表示响应结束,200表示响应成功
if (xhr.readyState==4 && xhr.status==200){
alert(xhr.responseText)
//通过JavaScript的内置对象JSON的parse方法将json格式字符串转换成JavaScript对象
document.getElementById("span").innerHTML=content;
}
}
}
</script>
</head>
<body>
<%--由于是异步处理请求,不用放在表单内--%>
用户id:<input type="text" name="userid" id="userid"><br>
用户姓名:<input type="text" name="username" id="username"><br>
<span id="span"></span>
<input type="button" value="submit" onclick="but()">
</body>
</html>