
摘要
Spring MVC 是 Spring Framework 提供的一个模块化 Web 框架,用于构建基于 MVC 架构的 Java Web 应用。它具备良好的解耦性、可扩展性和灵活性,是目前主流的 Java Web 开发框架之一。
本文将系统讲解 Spring MVC 的基本原理、核心组件、请求处理流程、常用注解以及实际开发中的常见配置和技巧,适合初学者快速上手,也适合中高级开发者查漏补缺。
一、引言:什么是 Spring MVC?
随着前后端分离架构的普及,后端接口的职责越来越清晰。Spring MVC 作为 Spring 生态中负责 Web 层的核心模块,凭借其强大的功能和良好的集成能力,成为众多 Java 开发者的首选。
Spring MVC 的优势:
- 支持 MVC 分层架构
 - 支持 RESTful 风格接口设计
 - 可灵活整合各种视图技术(如 Thymeleaf、JSP、JSON)
 - 易于测试、松耦合设计
 - 支持国际化、数据绑定、表单验证等功能
 
🧱 二、Spring MVC 的核心组件
| 组件 | 描述 | 
|---|---|
DispatcherServlet | 
前端控制器,负责接收所有请求并协调其他组件 | 
HandlerMapping | 
根据请求路径找到对应的 Controller 方法 | 
ViewResolver | 
解析视图名称为具体的视图实现(如 JSP) | 
ModelAndView | 
封装模型数据和视图信息 | 
Controller | 
处理具体业务逻辑的类或方法 | 
三、Spring MVC 请求处理流程详解
- 用户发送 HTTP 请求。
 - 请求被 
DispatcherServlet接收。 HandlerMapping查找合适的 Controller。- 调用 Controller 方法处理请求,返回 
ModelAndView。 ViewResolver解析视图名,渲染模型数据。- 返回最终响应给用户(HTML 页面或 JSON 数据)。
 

️ 四、搭建第一个 Spring MVC 项目(基于 Spring Boot)
1. 创建 Maven 工程并引入依赖
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
2. 创建 Controller 类
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring MVC!";
    }
}
3. 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
启动后访问:http://localhost:8080/api/hello,即可看到输出 "Hello, Spring MVC!"
五、Spring MVC 核心注解详解
| 注解 | 用途 | 
|---|---|
@Controller | 
表示该类是一个控制器,返回值为视图名 | 
@RestController | 
结合 @Controller 和 @ResponseBody,适用于 RESTful 接口 | 
@RequestMapping | 
映射 URL 到类或方法 | 
@GetMapping / @PostMapping 等 | 
更细粒度的请求映射 | 
@PathVariable | 
获取 URL 中的变量 | 
@RequestParam | 
获取请求参数 | 
@RequestBody | 
将请求体反序列化为对象 | 
@ResponseBody | 
将返回值直接写入 HTTP 响应体中 | 
六、常见配置与使用场景
1. 视图解析器配置(如 Thymeleaf)
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        return resolver;
    }
    // ...其他配置
}
2. 静态资源放行
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
3. 全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException() {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误");
    }
}
4. 表单验证支持(JSR 380)
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult result) {
    if (result.hasErrors()) {
        return ResponseEntity.badRequest().body(result.getAllErrors());
    }
    // 处理业务逻辑
    return ResponseEntity.ok("创建成功");
}
七、Spring MVC 与 RESTful API 实践
Spring MVC 对 RESTful API 的支持非常完善,适合构建前后端分离的应用。
示例:用户管理接口
@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;
    public UserController(UserService service) {
        this.userService = service;
    }
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        return ResponseEntity.status(HttpStatus.CREATED).body(userService.saveUser(user));
    }
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}
️ 八、性能优化与最佳实践
| 优化点 | 说明 | 
|---|---|
| 使用异步处理 | @Async 实现非阻塞调用 | 
| 缓存静态内容 | 使用 Spring Cache 或 Redis | 
| 合理使用线程池 | 配置 TaskExecutor 提升并发能力 | 
| 日志记录 | 使用 MDC 记录 traceId 方便排查问题 | 
| 接口文档 | 使用 Swagger 或 SpringDoc 自动生成 API 文档 | 
九、总结
Spring MVC 是构建现代 Java Web 应用的重要工具,无论是传统的 MVC 页面应用还是现代化的 RESTful 接口服务,都能轻松胜任。
掌握 Spring MVC 的核心原理和常用技巧,不仅能提升开发效率,也能帮助你在面试和工作中脱颖而出。
- 如果你在学习过程中遇到任何疑问,欢迎在评论区留言交流!
 - 如果你觉得这篇文章对你有帮助,别忘了点赞、收藏、转发哦!
 
