Spring WebMVC是基于ServletAPI构建的原始Web框架,从⼀开始就包含在Spring框架中。它的 正式名称"SpringWebMVC"来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".
MVC是ModelViewController的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分 为
模型、视图和控制器三个基本部分
总结来说,SpringMVC是⼀个实现了MVC模式的Web框架.
在SpringMVC中使⽤ @RequestMapping 来实现URL路由映射,也就是浏览器连接程序的作⽤
路由映射:当⽤⼾访问⼀个URL时,将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.
Spring会对所有的类进⾏扫描,如果类加了注解@RestController,Spring才会去看这个类⾥⾯的⽅法 有没有加 @RequestMapping 这个注解
@RequestMapping 既可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径+⽅ 法路径.
@RequestMapping 既⽀持Get请求,⼜⽀持Post请求.同理,也⽀持其他的请 求⽅式.
传递参数,主要是使⽤浏览器和Postman来模拟.
传递单个参数
接收单个参数,在SpringMVC中直接⽤⽅法中的参数就可以,⽐如以下代码:
注意事项
使⽤基本类型来接收参数时,参数必须传(除boolean类型),否则会报500错误 类型不匹配时,会报400错误.
对于包装类型,如果不传对应参数,Spring接收到的数据则为null
传递多个参数 如何接收多个参数呢? 和接收单个参数⼀样,直接使⽤⽅法的参数接收即可.使⽤多个形参.

当有多个参数时,前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后 端获取参数的结果.
传递对象 如果参数⽐较多时,⽅法声明就需要有很多形参.并且后续每次新增⼀个参数,也需要修改⽅法声明. 我们不妨把这些参数封装为⼀个对象. Spring MVC也可以⾃动实现对象参数的赋值,⽐如Person对象:


Spring 会根据参数名称⾃动绑定到对象的各个属性上,如果某个属性未传递,则赋值为null(基本类型则 赋值为默认初识值,⽐如int类型的属性,会被赋值为0)
后端参数重命名(后端参数映射)
某些特殊的情况下,前端传递的参数key和我们后端接收的key可以不⼀致,⽐如前端传递了⼀个 time 给后端,⽽后端是使⽤createtime字段来接收的,这样就会出现参数接收不到的情况,如果出现 这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值. 具体⽰例如下,后端实现代码:

1. 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 致,才能进⾏参数绑定和赋值.
2. 使⽤ @RequestParam 声明的名称⼀ @RequestParam 进⾏参数重命名时,参数就变成了必传参数.
required 的默认值为true,表⽰含义就是:该注解修饰的参数默认为必传 既然如此,我们可以通过设置 @RequestParam 中的 required=false 来避免不传递时报错,

传递数组

传递集合
集合参数:和数组类似,同⼀个请求参数名有为多个,且需要使⽤ @RequestParam 绑定参数关系 默认情况下,请求中参数名相同的多个值,是封装到数组.如果要封装到集合,要使⽤ @RequestParam 绑定参数关系

JSON概念
简单来说:JSON就是⼀种数据格式,有⾃⼰的格式和语法,使⽤⽂本表⽰⼀个对象或数组的信息,因此 JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
JSON的语法:
1. 数据在 键值对 (Key/Value) 中
2. 数据由逗号 , 分隔
3. 对象⽤ {} 表⽰
4. 数组⽤ [] 表⽰
5. 值可以为对象,也可以为数组,数组中可以包含多个对象
JSON的两种结构
1. 对象:⼤括号 {} 保存的对象是⼀个⽆序的 键值对集合.⼀个对象以左括号 { 开始,右括号 } 结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔
2. 数组:中括号 [] 保存的数组是值(value)的有序集合.⼀个数组以左中括号 [ 开始,右中括 号 ] 结束,值之间使⽤逗号 , 分隔。

JSON字符串和Java对象互转 JSON本质上是⼀个字符串,通过⽂本来存储和描述数据 Spring MVC框架也集成了JSON的转换⼯具,我们可以直接使⽤,来完成JSON字符串和Java对象的互转

