当前位置: 首页 > news >正文

高频面试题:SpringMVC的执行流程

SpringMVC一直以来都是面试中的重点,尽管随着近年来springboot和微服务的广泛流行,关于对springMVC的考察比重略有下降,但依然是面试中的重点,也需要我们对其有一个比较清楚和全面的认识。

如果将java的发展史中重要的组件进行排位,springMVC一定可以进前5,它的很多设计意向依然沿用至今。

Spring MVC是一种基于Java的Web框架,它采用了MVC(Model-View-Controller)设计模式,通过把Model,View,Controller分离,将Web层进行职责解耦,把复杂的Web应用分成逻辑清晰的几部分,并大大简化开发。

SpringMVC中有几个核心内容:

1>前端控制器DispatcherServlet,主要接收用户请求和响应请求,

2>应用控制器包括:处理器映射器(Handler Mapping)和视图解析器(View Resolver),处理器映射器负责处理器的管理,视图解析器负责视图的管理.

3>页面控制器,负责为controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现。

其执行流程主要包括以下几个步骤:

图片

l、客户端发送请求到DispatcherServlet

当客户端在浏览器中输入URL并发送请求时

2、DispatcherServlet会将请求的URL传递给HandlerMapping

HandlerMapping会根据URL找到相应的处理器(即Controller)

3、HandlerMapping会返回找到的处理器及其相关拦截器给DispatcherServlet

DispatcherServlet会将它们保存在处理器执行链中

里面会包含多个拦截器的信息,以及需要查找的处理器handler的信息

4、DispatcherServlet会将处理器对象传递给HandlerAdapter

HandlerAdapter会根据处理器类型调用相应的方法

5、HandlerAdapter会调用处理器(即Controller)的方法进行业务处理

并将处理结果封装成ModelAndView对象

6、处理器会将处理结果封装成ModelAndView对象并将其返回给HandlerAdapter对象

7、HandlerAdapter会将ModelAndView对象返回给DispatcherServlet,DispatcherServlet会将其保存起来。

8、DispatcherServlet会将ModelAndView中的viewName传递给ViewResolver

ViewResolver会根据viewName查找具体的视图对象(即View对象)

9、ViewResolver会将找到的视图对象返回给DispatcherServlet

DispatcherServlet会将其保存起来

10、DispatcherServlet会调用View的渲染方法

将ModelAndView中的数据渲染到具体的响应内容中

11、DispatcherServlet会将渲染后的响应内容返回给客户端完成整个请求处理过程

在执行过程中Spring MVC还提供了很多其他的组件

例如数据绑定、类型转换、数据校验、异常处理等

包括XML配置、Java配置和注解配置等

这些都可以根据具体的需求进行灵活配置。

以上为全部内容。

更多技术内容,欢迎扫码关注10W+技术社区。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 金9银10跳槽季,最新自动化测试面试题合集
  • MySQL死锁问题解决方案
  • 一本读懂数据库发展史的书
  • 如何在大三大四阶段,获得GIS开发能力和实习经验?
  • UI设计评审
  • Telegram创始人帕维尔·杜罗夫:从俄罗斯到迪拜的自由之路
  • 安全升级:Docker部署Redis,启用密码验证
  • 短视频流量|基于SprinBoot+vue的短视频流量数据分析系统(源码+数据库+文档)
  • 大模型日报|7 篇必读的大模型论文
  • docker实战演练
  • HarmonyOS 鸿蒙获取微信授权和持续获取位置信息
  • Android 系统连接WIFI显示网络连接受限分析处理
  • CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务
  • kafka的12个重要概念
  • Spatial Structure Constraints for Weakly SupervisedSemantic Segmentation
  • [nginx文档翻译系列] 控制nginx
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 78. Subsets
  • C学习-枚举(九)
  • go语言学习初探(一)
  • Java小白进阶笔记(3)-初级面向对象
  • Python - 闭包Closure
  • vue-router 实现分析
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 运行时添加log4j2的appender
  • MPAndroidChart 教程:Y轴 YAxis
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 如何用纯 CSS 创作一个货车 loader
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转载)从 Java 代码到 Java 堆
  • **CI中自动类加载的用法总结
  • .net 后台导出excel ,word
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET大文件上传知识整理
  • @WebServiceClient注解,wsdlLocation 可配置
  • [04] Android逐帧动画(一)
  • [Algorithm][动态规划][路径问题][不同路径][不同路径Ⅱ][珠宝的最高价值]详细讲解
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [codeforces] 25E Test || hash
  • [DevOps云实践] 彻底删除AWS云资源
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [Git][分支设计规范]详细讲解
  • [IE技巧] IE 中打开Office文件的设置
  • [ios]准备好app后使用xcode发布ios操作