接收JSON对象, 需要使⽤ @RequestBody 注解
7.获取URL中参数@PathVariable
path variable: 路径变量
和字⾯表达的意思⼀样, 这个注解 主要作⽤在请求URL路径上的数据绑定
如果⽅法参数名称和需要绑定的 URL中的变量名称⼀致时 , 可以简写, 不⽤ 给@PathVariable的属性赋 值, 如上述例⼦中的id变量
如果⽅法参数名称和需要绑定的 URL中的变量名称不⼀致时 , 需要@PathVariable的属性value赋值 ,
如上述例⼦中的userName变量
8.上传⽂件@RequestPart


9.获取Cookie/Session
1.回顾 Cookie
HTTP 协议⾃⾝是属于 "⽆状态" 协议.
"⽆状态" 的含义指的是: 默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信, 和下次通信之间没有直接的联系. 但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的.
Cookie:类似于医院就诊卡,随时可以获取,来就可以办新的卡
Session:类似与服务器在就诊卡记录里面的信息
2.理解Session
Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失
Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象
1. 当⽤⼾登陆的时候, 服务器在 Session 中新增⼀个新记录, 并把 sessionId返回给客⼾端. (通过
HTTP 响应中的 Set-Cookie 字段返回).
2. 客⼾端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId. (通过 HTTP 请求中的
Cookie 字段带上).
3. 服务器收到请求之后, 根据请求中的 sessionId在 Session 信息中获取到对应的⽤⼾信息, 再进⾏后 续操作.找不到则重新创建Session, 并把SessionID返回
3.Cookie 和 Session 的区别
1.Cookie 是 客⼾端保存⽤⼾信息 的⼀种机制. Session 是 服务器端保存⽤⼾信息的⼀种机制.
2.Cookie 和 Session之间主要是通过 SessionId 关联 起来的, SessionId 是 Cookie 和 Session 之间的 桥梁
3.Cokie 和 Session 经常会在⼀起配合使⽤. 但是 不是必须配合 .
4.完全可以⽤ Cookie 来保存⼀些数据在客⼾端. 这些数据不⼀定是⽤⼾⾝份信息, 也不⼀定是
SessionId
5.Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递.
4.获取Cookie@CookieValue

5.获取Session@SessionAttibute
Session 存储和获取
Session是服务器端的机制, 我们需要 先存储, 才能再获取
Session 也是基于 HttpServletRequest 来存储和获取的
Session读取
简洁获取 Session(1)
(2)

10.获取Header

简洁获取 Header
三.响应@Controller
1.返回静态⻚⾯
创建前端⻚⾯ index.html(注意路径要在一个路径里面)
我们需要把 @RestController 改为 @Controller

@RestController 、 @Controller区别
所以前⾯使⽤的 @RestController 其实是返回的数据.
@RestController = @Controller + @ResponseBody
@Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
@ResponseBody : 定义 返回数据 格式为⾮视图, 返回⼀个 text/html 信息

2.返回数据@ResponseBody
@ResponseBody 既是类注解, ⼜是⽅法注解

因为@Controller只是把对象交给Spring管理,不能返回数据,所以必须+@ResponseBody

3 返回HTML代码⽚段
后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析
响应中的 Content-Type 常⻅取值有以下⼏种:
text/html : body 数据格式是 HTML
text/css : body 数据格式是 CSS
application/javascript : body 数据格式是 JavaScript
application/json : body 数据格式是 JSON
4 返回JSON
Spring MVC 也可以返回JSON ,后端⽅法返回结果为对象

5 设置状态码


3.练习.
1.加法计算器
2. 留⾔板
3..2 ⽤⼾登录
4.实现服务器端代码
1 .lombok介绍
⼀个新的⼯具包 lombok
Lombok是⼀个Java⼯具库,通 过添加注解的⽅式 ,简化Java的开发.
简单来学习下它的使⽤
1. 引⼊依赖
@Data = @Getter + @Setter + @ToString + @EqualsAndHashCode @RequiredArgsConstructor
+ @NoArgsConstructor


2.更快捷的引⼊依赖


2.服务器代码实现( 留⾔板)
定义留⾔对象 MessageInfo 类
创建 MessageController 类
3.调整前端⻚⾯代码
图书管理系统
5.应⽤分层

按照上⾯的层次划分, Spring MVC 站在后端开发⼈员的⻆度上, 也进⾏了⽀持, 把上⾯的代码划分为三 个部分:
1.请求处理、响应数据 :负责,接收⻚⾯的请求,给⻚⾯响应数据.
2.逻辑处理 :负责业务逻辑处理的代码.
3.数据访问: 负责业务数据的维护操作,包括增、删、改、查等操作.
这三个部分, 在Spring的实现中, 均有体现
Controller:控制层 。接收前端发送的请求,对请求进⾏处理,并响应数据。
Service:业务逻辑层 。处理具体的业务逻辑。
Dao:数据访问层 ,也称为持久层。负责数据访问操作,包括数据的增、删、改、查.
MVC架构模式由三部分组成 , 分别是: 模型(Model), 视图(View)和控制器(Controller).
三层架构将业务应⽤划分为 :表现层, 业务逻辑层, 数据访问层
1. 代码拆分


Http相关对象(获取session、Header/设置状态码)
1.HttpServletRequest re;获取session
2.HttoSession se=re.getSeession();//通过获取Session,来
3.se.setAttribute("name","value")使⽤指定的名称绑定⼀个对象到该 session 会话,来储存
4.se.getAttribute("name")通过se,来获取对象
注解
@RestController//其实是返回的数据.==@ResponseBody返回数据+@Controller响应静态
@RequestMapping("/user")//路由映射
@RequestParam(value="time",required=false)//后端参数重命名
@RequestBody //接收JSON类型的参数
@PathVariable//接收路径参数
@RequestPart: 上传⽂件
@CookieValue("bite")//从Cookie中获取值
@SessionAttribute(value="username",required=false)//从Session中获取值
@RequestHeader("User-Agent")//从Header中获取值
@Controller响应静态//把这个对象交给Spring管理. 默认返回 视图.
@ResponseBody返回数据
总结
学习Spring MVC, 其实就是学习各种Web开发需要⽤的到注解
a. @RequestMapping: 路由映射
b. @RequestParam: 后端参数重命名
c. @RequestBody: 接收JSON类型的参数
d. @PathVariable: 接收路径参数
e. @RequestPart: 上传⽂件
f. @ResponseBody: 返回数据
g. @CookieValue: 从Cookie中获取值
h. @SessionAttribute: 从Session中获取值
i. @RequestHeader: 从Header中获取值
j. @Controller: 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理. 默认返回
视图.
k. @RestController: @ResponseBody + @Controller 返回数据
2. Cookie 和Session都是会话机制, Cookie是客⼾端机制, Session是服务端机制 . ⼆者通过SessionId
来关联. Spring MVC内置HttpServletRequest, HttpServletResponse两个对象. 需要使⽤时, 直接在
⽅法中添加对应参数即可, Cookie和Session可以从HttpServletRequest中来获取, 也可以直接使⽤
HttpServletResponse设置Http响应状态码 .
3. Java EE学习阶段会涉及较多⼯具, 插件的学习, 来帮助我们提⾼开发效率. ⽐如Postman, lombok, EditStarter, 后⾯还会继续学习其他的⼯具或插件.