JSON优点
1. 简单易⽤:语法简单,易于理解和编写,可以快速地进⾏数据交换
2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成,可以在不同的平台和语⾔之间进⾏数据交换和 传输
3. 轻量级:相较于XML格式,JSON数据格式更加轻量级,传输数据时占⽤带宽较⼩,可以提⾼数据传输 速度
4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
5. 安全性:JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码,不会执⾏恶意代码,因此具有较⾼ 的安全性
传递JSON对象 接收JSON对象,需要使⽤ @RequestBody 注解 RequestBody: 请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正 ⽂中


获取URL中参数@PathVariable


如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时,可以简写,不⽤给@PathVariable的属性赋 值,如上述例⼦中的id变量 如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时,需要@PathVariable的属性value赋值, 如上述例⼦中的userName变量.
上传⽂件@RequestPart

获取Cookie/Session
Session的本质就是⼀个"哈希表",存储了⼀些键值对结构.Key就是SessionID,Value就是⽤⼾信息(⽤ ⼾信息可以根据需求灵活设计).


Session 默认是保存在内存中的.如果重启服务器则Session数据就会丢失.
获取Cookie
传统获取Cookie
Spring MVC是基于ServletAPI构建的原始Web框架,也是在Servlet的基础上实现的 HttpServletRequest , HttpServletResponse 是Servlet提供的两个类,是Spring MVC⽅法的内置对象.需要时直接在⽅法中添加声明即可. HttpServletRequest 对象代表客⼾端的请求,当客⼾端通过HTTP协议访问服务器时,HTTP请 求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客⼾端请求的所有信 息. HttpServletResponse 对象代表服务器的响应.HTTP响应的信息都在这个对象中,⽐如向客⼾ 端发送的数据,响应头,状态码等.通过这个对象提供的⽅法,可以获得服务器响应的所有内容 Spring MVC在这两个对象的基础上进⾏了封装,给我们提供更加简单的使⽤⽅法.
简洁获取Cookie

获取Session
Session 存储和获取 Session是服务器端的机制,我们需要先存储,才能再获取 Session 也是基于HttpServletRequest来存储和获取的
Session存储

获取Session有两种⽅式

HttpSession getSession(boolean create) : 参数如果为true,则当不存在会话时新建会话;参数如果 为false, 则当不存在会话时返回null
Session读取 读取Session可以使⽤HttpServletRequest

简洁获取Session(2) 通过SpringMVC内置对象HttpSession来获取

HttpSession session = request.getSession();
Session 不存在的话,会⾃动进⾏创建
获取Header
传统获取header 获取Header也是从 HttpServletRequest 中获取

简洁获取Header

所以前⾯使⽤的 @RestController 其实是返回的数据.
@RestController = @Controller + @ResponseBody
@Controller : 定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理. @ResponseBody : 定义返回的数据格式为⾮视图,返如果想返回视图的话,只需要把 @ResponseBody 去掉就可以了,也就是回⼀个text/html信息
如果想返回视图的话,只需要把 @ResponseBody 去掉就可以了,也就是@Controller
后端返回数据时,如果数据中有HTML代码,也会被浏览器解析

设置状态码
Spring MVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码 通过SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置

状 态码不影响⻚⾯的展⽰
⻚⾯跳转的三种⽅式:
1. window.location.href="book_list.html";
2. window.location.assign("book_list.html");
3. window.location.replace("book_list.html");
以上写法,通常把"window."省略,
⽐如 window.location.href = "book_list.html"; 写成 location.href = "book_list.html";
lombok介绍
Lombok是⼀个Java⼯具库,通过添加注解的⽅式,简化Java的开发.
- 引⼊依赖

- 使⽤
lombok通过⼀些注解的⽅式,可以帮助我们消除⼀些冗⻓代码,使代码看起来简洁⼀些 ⽐如之前的Person对象就可以改为

@Data 注解会帮助我们⾃动⼀些⽅法,包含getter/setter,equals,toString等
如果觉得@Data⽐较粗暴(⽣成⽅法太多),lombok也提供了⼀些更精细粒度的注解


