🌐 Spring MVC 知识地图
一、核心架构与组件
Spring MVC 核心
├── DispatcherServlet(前端控制器)
├── HandlerMapping(处理器映射)
│ ├── RequestMappingHandlerMapping (注解映射,最常用)
│ ├── BeanNameUrlHandlerMapping
│ └── SimpleUrlHandlerMapping
├── HandlerAdapter(处理器适配器)
│ ├── RequestMappingHandlerAdapter
│ ├── HttpRequestHandlerAdapter
│ └── SimpleControllerHandlerAdapter
├── Handler / Controller(处理器)
├── ModelAndView(模型与视图封装)
├── ViewResolver(视图解析器)
│ ├── InternalResourceViewResolver(JSP)
│ ├── BeanNameViewResolver
│ ├── XmlViewResolver
│ ├── ContentNegotiatingViewResolver
│ └── ……
└── View(视图)
├── JSP / JSTL
├── Thymeleaf
├── FreeMarker
└── ……二、请求处理完整流程
客户端请求
→ DispatcherServlet 接收
├── 1. 通过 HandlerMapping 查找 Handler(返回 HandlerExecutionChain,包含拦截器)
├── 2. 通过 HandlerAdapter 执行 Handler(Controller)
├── 3. Handler 执行业务逻辑,返回 ModelAndView
├── 4. 通过 ViewResolver 解析 ModelAndView 得到 View 对象
└── 5. View 渲染,将模型数据填充到视图,生成响应三、控制器开发
Controller 开发
├── 注解
│ ├── @Controller / @RestController
│ ├── @RequestMapping
│ │ ├── @GetMapping
│ │ ├── @PostMapping
│ │ ├── @PutMapping
│ │ ├── @DeleteMapping
│ │ └── @PatchMapping
│ └── @CrossOrigin(跨域)
├── 请求参数绑定
│ ├── @RequestParam
│ ├── @PathVariable(路径变量)
│ ├── @RequestHeader
│ ├── @CookieValue
│ ├── @MatrixVariable
│ ├── @RequestBody(JSON/XML 等)
│ ├── @ModelAttribute(表单/查询参数绑定到对象)
│ ├── HttpServletRequest / HttpServletResponse
│ └── MultipartFile(文件上传)
├── 返回类型
│ ├── String(视图名,配合 Model)
│ ├── ModelAndView
│ ├── void(直接操作 HttpServletResponse)
│ ├── @ResponseBody / ResponseEntity(JSON/XML 响应)
│ └── View、Model、Map 等
└── 异步处理
├── Callable<T>
├── DeferredResult<T>
└── ResponseBodyEmitter / SseEmitter / StreamingResponseBody四、数据绑定、类型转换与校验
数据绑定与校验
├── 类型转换
│ ├── PropertyEditor
│ ├── Converter / ConverterFactory
│ ├── Formatter(日期/数字等格式化)
│ └── @InitBinder(自定义绑定规则,注册编辑器/校验器)
├── 数据校验
│ ├── JSR-380(Bean Validation):@Valid / @Validated
│ ├── BindingResult / Errors(校验结果)
│ └── 自定义校验注解
└── WebDataBinder
└── 控制绑定行为(允许/禁止字段等)五、RESTful Web 服务
REST 支持
├── @RestController = @Controller + @ResponseBody
├── HTTP 方法映射注解
├── 内容协商 ContentNegotiationManager
├── HttpMessageConverter 消息转换器
│ ├── MappingJackson2HttpMessageConverter(JSON)
│ ├── Jaxb2RootElementHttpMessageConverter(XML)
│ ├── StringHttpMessageConverter
│ └── FormHttpMessageConverter 等
├── 请求/响应体处理
│ ├── @RequestBody
│ └── @ResponseBody / ResponseEntity / HttpEntity
├── 跨域 @CrossOrigin / 全局 CORS 配置
└── HATEOAS 支持(Spring HATEOAS)六、视图解析与渲染
视图技术
├── JSP + JSTL
│ └── InternalResourceViewResolver 配置
├── Thymeleaf
│ └── SpringTemplateEngine + ThymeleafViewResolver
├── FreeMarker
│ └── FreeMarkerViewResolver
├── 重定向与转发
│ ├── "redirect:/path"(RedirectView)
│ └── "forward:/path"(InternalResourceView)
├── 视图解析链(多个 ViewResolver 顺序解析)
└── ContentNegotiatingViewResolver(根据请求类型选择视图)七、拦截器与过滤器
拦截器 HandlerInterceptor(Spring MVC 层面)
├── 方法
│ ├── preHandle(控制器执行前)
│ ├── postHandle(控制器执行后,视图渲染前)
│ └── afterCompletion(视图渲染后)
├── 配置方式
│ ├── XML 配置 <mvc:interceptors>
│ └── Java 配置实现 WebMvcConfigurer.addInterceptors()
└── 与 Servlet Filter 的区别
├── Filter 在 Servlet 容器层面,不依赖 Spring
└── Interceptor 可访问 Handler 对象、ModelAndView,更贴合 MVC八、异常处理
异常处理体系
├── @ExceptionHandler(方法级,仅处理当前 Controller)
├── @ControllerAdvice / @RestControllerAdvice(全局异常处理)
│ └── + @ExceptionHandler、@InitBinder、@ModelAttribute
├── HandlerExceptionResolver 接口
│ ├── SimpleMappingExceptionResolver(映射异常到错误视图)
│ ├── DefaultHandlerExceptionResolver(处理标准 Spring 异常)
│ └── ResponseStatusExceptionResolver
├── @ResponseStatus(标注异常,返回对应 HTTP 状态码)
└── 自定义异常 + 全局处理九、文件上传与下载
文件操作
├── 上传
│ ├── MultipartResolver
│ │ ├── CommonsMultipartResolver(需 Apache Commons FileUpload)
│ │ └── StandardServletMultipartResolver(Servlet 3.0+ 标准)
│ └── @RequestParam("file") MultipartFile
├── 下载
│ ├── ResponseEntity<byte[]> 配合 InputStreamResource
│ ├── StreamingResponseBody(流式大文件下载)
│ └── 设置 Content-Disposition 响应头
└── 多文件上传(MultipartFile[] 或 List<MultipartFile>)十、国际化与主题
i18n & 主题
├── MessageSource(国际化消息源)
│ ├── ResourceBundleMessageSource
│ └── ReloadableResourceBundleMessageSource(可热加载)
├── LocaleResolver(区域解析器)
│ ├── AcceptHeaderLocaleResolver
│ ├── SessionLocaleResolver
│ ├── CookieLocaleResolver
│ └── FixedLocaleResolver
├── LocaleChangeInterceptor(切换语言拦截器)
├── 主题 Theme
│ ├── ThemeResolver
│ └── ThemeSource(ResourceBundleThemeSource)十一、配置方式
配置方式演进
├── XML 时代
│ ├── web.xml 配置 DispatcherServlet
│ ├── [name]-servlet.xml 配置
│ ├── <mvc:annotation-driven/>
│ ├── <mvc:resources>(静态资源处理)
│ └── <mvc:view-controller>(无逻辑视图跳转)
├── Servlet 3.0+ 纯 Java 配置
│ ├── WebApplicationInitializer / AbstractAnnotationConfigDispatcherServletInitializer
│ ├── @Configuration + @EnableWebMvc
│ ├── 实现 WebMvcConfigurer 接口进行定制
│ └── 静态资源 addResourceHandlers()
└── Spring Boot 自动配置
├── spring-boot-starter-web
├── 自动配置 DispatcherServlet、HttpMessageConverters、ViewResolver 等
├── application.properties / yml 微调
└── 使用 @Configuration + WebMvcConfigurer 扩展十二、测试支持
测试
├── MockMvc(独立测试控制器,不启动完整服务器)
│ ├── mockMvc.perform(get("/api"))
│ ├── .andExpect(status().isOk())
│ └── .andExpect(jsonPath("$.name").value("test"))
├── @WebMvcTest(Spring Boot 切片测试,仅加载 MVC 层)
├── TestRestTemplate / WebTestClient(集成测试)
└── Mock 服务依赖(@MockBean)十三、高级与周边
高级特性
├── CORS 全局配置(WebMvcConfigurer.addCorsMappings)
├── HTTP 缓存控制(CacheControl, ETag, Last-Modified)
├── Servlet 异步支持 / 响应式桥梁
├── WebSocket 集成(@MessageMapping, SimpMessagingTemplate)
├── Swagger / OpenAPI 3 文档生成
├── 多版本 API 管理
└── 自定义 HandlerMethodArgumentResolver / HandlerMethodReturnValueHandler如果需要某个分支更详细的逐层展开,或想看 Spring MVC 与 Spring Boot 整合的实例脑图,可以告诉我。
评论