浅谈SpringMvc的核心流程与组件

一、SpringMvc的核心流程

当发起请求时被前置的控制器(DispatcherServlet)拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
在这里插入图片描述
详细过程如下:
01、DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
02、HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
03、返回处理器执行链,根据url查找控制器,并且将解析后的信息传递给DispatcherServlet。
04、HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
05、执行handler找到具体的处理器。
06、Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
07、HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
08、DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
09、视图解析器将解析的逻辑视图名传给DispatcherServlet。
10、DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图,进行试图渲染。
11、将响应数据返回给客户端。

二、SpringMvc的核心组件

1.HandlerMapping

根据request找到相应的处理器。因为Handler(Controller)有两种形式,一种是基于类的Handler,另一种是基于Method的Handler(也就是我们常用的)。

2.HandlerAdapter

调用Handler的适配器。如果把Handler(Controller)当做工具的话,那么HandlerAdapter就相当于干活的工人。

3.HandlerExceptionResolver

对异常的处理。

4.ViewResolver

用来将String类型的视图名和Locale解析为View类型的视图。

5.RequestToViewNameTranslator

有的Handler(Controller)处理完后没有设置返回类型,比如是void方法,这是就需要从request中获取viewName。

6.LocaleResolver

从request中解析出Locale。Locale表示一个区域,比如zh-cn,对不同的区域的用户,显示不同的结果,这就是i18n(SpringMVC中有具体的拦截器LocaleChangeInterceptor)。

7.ThemeResolver

主题解析,这种类似于我们手机更换主题,不同的UI,css等。

8.MultipartResolver

处理上传请求,将普通的request封装成MultipartHttpServletRequest。

9.FlashMapManager

用于管理FlashMap,FlashMap用于在redirect重定向中传递参数。

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

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

相关文章

ubuntu24下python3.9安装pytorch

安装gpu版pytorch 1.去官网查找命令 https://pytorch.org/get-started/previous-versions/由于我们安装的是CUDA12.1,所以我们选择12.1的进行安装 安装完成之后通过下面代码进行测试 >>> import torch >>> print(torch.cuda.is_available()) T…

Linux入门攻坚——30、sudo、vsftpd

su:Switch User,即切换用户 su [-l user] -c ‘COMMAND’ 如:su -l root -c ‘COMMAND’ 如果没有指定-l user,则默认是root sudo:可以让某个用户不需要拥有管理员的密码,而可以执行管理员的权限。 需…

raw.githubusercontent.com未能解析” 解决方案

1.操作场景 通过windows11 powershell 下载依赖包 2.报错信息如下 irm : 未能解析此远程名称: raw.githubusercontent.com 所在位置 行:1 字符: 27 & ([scriptblock]::Create((irm "https://win11debloat.raphi.re/"))) ~~~~~~~~~…

2 Python开发工具:PyCharm的安装和使用

本文是 Python 系列教程第 2 篇,完整系列请查看 Python 专栏。 1 安装 官网下载地址https://www.jetbrains.com.cn/pycharm/,文件比较大(约861MB)请耐心等待 双击exe安装 安装成功后会有一个30天的试用期。。。本来想放鸡火教程&…

Mybatis中的缓存

一,为什么要使用缓存 1,缓存的作用 缓存(cache)的作用是为了减去数据库的压力,提高查询性能。 缓存实现的原理: 从数据库中查询出来的对象在使用完后不要销毁,而是存储在内存(缓存)…

智能指针(RAII)

智能指针(RAII) 一、内存泄漏1、介绍2、原因3、泄漏的内存类型分类 二、RAII1、介绍2、基本思想3、优点4、实现方式 三、unique_ptr1、介绍2、主要特性3、注意事项4、unique_ptr类5、示例代码6、运行结果7、简单实现 四、shared_ptr1、介绍2、主要特点3、…

单自由度无阻尼系统振动分析

特别感谢:https://www.bilibili.com/video/BV114411y7ab/?p6&spm_id_frompageDriver&vd_sourceebe07816bf845358030fc92d23830b29 本文图片该系列视频 tips:关于特征方程与振动方程: 特征方程有助于我们理解和确定系统的固有频率和模…

