谈谈对Spring MVC的理解

问题分析:

SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。

SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层进行职责解耦,从而把复杂的 Web 应用分成逻辑清晰的几个组件,在 Spring MVC 中有 9 大重要的组件。

下面详细说明一下这些组件的作用和初始化方法:

1、MultipartResolver 文件处理器

对应的初始化方法是 initMultipartResolver(context),用于处理上传请求。

2、LocaleResolver 当前环境处理器

其对应的初始化方法是 initLocaleResolver(context)。SpringMVC 主要有两个地方 用 到了 Locale: 一是 ViewResolver 视图解析的时候; 二是用到国际化资源或者 主题的时候。

3、ThemeResolver 主题处理器

其对应的初始化方法是 initThemeResolver(context), 用于解析主题。 也就是解 析样式、图片及它们所形成的显示效果的集合。

4、HandlerMapping 处理器映射器

其对应的初始化方法是 initHandlerMappings(context) , 在 SpringMVC 中会有很 多请求,每个请求都需要一个 Handler 处理。 HandlerMapping 的作用便是找到 请求相应的处理器 Handler 和 Interceptor。

5、HandlerAdapter 处理器适配器

其对应的初始化方法是 initHandlerAdapters(context) 。从名字上看,它就是一个 适配器。HandlerAdapters 要做的事情就是如何让固定的 Servlet 处理方法调用灵 活的 Handler 来进行处理

6、HandlerExceptionResolver 异常处理器

对应的初始化方法是 initHandlerExceptionResolvers(context)。它的主要作用是处 理其他组件产生的异常情况。

7、RequestToViewNameTranslator 视图名称翻译器

其对应的初始化方法是 initRequestToViewNameTranslator(context)。它的作用是 从请求中获取 ViewName。 有的 Handler 处理完后并没有设置 View,也没有设置 ViewName,这时就需要从 request 中获取,而 RequestToViewNameTranslator 就是为 request 提供获取 ViewName 的实现。

8、ViewResolvers 页面渲染处理器

其对应的初始化方法是 initViewResolvers(context) ,ViewResolvers 的主要作用 是将 String 类型的视图名和 Locale 解析为 View 类型的视图。

9、FlashMapManager 参数传递管理器

其对应的初始化方法是 initFlashMapManager(context)。在实际应用中,为了避 免 重复提交,我们可以在处理完 post 请求后重定向到另外一个 get 请求,这个 get 请求可以用来返回页面渲染需要的信息。 FlashMap 就是用于这种请求重定向 场景中的参数传递。


核心组件

在 Spring MVC 的九大组件中,涉及到请求处理响应的核心组件分别是:

  1. HandlerMapping、 2. HandlerAdapter、 3. ViewResolver

这张图表示这三个组件的整体执行流程,具体调用分为以下几个步骤:

1、HandlerMapping 回到调用 HandlerAdapter

2、HandlerAdapter 会返回 ModelAndView

3、ModelAndView 根据用户传入参数得到 ViewResolvers

4、ViewResolvers 会将用户传入的参数封装为 View,交给引擎进行渲染。

注意:有大家最熟悉的两个类:ModelAndView 和 View 类并不属于 Spring MVC 九 大组件之列。


相关推荐
猿长大人24 分钟前
C# | MediatR 入门指南:后端架构解耦
分布式·后端·架构·c#·.net
人间凡尔赛33 分钟前
Kubernetes十周年:从Cloud Native到AI Native的架构范式跃迁
后端·云原生·架构
老白干1 小时前
基于 Spring AOP 的操作日志记录:以 DeptController 增删接口为例
java·python·spring
John jj1 小时前
拆解 Telegram 群组频道收录市场:三类方案,一个可运行的评分模型,目前TG中文人工评分加模型评分机制——LetsTG收录“快速”、“无门槛”
大数据·后端·python·深度学习·搜索引擎·django·全文检索
Boop_wu1 小时前
SpringBoot 集成阿里云短信认证服务(个人)
spring boot·后端·阿里云
Gopher_HBo1 小时前
Engine 核心(gin.go)
后端
用户125758524361 小时前
为什么队列长度归零,不代表后台异步任务真的跑完了
redis·后端·go
晚安code2 小时前
Java编程规范避坑指南:阿里开发手册15条强制规约实战解析
java·后端
小蒜学长2 小时前
“守望自然”招募志愿者环保行动网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
程序猿老杨2 小时前
MQTT协议深度解析:从ESP32设备端到云端Broker的工程化实践
后端·物联网·芯片