1.什么是 Spring MVC?
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring
MVC”。
从上述定义我们可以得出两个关键信息:
- Spring MVC 是⼀个 Web 框架。
- Spring MVC 是基于 Servlet API 构建的。
2.MVC 定义
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分
为模型、视图和控制器三个基本部分
- Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
- View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。
- Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,
- 控制⽤户输⼊,并向模型发送数据。
3.MVC 和 Spring MVC 的关系
MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。
总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web 框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤户的请求.
4.Spring MVC基本功能
1. 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的
Spring 程序。
2. 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数。
3. 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户。对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC
5.Spring MVC 创建和连接
Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同(Spring MVC 使⽤ Spring Boot 的⽅式创建),在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬.
1.创建项目
2.勾选Spring Web
3.配置国内源
4.实现连接的功能
在 Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射,也就是浏览器连接程序的作⽤。接下来要实现的功能是访问地址:http://localhost:8080/user/hi,能打印“hello,spring mvc”信息.
运行结果:
我们使用Fiddler抓包看看输入url(http://localhost:8080/user/hi)用的是什么请求
1.打开Fiddler
2.访问网址
3.抓包
可以看到,当我们输入网址,点击确定,@RequestMapping支持GET请求(也就是默认是GET请求)。
那么@RequestMapping支不支持Post请求呢?我们使用postman来模拟一下post请求,看看@RequestMapping支不支持Post请求.
1.用postman模拟GET请求
2.打开Fillder
3.用postman模拟post请求
由此我们可以确定@RequestMapping支持GET和Post.而且,默认是GET请求
那我们可不可以用代码将GET请求修改成Post?
抓包看看?(不用抓包了,修改代码以后,只能用post请求来访问)
postman模拟post请求
post请求可以访问
postman模拟get请求
get访问不了!
当你手动设置method = RequestMethod.POST,表示此方法只接受POST请求类型,其他类型都不支持,会返回405错误.
6.实现用户和程序的连接@GetMapping / @PostMapping
@GetMapping:表示当前方法只支持Get请求
@PostMapping:表示当前方法只支持Post请求 (照猫画虎,PostMapping也一样)
总结一下:
连接功能实现有三种方式:@RequestMapping+@GetMapping+@PostMapping
7.热部署Idea专业版spring boot(spring mvc)项目
8.获取参数
得到单个参数:
运行结果:
得到俩个参数:
运行结果:
得到多个参数(对象)
运行结果:
通过表单传递参数:
我们看看postman传递参数的方法有哪些?(用户可以通过文件,form表单,raw,binary等方式,将参数,传递给Java后端程序)
9.后端参数重命名
假如前端有个小白把password给改成了pwd,我后端拿不到这个参数,前端正好放假,我该怎么办?难道把password全都改成pwd? 这代价太大了。
这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值.
运行结果:
10.设置参数必传@RequestParam
运行结果:
只传一个参数:
参数都传:
非必传参数设置
如果我们的实际业务前端的参数是⼀个⾮必传的参数,我们可以通过设置 @RequestParam 中的
required=false 来避免不传递时报错,具体实现如下:
运行结果:
只传递一个参数: