spring MVC 介绍

发布于:2025-03-23 ⋅ 阅读:(26) ⋅ 点赞:(0)

Spring MVC 是 Spring 框架中用于构建 Web 应用的核心模块,基于 MVC 设计模式(Model-View-Controller)实现。以下是其核心概念的整理:


1. MVC 设计模式

Model(模型):封装业务数据和业务逻辑(如 POJO 对象、Service 层)。
View(视图):负责数据展示(如 JSP、Thymeleaf、HTML)。
Controller(控制器):接收请求,调用业务逻辑,返回模型和视图。


2. 核心组件

(1) DispatcherServlet(前端控制器)

作用:Spring MVC 的入口,统一处理所有请求,协调各组件工作。
配置:在 web.xml 中定义,或通过 Spring Boot 自动配置。
流程

  1. 接收 HTTP 请求。
  2. 调用 HandlerMapping 找到对应的控制器(Controller)。
  3. 调用 HandlerAdapter 执行控制器逻辑。
  4. 处理结果通过 ViewResolver 解析为视图。
(2) HandlerMapping

作用:根据请求 URL 找到对应的 Controller 和方法。
默认实现RequestMappingHandlerMapping(基于 @RequestMapping 注解)。

(3) Controller

作用:处理具体业务逻辑,返回数据或视图。
核心注解
@Controller:标记为控制器。
@RestController:专用于 REST API(等价于 @Controller + @ResponseBody)。
@RequestMapping:定义请求映射路径(类或方法级别)。
@GetMapping@PostMapping 等:简化特定 HTTP 方法的映射。

(4) ViewResolver(视图解析器)

作用:将逻辑视图名(如 "home")解析为实际视图(如 home.jsp)。
常用实现
InternalResourceViewResolver:解析 JSP。
ThymeleafViewResolver:解析 Thymeleaf 模板。

(5) Model

作用:向视图传递数据的容器。
使用方式
• 通过 Model 对象(方法参数)添加数据。
• 使用 @ModelAttribute 绑定请求参数到对象。


3. 请求处理流程

  1. 用户发起请求 → DispatcherServlet 接收请求。
  2. 查询 HandlerMapping → 找到对应的 Controller 方法。
  3. 调用 HandlerAdapter → 执行控制器方法。
  4. 处理业务逻辑 → 返回 ModelAndView(或直接返回数据)。
  5. 解析视图 → ViewResolver 将逻辑视图名解析为实际视图。
  6. 渲染视图 → 结合 Model 数据生成 HTML/JSON 响应。

4. 关键注解

(1) 请求映射

@RequestMapping:定义 URL 路径和 HTTP 方法。

@RequestMapping(value = "/user", method = RequestMethod.GET)

@GetMapping@PostMapping 等:简化版映射注解。

(2) 参数绑定

@RequestParam:绑定请求参数到方法参数。

public String getUser(@RequestParam("id") Long id) { ... }

@PathVariable:绑定 URL 路径变量。

@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) { ... }

@RequestBody:将请求体(JSON/XML)绑定到对象。

@PostMapping("/user")
public User createUser(@RequestBody User user) { ... }
(3) 数据传递

Model:通过方法参数传递数据到视图。

@GetMapping("/users")
public String listUsers(Model model) {
    model.addAttribute("users", userService.findAll());
    return "user/list";
}

@ModelAttribute:绑定表单数据到对象。

@PostMapping("/user")
public String saveUser(@ModelAttribute User user) { ... }
(4) 数据验证

@Valid:触发 JSR-303 验证(需配合 hibernate-validator)。

@PostMapping("/user")
public String saveUser(@Valid @ModelAttribute User user, BindingResult result) {
    if (result.hasErrors()) { ... }
}

5. 视图技术

JSP:传统 Java 视图技术,需配置 ViewResolver
Thymeleaf:现代模板引擎,与 Spring Boot 集成简单。
JSON 响应:使用 @ResponseBody@RestController 返回 JSON 数据。


6. RESTful 支持

HTTP 方法语义化
GET 查询,POST 新增,PUT 更新,DELETE 删除。
状态码与响应
• 使用 ResponseEntity 控制状态码和响应头。

@GetMapping("/user/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
    User user = userService.findById(id);
    return ResponseEntity.ok(user); // 200 OK
}

7. 高级特性

(1) 拦截器(Interceptor)

作用:在请求处理前后插入逻辑(如日志、权限校验)。
实现:实现 HandlerInterceptor 接口,配置到 InterceptorRegistry

(2) 异常处理

@ExceptionHandler:在 Controller 内处理特定异常。
@ControllerAdvice:全局异常处理(所有 Controller 共享)。

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(500).body(e.getMessage());
    }
}
(3) 文件上传

• 使用 MultipartFile 接收上传文件。

@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) { ... }

8. 与其他技术集成

数据库:整合 Spring Data JPA、MyBatis。
安全:通过 Spring Security 实现权限控制。
测试:使用 MockMvc 模拟 HTTP 请求测试 Controller。


总结

Spring MVC 的核心是 DispatcherServlet 驱动的请求处理流程,通过注解简化配置,结合组件化设计实现灵活扩展。掌握以下关键点即可快速上手:

  1. 请求映射(@RequestMapping 系列注解)。
  2. 参数绑定与数据验证。
  3. 视图解析与数据传递。
  4. RESTful API 设计。
  5. 拦截器与全局异常处理。

结合 Spring Boot 可进一步简化配置,快速构建 Web 应用。建议通过实际项目(如用户管理系统)练习核心功能。