当前位置: 首页 > news >正文

简述对 Spring MVC 的理解

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

Spring MVC组件

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

MultipartResolver 文件处理器

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

LocaleResolver 当前环境处理器

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

ThemeResolver 主题处理器 

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

HandlerMapping 处理器映射器

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

HandlerAdapter 处理器适配器

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

HandlerExceptionResolver 异常处理器

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

RequestToViewNameTranslator 视图名称翻译器

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

ViewResolvers 页面渲染处理器

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

FlashMapManager 参数传递管理器

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

核心组件

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

  • HandlerMapping
  • HandlerAdapter
  • ViewResolver

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

  1. HandlerMapping 回到调用 HandlerAdapter
  2. HandlerAdapter 会返回 ModelAndView
  3. ModelAndView 根据用户传入参数得到 ViewResolvers
  4. ViewResolvers 会将用户传入的参数封装为 View,交给引擎进行渲染。

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

 

http://www.lryc.cn/news/212648.html

相关文章:

  • Redis——哨兵模式与Zookeeper选举的异同点
  • 基于 Center 的 3D 目标检测和跟踪
  • 华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段
  • 数据结构 -- ArrayList与LinkedList的区别
  • 豪车托运为什么选小板
  • 【base64加密】js/ts的基础加密
  • 基于python的app程式开发
  • Spring Event学习
  • UE4 HLSL学习笔记
  • 报文的路由过程
  • 【CPP】类和对象
  • 【多线程面试题二十】、 如何实现互斥锁(mutex)?
  • hypercube背景设置为白色,绘制高光谱3D立方体
  • Visual Studio(VS)C++项目 管理第三方依赖库和目录设置
  • leetCode 2578. 最小和分割 + 排序 + 贪心 + 奇偶分组(构造最优解)
  • 自定义实现图片裁剪
  • 开发语言工具编程系统化教程入门和初级专辑课程上线
  • 【Truffle】二、自定义合约测试
  • 场景交易额超40亿,海尔智家三翼鸟开始收获
  • 众和策略可靠吗?股票扛杆怎么玩?
  • 解决连接Mysql出现ERROR 2013 (HY000): Lost connection to MySQL server at ‘waiting
  • Hadoop YARN功能介绍--资源管理、调度任务
  • 从AlexNet到chatGPT的演进过程
  • Unity如何实现bHaptics TrackSuit震动衣的SDK接入
  • 识别flink的反压源头
  • Spring是如何解决bean循环依赖的问题的
  • [移动通讯]【Carrier Aggregation-9】【 Radio Resource Control (RRC) Aspects】
  • 故障预测与健康管理(PHM)的由来以及当前面临的挑战
  • 【ChatGPT瀑布到水母】AI 在驱动软件研发的革新与实践
  • 【Django】项目模型