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

简述你对 Spring MVC 的理解

SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型的轻量级 Web
框架。
采用了 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 九大组件之列。

相关文章:

  • GRU门控循环单元
  • android用java设置button之间的间距 笔记250311
  • 高效微调算法 (Parameter-Efficient Fine-tuning, PEFT) 详解
  • 深度学习与大模型-张量
  • 一键换肤的Qt-Advanced-Stylesheets
  • Linux账号和权限管理
  • 【Spring】AOP在实际项目中的运用
  • 程序化广告行业(6/89):现状、未来与核心要点剖析
  • 使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题
  • 支持selenium的chrome driver更新到134.0.6998.88
  • SpringBoot开发——整合SpringReport开源报表工具
  • 如何在 React 中使用 CSS-in-JS?
  • 【Go每日一练】构建一个简单的用户信息管理系统
  • Smart contract -- 自毁合约
  • 【动手实验】TCP 连接的建立与关闭抓包分析
  • 【Pandas】pandas Series asfreq
  • 【Axure视频教程】中继器表格——控制开关按钮
  • spark常见的submit参数
  • HeidiSQL 12.0 64位便携版使用指南:从下载到数据库管理的完整步骤
  • 个人学习编程(3-11) 刷题
  • 理财经理泄露客户信息案进展:湖南省检受理申诉,证监会交由地方监管局办理
  • 复旦大学文科杰出教授裘锡圭逝世,享年90岁
  • 现场丨“影像上海”启幕:串联摄影、电影与当代艺术
  • 美政府被曝下令加强对格陵兰岛间谍活动,丹麦将召见美代办
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问
  • 新消费观察| 零售品牌 “走出去” ,如何开辟“新蓝海”?