需求:获取浏览器文本框中输入的用户姓名,年龄,性别,前后端数据交互
1.JSON 简介
JSON(JavaScript Object Notation) 是一种基于字符串的轻量级的数据交换格式。易于人阅
读和编写,同时也易于机器解析和生成。JSON 是 JavaScript 数据类型的子集。
1.1为什么要使用JSON
在 JSON 未出现之前在 Ajax 中对于数据传递方式,会使用 XML 作为主要数据格式来传
输数据。直到 JSON 出现后逐渐放弃使用 XML 作为数据传输格式。JSON 比 XML 更小、更
快,更易解析。
1.2JSON 的语法规则
JSON 是按照特定的语法规则所生成的字符串结构。
-->大括号表示 JSON 的字符串对象。{ }
-->属性和值用冒号分割。{"属性":"value"}
-->属性和属性之间用逗号分割。{"属性":"value","属性":"value",...}
--> 中括号表示数组。[{"属性":"value"...},{"属性":"value"...}]
2. 处理请求中的JSON 格式数据
@RequestBody
@RequestBody 注解可以将 JSON 格式的数据转为 Java 对象。但是要求 content-type 不是默认的 application/x-www-form-urlcoded 编码的内容。一般情况下来说常用其来处理application/json 类型。
当然,也有处理响应中的JSON格式数据: @ResponseBody
@ResponseBody 注解的作用是将处理请求方法返回的对象通过转换器转换为JSON 格式数据,同时写入到 response 对象的 body 区,通常用来返回 JSON 数据。需要注意,在使用此注解之后不会再走视图解析器,而是直接将数据写入到输出流中,他的效果等同于通过response 对象输出指定格式的数据。如果处理请求方法返回的是 String 时,@ResponseBody 注解不会进行 JSON 转换。响应的 Content-Type 为 text/plain;charset=ISO-8859-1。
如果处理请求方法返回的是除了 String 类型以外的其他 Object 类型时,@ResponseBody 注解会进行 JSON 转换。响应的 Content-Type 为 application/json。
3. 搭建环境的jar包: 需要Jackson 的jar包和jquery.js文件 servlet-api.jar 以及spring的jar包
地址:https://mvnrepository.com/artifact/com.fasterxml.jackson.core https://spring.io/
4.代码:
1. 在 SpringMVC 的视图解析器中使用的是请求转发方式来实现页面跳转。可以在配置视图解析器时指定视图的前置与后缀。
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
2. 当在 DispatcherServlet 的<url-pattern>中配置拦截 “/” 时,除了*.jsp 不会拦截以外,其他所有的请求都会经过前端控制器进行匹配,此时静态资源,例如 *.css、*.js、*.jpg…… 就会被前端控制器拦截,导致不能访问,出现 404 问题。
<!--配置静态资源映射器
mapping:配置请求的URL
location:配置映射路径-->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
3. web.xml中配置前端控制器
<!--配置前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4. 引入js文件 和使用Ajax提交json串的请求
<head>
<title>Title</title>
<%--引入js文件--%>
<script src="/js/jquery.js"></script>
<script>
$(function (){
$("#but").click(function () {
var username = $("#username").val();
var userage = $("#userage").val();
var usersex = $("#usersex").val();
//创建js对象,将取出来的值封装到js对象中
var obj = {
name: username,
age: userage,
sex:usersex,
};
//使用ajax进行异步处理
$.ajax({
url: "/user/addUsers",
contentType: "application/json",
type: "post",
//把js对象转换成json格式的数据
data: JSON.stringify({
name: username,
age: userage,
sex: usersex,
}),
/* success: function (res) {
alert(res);
}*/
});
})
})
</script>
</head>
<body>
用户姓名:<input type="text" id="username"/><br/>
用户年龄:<input type="text" id="userage"/><br/>
用户性别:<input type="text" id="usersex"/><br/>
<input type="button" value="提交" id="but"/>
</body>
</html>
5.配置处理JSON串的控制器
@Controller
@RequestMapping("/user")
public class UsersController {
@RequestMapping("/addUsers")
//获得前台传递过来的json字符串并存储到pojo中,这种方式只接受ajax的post请求,如果是个get请求会报错。
public void addUsers(@RequestBody Users users, HttpServletResponse response) throws IOException {
System.out.println(users);
PrintWriter writer = response.getWriter();
writer.print("ok");
writer.flush();
writer.close();
}
}
6.配置页面跳转的控制器
处理Restful 风格的请求
1.占位符:{ }
用于绑定 uri 中的占位符。例如:浏览器请求 uri 是/delete/10 ,在 SpringMVC 处理请求的方法中,在绑定 uri 时需要用占位符来表示需要获取 uri 中的哪个路径的值。@RequestMapping("/delete/{id}"),这个{id}就是 uri 占位符。uri 支持占位符是spring3.0 之后加入的。是 springmvc 支持 restful 风格的一个重要标志。
2. @PathVaribale
通过 @PathVariable 可以将 uri 中占位符参数绑定到控制器处理方法的入参中。
@Controller
@RequestMapping("/page")
public class PageController {
@RequestMapping("/{page}")
public String showpage(@PathVariable("page") String p){
return p;
}
}
7.运行截图:
8:总结:
JSON交互的方式:
(1)请求是JSON串,在controller方法的形参上使用@RequestBody注解,将请求的JSON串绑定到pojo对象。
(2)请求的是表单提交的方式。直接使用springMVC的参数绑定,不需要做转换。
(3)返回JSON串,在controller方法的返回数据类型前加上@ResponseBody注解,将返回的对象转换为JSON串。
小白一枚,有错的地方和不足的地方希望大家指出来