🔎什么是 Spring MVC
Spring Web MVC 是基于 Servlet 构建的原始 Web 框架, 包含在 Spring 框架中.
Spring Web MVC 来自其源模块的名称(Spring-webmvc), 但通常称作 Spring MVC
即
- Spring MVC 构建在 Servlet 之上
- Spring MVC 是一个 Web 框架
- Spring MVC 基于 Spring-webmvc 模块
MVC
MVC(Model View Controller)—模型视图控制器
- Model(模型), 应用程序中用于处理应用程序数据逻辑的部分. 通常模型对象负责在数据库中存取数据
- View(视图), 应用程序中用于处理数据显示的部分. 通常视图是依据模型数据创建的
- Controller(控制器), 应用程序中用于处理用户交互的部分. 通常控制器负责从视图读取数据, 控制用户输入, 并向模型发送数据
对比 MVC 与 Spring MVC
MVC 与 Spring MVC 之间的关系类似于 IOC(思想) 与 DI(思想的具体实现) 之间的关系
MVC 是一种思想
Spring MVC 是对 MVC 思想的具体实现
🔎Spring MVC—连接
利用 Spring MVC 输出 hello world🍭
在 demo 包下创建一个 controller 包
在 controller 包下创建一个 TestController 类
demo(package) → controller(package) → TestController(.class)
@Controller
, 存储 TestController 至 Spring 容器@ResponseBody
, 返回数据而非页面@RequestMapping()
, 设置请求路径
注意🍂
@Controller
可与@ResponseBody
合并为@RestController
@RequestMapping()
既可以修饰类也可以修饰方法
完整代码🍂
package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; // @Controller // @ResponseBody @RestController @RequestMapping("/test") public class TestController { @RequestMapping("/hello") public String sayHello() { return "hello world"; } )
运行结果🍂
@RequestMapping 默认情况下支持的请求类型
@RequestMapping 默认情况下支持多种 HTTP 请求
包括 GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS…
可通过 Postman 工具进行查看
@RequestMapping 指定请求类型
通过 method 属性指定请求的类型
可指定的请求类型
举个栗子🌰
指定 GET 请求method = RequestMethod.GET
完整代码
@RestController @RequestMapping("/test") public class TestController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String sayHello() { return "hello world"; } }
另一种指定 GET 请求的方式
(其他类型同理)
@GetMapping("/hello")
效果与@RequestMapping(value = "/hello", method = RequestMethod.GET)
相同
此时通过其他请求进行访问就会报错
405(Method Not Allowed)—方法不被允许
🔎Spring MVC—获取参数
获取单个参数
@RestController @RequestMapping("/test") public class TestController { // 获取单个参数 @GetMapping("/hello") public String sayHello(String name) { return "hello " + name; } }
注意🍭
URL 中的 key 必须与所传参数一致
错误示范🍭
获取两个参数
@RestController @RequestMapping("/test") public class TestController { // 获取两个参数 @GetMapping("/hello") public String sayHello(String name, Integer age) { return "hello name: " + name + " | age: " + age; } }
注意🍭
建议传参的类型为包装类型, 而非基础类型
错误示范🍭
当传参的类型为基础类型时
// 获取两个参数 @GetMapping("/hello") public String sayHello(String name, int age) { return "hello name: " + name + " | age: " + age; }
当传参的类型为包装类型时
// 获取两个参数 @GetMapping("/hello") public String sayHello(String name, Integer age) { return "hello name: " + name + " | age: " + age; }