Spring Web MVC(Spring MVC)

发布于:2025-03-30 ⋅ 阅读:(19) ⋅ 点赞:(0)

学习Spring MVC, 其实就是学习各种Web开发需要⽤的到注解

1.Spring MVC

spring Web MVC 是⼀个 Web 框架 .,简称之为: Spring MVC

MVC 定义

eg:

HR就是 View(视图) , 负责接待候选⼈, 并告知候选⼈⾯试结果
不同的部⻔, 就是 Controller(控制器) , HR根据候选⼈来选择对应的部⻔来进⾏⾯试
⾯试官, 就是 Model层 , 来处理⾯试这个事情

Spring MVC

MVC 是⼀种架构设计模式, 也是⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现 . 除此之外,
Spring MVC还是⼀个Web框架.
总结来说, Spring MVC 是⼀个实现了 MVC 模式的 Web 框架 .
Spring MVC 主要关注有两个点:
1. MVC
2. Web框架

Spring MVC框架

2.学习Spring MVC(重点)

既然是 Web 框架, 那么当⽤⼾在 浏览器中输⼊了 url 之后 ,我们的 Spring MVC 项⽬就可以 感知到⽤⼾ 的请求, 并给予响应 .
咱们学习Spring MVC, 重点 也就是学习如何通过浏览器和⽤⼾程序进⾏交互.
主要分以下三个⽅⾯:
1. 建⽴连接 :将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的
Spring 程序。
2. 请求 : ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数 的功能.
3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.
对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC.

一.建⽴连接

@RestController

@RestController注解是Spring 4.0引入的一个组合注解,用于简化RESTful Web服务的开发。@RestController注解相当于@Controller和@ResponseBody注解的组合,表示该类是一个控制器,并且所有的方法返回值都将直接写入HTTP响应体中,而不是返回视图名称

@RequestMapping :

1. Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接                                           ⼝的 路由映射的

 2. 既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径                                         + ⽅ 法路径.
 3.   既⽀持Get请求, ⼜⽀持Post请求 . 同理, 也⽀持其他的请 求⽅式
@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
指定GET/POST⽅法类型
@RestController
public class UserController {                             //还有其他方法
   @RequestMapping(value = "/getRequest",method= RequestMethod.POST )
    public String sayHi(){
        return "get request...";
    }
}

二.请求

创建请求(在postman中)

传参介绍
1. 普通传参, 也就是通过查询字符串来传参

2. form-data
3. x-www-form-urlencoded
4. raw
可以上传任意格式的⽂本,可以上传text、json、xml、html等

请求

1 传递单个参数
注意事项
使⽤基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误
类型不匹配时, 会报400错误
2.传递对象
3.后端参数重命名@RequestParam (后端参数映射)

前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀ime 给后端,⽽后端是使⽤ createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现 这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值.
required=false变成非必传(可以用time也可以createtime传参,默认为true)
可以看到, 添加required=false之后, time前⾯也加了key, 变成了 value = "time"
注解属性赋值时, 没有指明key的话, 默认为value属性.
如果需要有多个属性进⾏赋值时, 需要写上key
注意
1. 使⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀
, 才能进⾏参数绑定和赋值.
4.传递数组
5.传递集合
集合参数:和数组类似, 同⼀个请求参数名有为多个 , 且 需要使⽤ @RequestParam 绑定参数关系
默认情况下,请求中参数名相同的多个值,是封装到数组. 如果要封装到集合,要使⽤
@RequestParam 绑定参数关系
请求⽅式和数组类似:
6.传递JSON@RequestBody
JSON概念
JSON:JavaScript Object Notation 【JavaScript 对象表⽰法】
JSON是⼀种轻量级的数据交互格式. 它基于 ECMAScript (欧洲计算机协会制定的js规范)的⼀个⼦集, 采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。--百度百科
简单来说: JSON就是⼀种数据格式 , 有⾃⼰的格式和语法 , 使⽤⽂本表⽰⼀个对象或数组的信息, 因此 JSON本质是字符串. 主要负责在不同的语⾔中数据传递和交换.
JSON的语法:
1. 数据在 键值对 (Key/Value)
2. 数据由逗号 , 分隔
3. 对象⽤ {} 表⽰
4. 数组⽤ [] 表⽰
5. 值可以为对象, 也可以为数组, 数组中可以包含多个对象 JSON的两种结构
1. 对象: ⼤括号 {} 保存的对象是⼀个⽆序的 键值对 集合. ⼀个对象以左括号 { 开始, 右括号 }
结束。每个"键"后跟⼀个冒号 : ,键值对使⽤逗号 , 分隔
2. 数组: 中括号 [] 保存的数组是值(value)的有序集合. ⼀个数组以左中括号 [ 开始, 右中括
] 结束,值之间使⽤逗号 , 分隔。
JSON字符串和Java对象互转
JSON优点
1. 简单易⽤: 语法简单,易于理解和编写,可以快速地进⾏数据交换
2. 跨平台⽀持: JSON可以被多种编程语⾔解析和⽣成, 可以在不同的平台和语⾔之间进⾏数据交换和 传输
3. 轻量级: 相较于XML格式, JSON数据格式更加轻量级, 传输数据时占⽤带宽较⼩, 可以提⾼数据传输 速度
4. 易于扩展: JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码, 不会执⾏恶意代码,因此具有较⾼ 的安全性
基于以上特点, JSON在Web应⽤程序中被⼴泛使⽤, 如前后端数据交互、API接⼝数据传输等.
传递JSON对象(重点)
接收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, 后⾯还会继续学习其他的⼯具或插件.