浅谈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完成最后对前端用户的响应。

知识总结

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

相关推荐
苹果酱05679 分钟前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱30 分钟前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑35 分钟前
苍穹外卖学习笔记(七)
java·windows·笔记·学习·mybatis
就这个java爽!40 分钟前
JAVA网络编程【基于TCP和UDP协议】超详细!!!
java·开发语言·网络·tcp/ip·udp·eclipse·idea
一叶飘零_sweeeet44 分钟前
为什么 Feign 要用 HTTP 而不是 RPC?
java·网络协议·http·spring cloud·rpc·feign
懒洋洋大魔王1 小时前
7.Java高级编程 多线程
java·开发语言·jvm
茶馆大橘1 小时前
【黑马点评】已解决java.lang.NullPointerException异常
java·开发语言
星辰@Sea1 小时前
服务注册中心对比及使用场景分析
java·云原生
马剑威(威哥爱编程)1 小时前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
bug菌¹1 小时前
滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解
java·spring cloud·微服务