浅谈SpringMVC的请求流程

目录标题

浅谈SpringMVC的请求流程

对于SpringMVC而言重点是了解它的底层运行逻辑,从而可以根据其逻辑来进行实际业务的操作或者是利用原理增强业务的功能性,最终达到项目预期效果。

SpringMVC的介绍

SpringMVC是基于JavaWeb的一种应用程序的框架,他是Spring家族的一个成员。SpringMVC架构采用MVC(Model--View--Controller)的设计模式,旨在为构建松散耦合和灵活可扩展的Web应用程序提供支持。
特点如下:
1.松耦合以及模块化:SpringMVC将应用程序分为控制器(Controller)、视图(View)、模型(Model)。三者各司其职,实现了逻辑的分离与模块化开发。
2.灵活地处理请求:通过使用SpringMVC下提供的注解或者是在对应的配置文件中进行配置可以灵活地定义URL与控制器的映射关系,使得请求能够被响应的控制器进行处理。
3.强大的数据绑定与验证:SpringMVC提供了强大的数据绑定以及验证机制,可以将请求参数自动绑定到我们的Java对象之中,并且可以对对象进行验证。
4.视图解析与渲染:SpringMVC支持各种视图技术,例如JSP、Thymeleaf等。
5.请求拦截与过滤:通过使用拦截器与过滤器可以使得开发者在开发阶段对请求进行逻辑处理等。
6.容易集成其他的技术:SpringMVC框架可以与其他的框架相互配合,比如常常提起的SSM框架体系就有它的参与。以及SpringBoot等
7.强大的测试支持:SpringMVC提供的测试框架,使得开发者进行单元测试与集成测试

SpringMVC的逻辑概念运行图解

从上图可以看出这是一个基本的SpringMVC的运作逻辑结构图,可以看出当一个请求从浏览器发出后会经SpringMVC中的多个组件解析并处理。
组件介绍:

1.DispatcherServlet:这是一个中央处理器(也称前端控制器),用于拦截所有的前端请求进行处理,对Servlert技术熟悉的人都清楚在很早以前的JavaWeb的开发中我们前端发送来的请求与后端的Servlet是一一对应的,也就是说有多少个请求就会有多少个Servlet来进行处理,但是在SpringMVC中只会有一个Servlet那就是DispatcherServelt来进行处理,很明显使用SpringMVC优化了以前的开发技术。

2.HandlerMapping(映射处理器):主要用于解析请求中的url中读取需要找到的控制器名称,方便后期寻找控制器进行响应。
重点内容:SpringMVC的 运作过程分析:

①前端发送请求被前端控制器DispatcherServlet拦截

②DispatcherServlet调用映射处理器HandlerMapping对请求的URL进行解析处理,解析完过后将结果反馈给DispatcherServlet。

③DispatcherServlet调动适配处理器HandlerAdapter处理调用链(从控制器处理的请求反馈结果)

④DispatcherServlet基于反射技术通过适配器的设计模式完成从控制器(controller)的调用处理用户请求。

⑤HandlerAdapter将控制器(controller)返回的数据封装成ModelAndView对象响应给前端控制器DispatcherServlet。(值的一提的是,控制器的返回数据有两种类型,一种是String类型另外一种就是ModelAndView类型的数据,但是不管返回的数据结果是String还是ModelAndView最终的结果都会被封装成ModelAndView进行返回)。

⑥DispatcherServlet调用视图解析器ViewResolver对返回的结果ModelAndView进行解析处理,将解析结果处理成视图资源以及数据两部分,之后再次响应给DispatcherServlet。

⑦DispatcherServlet调用SpringMVC中的一个视图组件(View)将数据进行渲染,最后将渲染的结果(静态视图)响应给DispatcherServlet。

⑧最后再次由DispatcherServlet完成最后对前端用户的响应。

知识总结

只要学不死就往死里学,记得点赞。

相关推荐
robin_suli19 分钟前
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
java·开发语言·多线程·哈希表
NiNg_1_23424 分钟前
Java中的多线程
java·开发语言
不爱说话郭德纲29 分钟前
Stylus、Less 和 Sass 的使用与区别
前端·css·面试·less·sass·stylus
丁总学Java30 分钟前
nohup java -jar supporterSys.jar --spring.profiles.active=prod &
java·spring·jar
呆呆小雅32 分钟前
C# 结构体
android·java·c#
谢尔登33 分钟前
使用 Maven 创建 jar / war 项目
java·maven·jar
理想不理想v1 小时前
前端开发工程师需要学什么?
java·前端·vue.js·webpack·node.js
赶路人儿1 小时前
IntelliJ IDEA配置(mac版本)
java·macos·intellij-idea
jjw_zyfx1 小时前
docker 的各种操作
java·docker·eureka
生财1 小时前
获取字 short WORD 上指定的位是否有效
java·服务器·c#