Spring MVC 知识地图
侧边栏壁纸
  • 累计撰写 36 篇文章
  • 累计收到 1 条评论

Spring MVC 知识地图

ASN__
2026-06-10 / 0 评论 / 3 阅读 / 正在检测是否收录...

🌐 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 整合的实例脑图,可以告诉我。

0

评论

博主关闭了所有页面的评论