# SpringMVCDemo **Repository Path**: sky0535/SpringMVCDemo ## Basic Information - **Project Name**: SpringMVCDemo - **Description**: 这是一个 SpringMVC Framework 学习项目,包含多个子模块,用于学习和演示 SpringMVC 的核心概念和高级特性。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-12 - **Last Updated**: 2026-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Spring-MVC ## README # SpringMVCDemo 这是一个 SpringMVC Framework 学习项目,包含多个子模块,用于学习和演示 SpringMVC 的核心概念和高级特性。 > 本项目配套学习文档:[SpringMVC 教程](https://www.yuque.com/dujubin/java/myxi54xu063hgsl4) ## 项目总览 项目按照学习进度划分为多个独立的 Maven 子模块,每个模块对应 SpringMVC 教程中的一个或多个章节,从入门到 SSM 整合,循序渐进。 | 模块 | 对应章节 | 主要内容 | | :--- | :--- | :--- | | SpringMVC01 | 1. 初识 SpringMVC | 第一个 SpringMVC 程序、执行流程 | | SpringMVC02 | 2. RequestMapping 注解 | value/method/params/headers 属性 | | SpringMVC03 | 3. 获取请求数据 | Servlet API、@RequestParam、JavaBean、@RequestHeader、@CookieValue | | SpringMVC04 | 4. Servlet 中的三个域对象 | request/session/application 域、Model/Map/ModelMap/ModelAndView | | SpringMVC05 | 5. SpringMVC 中的视图技术 | Thymeleaf/JSP 视图、转发与重定向、静态资源 | | SpringMVC06 | 6-7. RESTful 编程风格 | RESTful 风格、用户管理系统 | | SpringMVC07 | 8. Http 消息转换器 | @ResponseBody、@RestController、@RequestBody、ResponseEntity | | FileService | 9-10. 文件上传下载与异常处理 | 文件上传/下载、全局异常处理器 | | SpringMVC08 | 11. 拦截器 Interceptor | 拦截器创建、配置、执行顺序 | | MvcUriBuilder | — | Spring MVC UriBuilder 工具使用 | | SpringMvcSSM | 14. SSM 整合-全注解式开发 | Spring + SpringMVC + MyBatis 全注解整合 | ## 技术栈 - **JDK**:Java 17+(使用 `jakarta.servlet` 命名空间) - **框架**:Spring Framework 6 / Spring MVC 6 - **视图层**:Thymeleaf、JSP - **持久层**:MyBatis、Hikari 连接池 - **构建工具**:Maven - **Web 服务器**:Tomcat 10+ - **其他**:Lombok、Axios、Ace Editor ## 各模块详细说明 ### SpringMVC01 — 初识 SpringMVC 对应教程第 1 章「初识 SpringMVC」,演示第一个 SpringMVC 程序的搭建与执行流程。 **核心源码**: - `HelloController.java` — 演示 `@Controller` + `@RequestMapping`,向 request 域绑定数据并返回逻辑视图 - `IndexController.java` — 访问首页 - `UserController.java` — 控制器多方法示例 **配置文件**: - `web.xml` — 配置 DispatcherServlet **学习要点**:MVC 架构回顾、SpringMVC 执行流程、逻辑视图名到物理视图的转换。 --- ### SpringMVC02 — RequestMapping 注解 对应教程第 2 章「RequestMapping 注解」,深入讲解 `@RequestMapping` 的各项属性。 **核心源码**: - `UserController.java` — value、method、params、headers 属性演示 - `PathController.java` — 占位符与模糊匹配 **学习要点**:`@RequestMapping` 的出现位置(类上/方法上)、衍生注解(`@GetMapping`/`@PostMapping` 等)、params/headers 的 4 种用法。 --- ### SpringMVC03 — 获取请求数据 对应教程第 3 章「获取请求数据」,全面演示获取请求参数的各种方式。 **核心源码**: - `UserController.java` — `@RequestParam` 的 required、defaultValue 属性 - `CustomerController.java` — 使用 JavaBean 接收请求参数 - `HeaderController.java` — `@RequestHeader` 注解 - `CookieController.java` — `@CookieValue` 注解 - `StudentController.java` — 形参名接收参数 - `FileController.java` — 文件相关 **学习要点**:原生 Servlet API、`@RequestParam`、形参名接收、JavaBean 接收、`@RequestHeader`、`@CookieValue`、中文乱码问题。 --- ### SpringMVC04 — Servlet 三个域对象 对应教程第 4 章「Servlet 中的三个域对象」,演示三大域对象的数据共享方式。 **核心源码**: - `RequestScopeController.java` — request 域(Model/Map/ModelMap/ModelAndView) - `SessionScopeController.java` — session 域、`@SessionAttributes` - `ApplicationScopeController.java` — application 域 - `CookieController.java` — Cookie 操作 **学习要点**:Model、Map、ModelMap 三者关系、ModelAndView 源码分析、`@SessionAttributes` 注解。 --- ### SpringMVC05 — 视图技术 对应教程第 5 章「SpringMVC 中的视图技术」,讲解视图解析原理与视图技术。 **核心源码**: - `ThymeleafController.java` — Thymeleaf 视图 - `JSPController.java` — JSP 视图 - `IndexController.java` — 首页跳转 **视图资源**: - `WEB-INF/jsp/home.jsp` - `html/index.html` **学习要点**:视图实现机制核心接口、Thymeleaf 视图、JSP 视图、`forward` 转发与 `redirect` 重定向、``、``、静态资源访问。 --- ### SpringMVC06 — RESTful 风格 对应教程第 6、7 章「RESTful 编程风格」与「使用 RESTful 实现用户管理系统」。 **核心源码**: - `UserController.java` — RESTful 风格的增删改查 - `UserDao.java` — 模拟数据访问层 - `UserInfo.java` — 实体类 **学习要点**:RESTful 与传统方式对比、GET/POST/PUT/DELETE、`@PathVariable`、`HiddenHttpMethodFilter`、用户管理系统完整实现。 --- ### SpringMVC07 — Http 消息转换器 对应教程第 8 章「Http 消息转换器」,讲解 HTTP 消息转换与 JSON 处理。 **核心源码**: - `UserController.java` — `@ResponseBody`、`@RestController` - `EntityController.java` — `RequestEntity`、`ResponseEntity` - `MessageController.java` — `@RequestBody` 消息体接收 **前端资源**:集成 Axios 与 Ace Editor,用于 AJAX 请求测试。 **学习要点**:HTTP 消息转换器原理、内置常用转换器、`@ResponseBody`、`@RestController`、`@RequestBody`、`RequestEntity`、`ResponseEntity`。 --- ### SpringMVC08 — 拦截器 对应教程第 11 章「拦截器 Interceptor」。 **核心源码**: - `MyInterceptor01.java` — 第一个拦截器 - `MyInterceptor02.java` — 第二个拦截器 - `MyInterceptor03.java` — 第三个拦截器 - `UserController.java` — 被拦截的目标控制器 **学习要点**:拦截器概述、`preHandle`/`postHandle`/`afterCompletion` 方法、拦截与放行源码分析、多拦截器执行顺序(全放行 vs 某个返回 false)。 --- ### FileService — 文件上传下载与异常处理 对应教程第 9 章「文件上传和下载」与第 10 章「异常处理器」。 **核心源码**: - `FileController.java` — 文件上传 `MultipartFile`、文件下载 - `FormController.java` — 表单页面跳转 - `GlobalExceptionHandler.java` — 全局异常处理器(`@ControllerAdvice` + `@ExceptionHandler`) - `BusinessException.java` — 自定义业务异常 - `ResultInfo.java` — 统一返回结果封装 **静态资源**:包含上传目录 `upload/`、表单页面 `web/form.html`、`web/file.html`。 **学习要点**:`MultipartFile` 文件上传、文件下载 Response 封装、默认异常处理器、自定义异常处理器(配置文件方式与注解方式)、实际开发中的全局异常处理最佳实践。 --- ### MvcUriBuilder — Uri 构建工具 演示 Spring MVC 提供的 `MvcUriComponentsBuilder` Uri 构建工具的使用。 **核心源码**: - `UserController.java` — UriBuilder 使用示例 - `IndexController.java` — 首页跳转 **学习要点**:基于控制器方法名构建 Uri,避免硬编码路径。 --- ### SpringMvcSSM — SSM 整合全注解开发 对应教程第 14 章「SSM 整合-全注解式开发」,是项目的综合实战模块,使用全注解方式整合 Spring + SpringMVC + MyBatis。 **核心源码**: - `WebConfig.java` — 替代 `web.xml`,继承 `AbstractAnnotationConfigDispatcherServletInitializer`,配置 DispatcherServlet、字符编码过滤器、`HiddenHttpMethodFilter` - `SpringConfig.java` — Spring 父容器配置:Hikari 数据源、MyBatis `SqlSessionFactoryBean`、`@MapperScan`、事务管理 - `SpringMvcConfig.java` — SpringMVC 子容器配置:`@EnableWebMvc`、Thymeleaf 视图解析器、静态资源、拦截器、视图控制器 - `CustomerController.java` — Customer 列表/详情查询(RESTful) - `CustomerService.java` / `CustomerServiceImpl.java` — 业务层 - `CustomerMapper.java` — MyBatis Mapper 接口 - `Customer.java` — 实体类 - `GlobalExceptionHandler.java` — 全局异常处理 - `LogInterceptor.java` / `SecurityInterceptor.java` — 日志与安全拦截器 **学习要点**: - Spring 容器与 SpringMVC 容器分离(父子容器),通过 `excludeFilters` 避免重复扫描 - `@Configuration` + `@ComponentScan` + `@EnableWebMvc` 全注解配置 - Servlet 3.0+ 自动发现机制替代 `web.xml` - Hikari 连接池 + MyBatis 整合 - `@MapperScan` 自动扫描 Mapper 接口 - `@EnableTransactionManagement` 声明式事务 ## 项目结构 ``` SpringMVCDemo/ ├── SpringMVC01/ # 初识 SpringMVC ├── SpringMVC02/ # RequestMapping 注解 ├── SpringMVC03/ # 获取请求数据 ├── SpringMVC04/ # Servlet 三个域对象 ├── SpringMVC05/ # 视图技术 ├── SpringMVC06/ # RESTful 风格 ├── SpringMVC07/ # Http 消息转换器 ├── SpringMVC08/ # 拦截器 ├── FileService/ # 文件上传下载与异常处理 ├── MvcUriBuilder/ # Uri 构建工具 ├── SpringMvcSSM/ # SSM 整合全注解开发 ├── README.md └── LICENSE ``` 每个模块均为独立的 Maven 项目,包含: - `pom.xml` — Maven 依赖配置 - `src/main/java` — Java 源代码 - `src/main/resources` — 配置文件(如 `springmvc.xml`) - `src/main/webapp` — Web 资源(`web.xml`、静态资源、视图模板) - `.mvn/` — Maven Wrapper ## 运行方式 各模块为独立的 Web 应用,可通过以下方式运行: 1. **IDE 配置 Tomcat**:在 IDEA 中配置 Tomcat 10+ 服务器,部署对应模块的 artifact。 2. **Maven Tomcat 插件**:通过 `mvnw` 启动(部分模块已配置 Tomcat 插件)。 3. **SpringMvcSSM 模块**:基于 Servlet 3.0+ 自动发现机制,无需 `web.xml`,直接部署到支持 Servlet 6.0 的容器即可。 > **注意**:本项目使用 `jakarta.servlet` 命名空间,需使用 Tomcat 10+ 及 Spring Framework 6。 ## 学习路径建议 1. SpringMVC01 → 掌握基本执行流程 2. SpringMVC02 → 掌握请求映射 3. SpringMVC03 → 掌握请求参数获取 4. SpringMVC04 → 掌握域对象与数据共享 5. SpringMVC05 → 掌握视图与跳转 6. SpringMVC06 → 掌握 RESTful 风格 7. SpringMVC07 → 掌握 JSON 与消息转换 8. SpringMVC08 → 掌握拦截器 9. FileService → 掌握文件处理与异常处理 10. SpringMvcSSM → 综合实战 SSM 整合