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对象渲染之后,返回给客户端。

相关推荐
nanxun88619 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程