SpringMVC的执行流程

执行流程图

相关术语介绍

DispatcherServlet

DispatcherServlet 是一个重要的前端控制器(Front Controller),用于接收所有的客户端请求并将其分发给相应的处理器(Handler)。DispatcherServlet 是整个 Spring MVC 框架的核心,负责协调整个请求处理流程。

Handler

Handler 即处理器,它是处理请求的核心组件,通常由 Controller 实现类来充当。处理器可以调用 Service 层、Mapper层等其他组件来获取数据和执行业务逻辑,最终返回一个 ModelAndView 对象。

HandlerMapping

HandlerMapping 用于映射请求 URL 到对应的处理器(Handler)。在 SpringMVC 中,常用的 HandlerMapping 实现包括 BeanNameUrlHandlerMapping、RequestMappingHandlerMapping 等。

HandlerAdapter

HandlerAdapter 用于执行处理器(Handler),它将处理器的执行与前后端的交互分离开来。在 SpringMVC 中,常用的 HandlerAdapter 实现包括 RequestMappingHandlerAdapter、SimpleControllerHandlerAdapter 等。

ModelAndView

ModelAndView 是处理器返回的结果对象,它包含了视图名和需要在视图中渲染的模型数据。

ViewResolver

ViewResolver 用于使用模型数据将视图名解析为对应的视图对象(View)。在 SpringMVC 中,常用的 ViewResolver 实现包括 InternalResourceViewResolver(用于解析 JSP 视图)、FreeMarkerViewResolver(用于解析 FreeMarker 模板)等。

View

View 即视图,它用于渲染模型数据,最终生成响应内容。在 SpringMVC 中,常用的 View 实现包括 JstlView(用于渲染 JSP 视图)、FreeMarkerView(用于渲染 FreeMarker 模板)等。

文字描述

1.当用户通过浏览器发送请求时,这个请求会被Web服务器(如Tomacat)接收,并交给DispatcherServlet处理。

2.DispatcherServlet 会将请求 URL 传递给 HandlerMapping 映射器进行处理,并根据请求 URL 匹配对应的 HandlerExecutionChain 处理器执行链。HandlerExecutionChain 包含了一个或多个 Interceptor 拦截器和一个 Handler 处理器,拦截器可以在请求处理前后进行一些额外的处理,而 Handler 则负责具体的业务处理。

3.将HandlerExecutionChain返回给DispatcherServlet,DispatcherServlet会根据HandlerExecutionChain中拦截器的返回情况来判断是否要进行下一步,如果拦截器返回为false,DispatcherServlet就直接返回相应的错误信息给客户端,如果为true,表示拦截器校验通过,DispatcherServlet进行下一步转发

4.DispatcherServlet请求HandlerAdapter执行Handler,因为在 HandlerMappeing 确定了需要执行的 Handler 之后,HandlerAdapter 就负责根据具体的 Handler 类型,调用相应的方法进行处理。不同的 Handler 处理器类型通常需要不同的处理方式,因此需要不同的 HandlerAdapter 适配器实现来进行适配。

5.在 HandlerAdapter 执行完 Handler 之后,会返回DispatcherServlet一个ModelAndView对象,其中包含了处理结果的数据以及要跳转的视图名称。

6.DispatcherServlet将ModelAndView对象传递给ViewResolver进行解析。

7.ViewResolver将ModelAndView 对象解析为对应的 View 视图对象,返回给DispatcherServlet

8.DispatcherServlet将View对象渲染之后,返回给客户端。

相关推荐
zhz52141 天前
Spring Boot + Redis 缓存性能优化实战:从5秒到毫秒级的性能提升
java·spring boot·redis·缓存·vue
lifallen1 天前
Hadoop MapOutputBuffer:Map高性能核心揭秘
java·大数据·数据结构·hadoop·算法·apache
E_ICEBLUE1 天前
如何使用 OCR 提取扫描件 PDF 的文本(Python 实现)
java·数据库·pdf
军训猫猫头1 天前
12.NModbus4在C#上的部署与使用 C#例子 WPF例子
开发语言·c#·wpf
一 乐1 天前
美食分享|基于Springboot和vue的地方美食分享网站系统设计与实现(源码+数据库+文档)
java·vue.js·spring boot·论文·毕设·美食·地方美食分享网站系统
MuMuMu#1 天前
Spring Cloud Gateway基础复习
java·运维·学习
波波烤鸭1 天前
深入理解 Gateway 网关:原理、源码解析与最佳实践
java·spring·gateway
Eiceblue1 天前
使用 C# 设置 Excel 单元格格式
开发语言·后端·c#·.net·excel
FenceRain1 天前
EasyExcel 实现国际化导入导出
java·spring boot·easyexcel
Leslie_Lei1 天前
【Eclipse】eclipse打开git拉取的项目
java·git·eclipse