Spring MVC 是基于 Java 的 Web 应用框架,是 Spring 框架的重要组成部分,遵循 MVC(Model-View-Controller)架构模式,用于构建灵活、可维护的 Web 应用程序。以下是其核心概念和特点:
一、MVC 架构模式
MVC 将应用程序分为三个核心组件:
- Model(模型):处理业务逻辑和数据,如数据库操作。
- View(视图):负责数据展示,如 JSP、Thymeleaf 模板。
- Controller(控制器):接收请求,调用模型处理数据,选择视图返回结果。
二、Spring MVC 的核心组件
-
DispatcherServlet(前端控制器)
- 所有请求的入口点,负责分发请求到合适的控制器。
- 通过配置文件或注解自动注册。
-
HandlerMapping(处理器映射器)
- 将请求映射到具体的控制器方法。
- 支持基于 URL、注解(如
@RequestMapping
)等方式。
-
Controller(控制器)
- 处理请求的组件,通常使用
@Controller
或@RestController
注解。 - 通过方法处理特定请求并返回数据或视图。
- 处理请求的组件,通常使用
-
ModelAndView(模型与视图)
- 封装处理结果(数据和视图名称),传递给 DispatcherServlet。
-
ViewResolver(视图解析器)
- 根据视图名称解析实际视图(如 JSP、HTML)。
三、工作流程
-
请求到达 DispatcherServlet
- 所有请求首先被 DispatcherServlet 拦截。
-
HandlerMapping 确定处理器
- 根据请求 URL 查找对应的 Controller 方法。
-
Controller 处理请求
- 调用业务逻辑,返回 ModelAndView 对象。
-
ViewResolver 解析视图
- 将逻辑视图名解析为实际视图(如 JSP 文件)。
-
视图渲染
- 将模型数据填充到视图中,返回响应给客户端。
四、核心注解
@Controller
:标识控制器类。@RestController
:组合注解,等价于@Controller + @ResponseBody
,用于 RESTful API。@RequestMapping
:映射请求路径,支持GET
、POST
等方法。@RequestBody
:将请求体解析为 Java 对象。@ResponseBody
:将返回值直接作为响应体。@PathVariable
:获取 URL 中的路径变量。@RequestParam
:获取请求参数。
五、优点
- 松耦合设计:各组件职责清晰,易于维护和测试。
- 灵活的视图支持:支持 JSP、Thymeleaf、Freemarker、JSON 等多种视图技术。
- 强大的注解支持:简化配置,提高开发效率。
- 集成 Spring 生态:无缝整合 Spring 的 IoC、AOP 等功能。
- 国际化与本地化:内置支持多语言。
六、简单示例
以下是一个典型的 Spring MVC 控制器示例:
java
@RestController
@RequestMapping("/api")
public class UserController {
// 依赖注入服务层
@Autowired
private UserService userService;
// 处理 GET 请求:/api/users/{id}
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
// 处理 POST 请求:/api/users
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
}
七、与 Spring Boot 的关系
Spring Boot 简化了 Spring MVC 的配置:
- 自动配置 DispatcherServlet 和 ViewResolver。
- 内嵌 Tomcat、Jetty 等服务器,无需部署 WAR 文件。
- 通过
spring-boot-starter-web
依赖快速集成 Spring MVC。