第1章 Spring MVC基础架构解析
1.1 MVC模式与Spring MVC工作机制
MVC(Model-View-Controller)作为经典软件架构模式,通过分离业务逻辑、数据展示和用户交互实现高内聚低耦合。Spring MVC在此基础上构建了完整的请求处理流水线:
- DispatcherServlet:作为前端控制器,统一接收所有HTTP请求
- HandlerMapping:负责URL与控制器方法的映射关系管理
- Controller:业务逻辑处理核心,返回模型数据和视图名称
- ViewResolver:根据视图名称解析实际视图对象
- View:完成最终数据渲染(JSP/Thymeleaf等)
典型请求处理流程:
客户端请求 → DispatcherServlet → HandlerMapping → Controller → ViewResolver → View渲染 → 响应返回
1.2 开发环境搭建指南
1.2.1 框架依赖配置
推荐使用Maven管理依赖,核心配置如下:
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.20</version></dependency>
1.2.2 IDE配置要点
在Eclipse/IntelliJ IDEA中需完成:
- 配置Tomcat服务器(建议9.0+版本)
- 创建Dynamic Web Project时选择Java EE 7+规范
- 配置Web Deployment Assembly包含Maven依赖
- 设置字符编码为UTF-8避免中文乱码
1.3 首个Spring MVC应用开发
1.3.1 基础项目结构
src/├── main/│ ├── java/ # 控制器类│ ├── resources/ # 配置文件│ └── webapp/ # 视图文件│ ├── WEB-INF/│ │ └── views/ # JSP存放目录│ └── static/ # 静态资源
1.3.2 控制器实现示例
@Controller@RequestMapping("/demo")public class DemoController {@GetMapping("/hello")public String sayHello(Model model) {model.addAttribute("message", "Hello Spring MVC");return "welcome"; // 对应/WEB-INF/views/welcome.jsp}}
1.3.3 核心配置要点
web.xml配置前端控制器:
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc.xml</param-value></init-param></servlet>
第2章 控制器高级开发技巧
2.1 注解驱动开发模式
2.1.1 核心注解体系
| 注解类型 | 作用域 | 典型应用场景 |
|---|---|---|
| @Controller | 类级别 | 标识控制器组件 |
| @RequestMapping | 方法/类级别 | 定义请求映射路径 |
| @GetMapping | 方法级别 | 简化HTTP GET请求映射 |
| @PostMapping | 方法级别 | 简化HTTP POST请求映射 |
2.1.2 路径映射最佳实践
@Controller@RequestMapping("/api/v1") // 类级别基础路径public class ApiController {@GetMapping("/users/{id}") // 路径变量public ResponseEntity<User> getUser(@PathVariable Long id) {// 实现逻辑}}
2.2 参数绑定全解析
2.2.1 实体对象绑定
@PostMapping("/register")public String register(@ModelAttribute User user) {// 自动将表单字段映射到User对象属性}
2.2.2 混合参数接收
@GetMapping("/search")public String search(@RequestParam String keyword,@RequestParam(defaultValue = "1") int page,Model model) {// 处理逻辑}
2.2.3 特殊参数处理
@GetMapping("/download")public void download(@RequestHeader("User-Agent") String userAgent,HttpServletResponse response) {// 根据浏览器类型返回不同文件}
2.3 请求处理生命周期
典型控制器方法执行顺序:
- 参数解析阶段(自动类型转换)
- @ModelAttribute方法调用(如果有)
- 业务方法执行
- 视图解析阶段(如果返回视图名称)
- 响应处理阶段(重定向/转发/直接写入)
第3章 数据处理与类型转换
3.1 类型转换体系
Spring提供三级转换机制:
- 内置转换器:处理基本类型和常见对象转换
- 自定义Converter:实现Converter
接口 - 格式化器:实现Formatter接口(支持国际化)
3.2 自定义转换器实现
public class DateConverter implements Converter<String, Date> {private static final String[] PATTERNS = {"yyyy-MM-dd", "dd/MM/yyyy"};@Overridepublic Date convert(String source) {for (String pattern : PATTERNS) {try {return new SimpleDateFormat(pattern).parse(source);} catch (ParseException e) {continue;}}throw new IllegalArgumentException("Invalid date format");}}
3.3 注册转换服务
@Configurationpublic class WebConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new DateConverter());}}
3.4 格式化应用场景
@Controllerpublic class OrderController {@GetMapping("/orders/{orderDate}")public String showOrder(@DateTimeFormat(pattern = "yyyyMMdd")@PathVariable Date orderDate,Model model) {// 自动完成字符串到Date的转换}}
第4章 高级特性与实践
4.1 异常处理机制
4.1.1 控制器增强
@ControllerAdvicepublic class GlobalExceptionHandler {@ExceptionHandler(DataAccessException.class)public ResponseEntity<ErrorResponse> handleDatabaseError(DataAccessException ex) {return ResponseEntity.internalServerError().body(new ErrorResponse("DB_ERROR", ex.getMessage()));}}
4.2 文件上传处理
4.2.1 配置Multipart解析器
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760"/> <!-- 10MB --></bean>
4.2.2 控制器实现
@PostMapping("/upload")public String handleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes) {if (!file.isEmpty()) {// 处理文件存储逻辑redirectAttributes.addFlashAttribute("message","File uploaded successfully: " + file.getOriginalFilename());}return "redirect:/uploadStatus";}
4.3 RESTful API开发
4.3.1 统一响应封装
@RestController@RequestMapping("/api/users")public class UserApiController {@GetMapping("/{id}")public ResponseEntity<ApiResponse<User>> getUser(@PathVariable Long id) {User user = userService.findById(id);return ResponseEntity.ok(ApiResponse.success(user));}}
4.3.2 版本控制策略
- URL路径版本:/api/v1/users
- 请求头版本:Accept: application/vnd.company.v1+json
- 媒体类型版本:Content-Type: application/json;version=1.0
总结与展望
Spring MVC作为成熟的Web框架,通过合理的架构设计和丰富的扩展点,能够满足从简单网站到复杂企业应用的开发需求。开发者应重点掌握:
- 请求处理生命周期的各个阶段
- 参数绑定的多种方式及其适用场景
- 类型转换和格式化的定制方法
- 异常处理和文件上传等关键功能
随着Spring Boot的普及,建议开发者结合自动配置特性,进一步提升开发效率。后续可深入学习Spring WebFlux等响应式编程模型,适应现代Web开发的技术演进趋势。