认识 Spring MVC
什么是 Spring MVC
Spring MVC(正式名称:Spring Web MVC) 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。
- Spring MVC 是⼀个 Web 框架
- Spring MVC 是基于 Servlet API 构建的
MVC 的定义
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。
MVC 执行流程:
- 用户的请求首先到 Controller
- Controller 将请求转发给 Model
- Model 处理业务并将数据结果返回给 Controller
- Controller 将处理的数据发给 View
- View 将数据转换成页面发送给用户
MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。
总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤户的请求.
在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架。
Spring MVC 注解的运用
- 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。
- 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数。
- 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户
1. Spring MVC 的连接
首先创建一个 TestController 类,来实现用户与 Spring 程序的交互:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller //让该类随着 Spring 框架启动而加载 @ResponseBody //返回非页面数据(这个注解在返回数据中讲解) //@RestController 相当于@Controller + @ResponseBody @RequestMapping("/test") //路由器规则注册(一级路由) public class TestController { @RequestMapping("/hi") //路由器规则注册(二级路由) public String sayHi() { System.out.println("hi Spring MVC"); return "<h1> 你好 Spring MVC <h1>"; } }
通过浏览器地址访问,来与程序交互:
可以看到,通过我们访问地址 http://localhost:8080/test/hi 就可以执行sayHi 方法,并返回字符串到页面上了。
这里注意:
spring mvc 项目默认扫描路径是启动类所在的包下所有的子包,也就是说:我们新建的的类要想放入 IoC 中,就得在该包下创建类。(默认启动类是在 demo 包下)
@RequestMapping 注解
@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的。
路由映射:所谓的路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。
@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类 + ⽅法。
@RequestMapping 也可以直接修饰⽅法,代码实现如下:
默认情况下,@RequestMapping 是支持 post 和 get 请求的,我们用 Postman 来验证一下:
get 请求:
post 请求:
在有些情况下,我们可能要该注解只支持其中一种请求,那要怎么实现呢?
- 只支持 get 请求的注解方式
@RestController @RequestMapping("/test") public class TestController { //方式一 //下面 value 也可以改为 path @RequestMapping(value = "/hi",method = RequestMethod.GET) public String sayHi() { System.out.println("hi Spring MVC"); return "<h1> 你好 Spring MVC <h1>"; } //方式二 @GetMapping("/hhh") public String hhh() { return "hello world"; } }
这里就只演示一下方式一:
注意,浏览器通过 url 来访问地址, 默认是 get 请求。
再通过 Postman 来构造一下 post 请求:
2. 只支持 post 请求的注解方式
@RestController @RequestMapping("/test2") public class Test2Controller { //方式一 @RequestMapping(path = "/hi",method = RequestMethod.POST) public String sayHi() { return "你好"; } //方式二 @PostMapping("/hhh") public String hhh() { return "你好,世界!"; } }
这里通过浏览器直接访问就报错了:
通过 Postman 构建 post 请求: