1. 为什么Spring Boot和Spring MVC值得深入学习
作为Java开发者,你一定听说过Spring框架的大名。但真正让我决定系统学习Spring Boot和Spring MVC的,是在实际项目中踩过的那些坑。记得第一次接手一个老旧的Spring项目时,光是配置XML就花了两天时间,各种bean的定义和依赖关系让人眼花缭乱。而当我接触到Spring Boot后,一切都变得简单了——自动配置、约定优于配置的理念,让开发效率提升了数倍。
Spring MVC作为Spring框架的Web模块,是构建企业级Web应用的基石。它优雅地实现了MVC模式,通过DispatcherServlet这个"前端控制器"统一处理请求,配合注解驱动的开发模式,让Web开发变得前所未有的简单。而Spring Boot更进一步,通过starter依赖和自动配置,几乎消除了所有的样板代码。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目创建
2.1 开发环境配置
在开始之前,我们需要准备以下环境:
- JDK 8或更高版本(推荐JDK 11)
- Maven 3.6+或Gradle 6.x+
- IDE(IntelliJ IDEA、Eclipse或VS Code)
注意:虽然Spring Boot支持JDK 8,但考虑到长期维护,建议使用JDK 11或17。我在实际项目中遇到过JDK 8与某些新版本Spring Boot库的兼容性问题。
2.2 使用Spring Initializr创建项目
创建Spring Boot项目最简单的方式是使用Spring Initializr:
- 访问 https://start.spring.io
- 选择Maven或Gradle项目
- 选择Java版本
- 添加依赖:Spring Web(包含Spring MVC)、Lombok(可选但推荐)
- 点击生成并下载项目
或者使用命令行:
bash复制curl https://start.spring.io/starter.tgz -d dependencies=web,lombok -d javaVersion=11 | tar -xzvf -
2.3 项目结构解析
生成的典型项目结构如下:
code复制src/
├── main/
│ ├── java/
│ │ └── com/example/demo/
│ │ ├── DemoApplication.java # 启动类
│ │ └── controller/ # 控制器目录
│ └── resources/
│ ├── static/ # 静态资源
│ ├── templates/ # 模板文件
│ └── application.properties # 配置文件
└── test/ # 测试代码
3. Spring MVC核心概念与实践
3.1 理解MVC架构
Spring MVC实现了经典的三层架构:
- Model:数据模型,通常使用POJO表示
- View:视图层,负责展示数据(JSP、Thymeleaf等)
- Controller:控制器,处理请求并返回响应
这个架构的核心是DispatcherServlet,它充当前端控制器,负责将请求路由到适当的处理器。
3.2 创建第一个控制器
让我们创建一个简单的REST控制器:
java复制@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello(@RequestParam(required = false, defaultValue = "World") String name) {
return "Hello, " + name + "!";
}
}
启动应用后,访问 http://localhost:8080/api/hello?name=Spring 将看到响应。
3.3 请求映射详解
Spring MVC提供了丰富的注解来处理各种HTTP请求:
| 注解 | 用途 | 示例 |
|---|---|---|
| @RequestMapping | 通用请求映射 | @RequestMapping("/path") |
| @GetMapping | 处理GET请求 | @GetMapping("/users") |
| @PostMapping | 处理POST请求 | @PostMapping("/users") |
| @PutMapping | 处理PUT请求 | @PutMapping("/users/{id}") |
| @DeleteMapping | 处理DELETE请求 | @DeleteMapping("/users/{id}") |
实际经验:在RESTful API开发中,我建议始终使用特定的HTTP方法注解(如@GetMapping),而不是通用的@RequestMapping,这样代码意图更清晰。
3.4 参数绑定与验证
Spring MVC提供了多种方式获取请求参数:
-
@RequestParam:获取查询参数
java复制@GetMapping("/search") public String search(@RequestParam String keyword) { return "Searching for: " + keyword; } -
@PathVariable:获取路径变量
java复制@GetMapping("/users/{id}") public String getUser(@PathVariable Long id) { return "User ID: " + id; } -
@RequestBody:获取请求体(通常用于JSON)
java复制@PostMapping("/users") public User createUser(@RequestBody User user) { return userRepository.save(user); } -
参数验证:使用Jakarta Bean Validation
java复制@PostMapping("/users") public User createUser(@Valid @RequestBody User user) { return userRepository.save(user); } // User类中添加验证注解 public class User { @NotBlank private String name; @Email private String email; @Min(18) private int age; }
4. 视图技术与模板引擎
4.1 Thymeleaf集成
虽然REST API很流行,但有时我们仍需要服务端渲染页面。Spring Boot支持多种模板引擎,Thymeleaf是最流行的选择之一。
添加依赖:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId
