浅谈SpringMVC的请求流程

目录标题

  • 浅谈SpringMVC的请求流程
    • SpringMVC的介绍
    • 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的运作逻辑结构图,可以看出当一个请求从浏览器发出后会经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完成最后对前端用户的响应。

知识总结

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

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

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

相关文章

FPGA:卷积编码及维特比译码仿真

FPGA:卷积编码及维特比译码仿真 本篇记录一下在FPGA中完成卷积编码和维特比译码的过程,通过代码解释编码的过程和译码的过程,便于理解,同时也方便移植到其他工程中。 1. 准备工作 卷积编译码IP核—convolutionIP核和viterbiIP核…

以太网协议

以太网 以太网协议格式🎨目的地址,源地址mac地址格式 以太网协议格式🎨 目的地址,源地址 此处的地址,叫做mac地址(物理地址),长度是6个字节 mac地址的作用也是用来区分不同的主机 IP地址的长度是4字节 IP地址负责网络层(整体)转发,mac地址负责数据链路层…

CHATGPT中国免费网页版有哪些-CHATGPT中文版网页

CHATGPT中国免费网页版,一个强大的人工智能聊天机器人。如果你曾经感到困惑、寻求答案,或者需要一些灵感,那么CHATGPT国内网页版可能会成为你的好朋友。 CHATGPT国内免费网页版:你的多面“好朋友” 随着人工智能技术的不断发展&a…

消息队列 记录

https://www.bilibili.com/video/BV1ia411k7oo/?p3&vd_source088e0f60c1207e991fcf231a9f1a0274

关于Godot动态生成节点的细节

var dy_btn Button.new()add_child(dy_btn)print(get_child(0).name) 此时获取的名词会带有动态类型,如果这个时候想通过特定的节点名词来获取节点是不行的 此时需要补充类似 dy_btn.name "a" 的代码,然后就能按照节点名词获取节点了

从零开始—【Mac系统】MacOS配置Java环境变量

系统环境说明 Apple M1 macOS Ventura 版本13.5.2 1.下载JDK安装包 Oracle官网下载地址 JDK下载【注:推荐下载JDK8 Oracle官网JDK8下载】 关于JDK、JRE、JVM的关系说明 JDK(Java Development Kit,Java开发工具包) ,是整个JAVA的核心&#…

一篇文章带你走进测试工程师的世界

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】 一、 测试工程师: 1、 国内定位和发展前景: 测试工程师,软件质量的把关者,工作起点高&…

浅谈继承之默认成员函数

相信学习过C的哥们都知道的是,C三座大山,分别是类与对象,继承,多态,也是面向对象的三大特性。所以继承是我们学习C所不得不面对的坎,但是,我想说的是,你真的懂继承了吗?除…

毫米波雷达 TI IWR1443 在 ROS 中进行 octomap 建图

个人实验记录 /mmwave_ti_ros/ros_driver/src/ti_mmwave_rospkg/launch/1443_multi_3d_0.launch <launch><!-- Input arguments --><arg name"device" value"1443" doc"TI mmWave sensor device type [1443, 1642]"/><arg…

为您的SSH提提速

SSH是运维和开发人员接触比较多的工具&#xff0c;一般用SSH来连接远程服务器&#xff0c;这个是我的一些免费客户和企业客户经常使用的场景&#xff0c;当然SSH除了远程连接之外&#xff0c;还有很多额外的用途&#xff0c;比如SSH本身是具备代理功能的&#xff0c;我们也有一…

FastChat 大模型部署推理;Baichuan2-13B-Chat测试、chatglm2-6b测试

参考&#xff1a; https://github.com/lm-sys/FastChat https://blog.csdn.net/qq128252/article/details/132759107 ##安装 pip3 install "fschat[model_worker,webui]"1、chatglm2-6b测试 python3 -m fastchat.serve.cli --model-path ./chatglm2-6b --num-gpus …