spring MVC 介绍

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 方法。

java 复制代码
@RequestMapping(value = "/user", method = RequestMethod.GET)

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

(2) 参数绑定

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

java 复制代码
public String getUser(@RequestParam("id") Long id) { ... }

@PathVariable:绑定 URL 路径变量。

java 复制代码
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) { ... }

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

java 复制代码
@PostMapping("/user")
public User createUser(@RequestBody User user) { ... }
(3) 数据传递

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

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

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

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

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

java 复制代码
@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 控制状态码和响应头。

java 复制代码
@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 共享)。

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

• 使用 MultipartFile 接收上传文件。

java 复制代码
@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 应用。建议通过实际项目(如用户管理系统)练习核心功能。

相关推荐
roman_日积跬步-终至千里4 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦4 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli74 小时前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
HalvmånEver4 小时前
Linux:线程互斥
java·linux·运维
rainbow68894 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
灵感菇_4 小时前
Java 锁机制全面解析
java·开发语言
indexsunny4 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
娇娇乔木5 小时前
模块十一--接口/抽象方法/多态--尚硅谷Javase笔记总结
java·开发语言
saber_andlibert5 小时前
TCMalloc底层实现
java·前端·网络
wangjialelele5 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先