请简述你对SpringMVC的理解

SpringMVC是一种基于Java语言开发,实现了WebMVC设计模式,请求驱动类型
的轻量级Web框架。
采用了MVC架构模式的思想,通过把Model,View,Controller分离,将Web层进
行职责解耦,从而把复杂的Web应用分成逻辑清晰的几个组件,在SpringMVC中有
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就是用于这种请求重定向场景中的参数传递。
在SpringMVC的九大组件中,涉及到请求处理响应的核心组件分别是:
1.HandlerMapping、
2.HandlerAdapter、
3.ViewResolver
这张图表示这三个组件的整体执行流程,具体调用分为以下几个步骤:
1、HandlerMapping回到调用HandlerAdapter
2、HandlerAdapter会返回ModelAndView
3、ModelAndView根据用户传入参数得到ViewResolvers
4、ViewResolvers会将用户传入的参数封装为View,交给引擎进行渲染。
注意:有大家最熟悉的两个类:ModelAndView和View类并不属于SpringMVC九
大组件之列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea打开项目白屏

解决方法: 右键“最大化” idea打开项目白板解决方案_idea打开白屏-CSDN博客 IDEA 2022 CPU占用100%的问题及解决方法_java_脚本之家

STM32控制数码管从0显示到99

首先 先画电路图吧!打开proteus,导入相关器件,绘制电路图。如下:(记得要保存啊!发现模拟一遍程序就自动退出了,有bug,我是解决不了,所以就是要及时保存,自己重…

计算机组成原理(10)----微程序控制器

目录 1.微程序控制器的设计思想 2.微指令的基本格式 3.微程序控制器的基本结构 (1)控制存储器CM (2)CMAR (3)地址译码 (4)CMDR (5)微地址形成部件 &…

31.云原生Istio可观测性之官网Bookinfo应用实战演示

云原生专栏大纲 文章目录 可观测性kiali介绍Overview(概观)Application(应用维度)workloads(负载维度)Services(服务维度)Istio Config(配置维度) Kiali部署…

音频声波的主观感受

一、响度 声压是“客观”的,响度是“主观”的。 响度又称音量。人耳感受到的声音强弱,它是人对声音大小的一个主观感觉量。响度的大小决定于声音接收处的波幅,就同一声源来说,波幅传播的愈远,响度愈小…

React18原理: React核心对象之Update、UpdateQueue、Hook、Task对象

Update 与 UpdateQueue 对象 1 ) 概述 在fiber对象中有一个属性 fiber.updateQueue是一个链式队列(即使用链表实现的队列存储结构)是和页面更新有关的 2 )Update对象相关的数据结构 // https://github.com/facebook/react/blob/v18.2.0/pa…

【Nginx】Nginx配置反向代理 和 https

nginx.conf配置 进入linux /etc/nginx/ 打开nginx.conf 进行以下配置 http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {#监听443端口listen 443 ssl;#你的域名server_name huiblog.top;#ssl证书的pe…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活动文件‘ terminated with exit code -1

更改tasks.json文件里面的type为shell 选择g 选择g,然后点回到text.c,按下F5. 得到结果。 文中内容参考: 从零开始手把手教你配置属于你的VS Code_哔哩哔哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

【EasyV】QGIS转换至EasyV

QGIS转换至EasyV 第一步:导入QGIS第二步 坐标系转换第三步 集合修正第四步 重命名字段第五步 导出WGS geojson坐标第六步 导入EasyV 第一步:导入QGIS 第二步 坐标系转换 第三步 集合修正 第四步 重命名字段 第五步 导出WGS geojson坐标 第六步 导入EasyV…

【es6】模版字面量/模版字符串,标签函数/String.raw()静态方法

模版字符串经常用,但是这个标签函数的功能你肯定不知道,请看官网文档 看完你需要知道 可以自定义标签函数String.raw 的用法 唯一一个内置的模版字符串标签函数第一个参数具有 raw 属性的对象,值时一个类数组字符串对象模版字面量的缓存机制…

【vue vue-seamless-scroll】解决vue-seamless-scroll鼠标悬浮才滚动或者只滚动一次就失效的问题

解决问题:使用vue-seamless-scroll发现只有鼠标悬浮上去才滚动,而且滚动一次停止了 目标效果: 解决方案: 最后发现是因为数据需要在页面挂载好就赋值,否则页面在加载完成后,数据无法自动滚动。但因为数据…

c++:蓝桥杯的基础算法2(构造,模拟)+练习巩固

目录 构造 构造的基础概念: 模拟 练习1:扫雷 练习2:灌溉 练习3:回文日期 构造 构造的基础概念: 构造算法是一种用于解决特定问题的算法设计方法。在C语言中,构造算法通常涉及到创建一个函数或类来实…

ARM服务器上部署zookeeper集群

由于ARM服务器上部署zookeeper集群,会存在加载不到主类问题,现在把遇到的问题进行总结下,问题如下: [rootnode206 apache-zookeeper-3.5.10]# bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /data1/software/apache-zookeeper-3.5.10/bin/../conf/…

四、Burpsuite工具之proxy模块详解-intercept功能

前言: 过了一个年,感觉好久都没有更新了,今天就从burpsuite的更新开始吧。 前面已经说过了burpsuite的安装和proxy代理的配置,今天说一下proxy模块中非常有用的intercept功能。 intercept功能介绍: intercept是拦截…

Spring之AOP源码解析(中)

前言 在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析 演示 作用 ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,…

算法提升——LeetCode第385场周赛总结

题目 统计前后缀下标对 I 给你一个下标从0开始的字符串数组words。 定义一个布尔函数isPrefixAndSuffix,它接受两个字符串参数str1和str2: 当str1同时是str2的前缀(prefix)和后缀(suffix)时&#xff0c…

APP的UI自动化demo(appium+java)

文章目录 appium连接手机java代码实现-第一版第二版-接入testng和隐式等待显示等待 appium连接手机 准备工作 1、查看连接手机模拟器是否连接成功,获取设备名称 执行命令:adb devices 2、查看android内核版本号—>paltformVersion 执行命令&#xf…

MQL语言实现单元测试

文章目录 一、单元测试是什么二、单元测试的过程三、为什么需要单元测试四、MQL测试代码实现 一、单元测试是什么 单元测试是对软件中最小可测单元(如类或函数)进行独立验证和检查的过程。它是由开发工程师完成的,旨在确保每个单元的功能和逻…

Postman接口关联实战解析

在使用postman做接口测试时,有时候后面的接口需要获取前面接口的某一个返回值做为请求参数,这时就可以使用关联。 如从A接口提取出a字段的值,供B接口的b字段使用。 一个接口的返回报文如下: {"retCode": "0&quo…