C语言基础(二十)

链表是一种常见的数据结构,通常用来存储一系列元素,每个元素由一个节点来表示。在链表中,每个节点包含两部分:数据元素本身和指向下一个节点的指针。这种结构使得链表中的元素在内存中不是连续存储的,而是通过指针连接…

随笔九、SARADC按键程控测试

目录 1. 泰山派环境 2. 按键3分析 3. 编程测试 1. 泰山派环境 泰山派开发板上有3个按键 按键1是电源按键PWRON,实测按几下会导致开发板重启 按键2是复位按键RESET,按下立马复位重启 按键3是升级按键RECOVER,配合RESET按键可以使开发板进…

Unity编辑器扩展之Scene视图扩展

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity编辑器扩展之Scene视图扩展 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! …

使用cJSON进行JSON文件读写

推荐cJSON下载地址: Git地址:https://github.com/arnoldlu/cJSON 可以尝试:sudo apt-get install libcjson-dev,笔者未使用该方式。 百度AI搜索程序,供参考,部分函数名称应以cJSON模块内定义为主 json文…

游泳耳机哪个牌子的好?四大口碑精品游泳耳机专业推荐!

在追求健康生活的同时,游泳成为了许多人选择的锻炼方式。它不仅能够帮助人们塑造身材,还能有效缓解压力。而在游泳过程中,音乐的陪伴无疑能让人更加享受这段时光。因此,一款适合游泳时使用的耳机,成为了游泳爱好者们不…

CSS学习笔记(01)flex布局

1、首先对父元素设置disiplay:felx, 其有6个属性 fex-direction:设置主轴的方向 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-content:设置侧轴上的子元素的排列方式(多行) align-items:设置侧轴上的子元素排列方式…

前端性能优化:提升网站加载速度的五个关键技巧

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端性能优化:提升网站加载速度的五个关键技巧1. 引言2. 前端性能优化的五个关键技巧2.1 减少HTTP请求技巧说明实现示例 2.2 启用浏览器缓存技巧说明实现示例 2.3 使用内容分发网络(CDN)技巧说明…

8.27FLEX,BISON

RC ParseStage::handle_request(SQLStageEvent *sql_event) 这个意思是返回类型是RC,然后用到的函数来自 ParseStage,::就是用来标识作用域的,函数名是handle_request,是ParseStage里的函数 FLEX BISON

一个浏览器插件如何月入12万美元:深入了解 GoFullPage

一个浏览器插件如何月入12万美元:深入了解 GoFullPage 前言 GoFullPage 这个插件的诞生,源于其创作者 Peter Coles 的一个简单想法:解决一个他在日常开发工作中遇到的痛点。早在 2012 年,Coles 发现许多现有的网页截图工具无法完…

x264 编码器 AArch64汇编系列:zigzag 扫描相关汇编函数

zigzag 在x264_zigzag_init函数中初始化具体的 zigzag 实现函数: 以scan_4x4为例 c 语言实现 4x4 变换块扫描:zigzag_scan_4x4_frame。#define ZIGZAG4_FRAME\ZIGDC( 0,

ssh远程连接服务

1、概述 一种安全访问远程服务器的协议,远程管理工具,通过加密方式管理连接,使服务器更安全。 2、加密算法 对称加密 发送密码前将密码数据加密成密文,然后发送出去 接收方收到密文后,使用同一个密钥将密文解密。…

windows安全中心永久卸载工具分享

使用方法 博客:h0ck1r丶羽~从零到一 卸载工具下载链接: 夸克网盘分享 一路回车,选项Y即可 耐心等待几秒种,自动重启 此时打开windows安全中心,已经完全不能使用了,响应的杀毒功能也关了 往期推荐 【渗透测…

【STM32】RTT-Studio中HAL库开发教程五:UART的DMA应用

文章目录 一、简介1.关于DMA2.DMA使用场景3.DMA控制结构4.IDLE空闲中断5.实现方法 二、RTT配置三、串口收发流程四、完整代码五、测试验证 一、简介 1.关于DMA DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件…