【面试篇】SpringMVC工作流程「建议收藏」

【面试篇】SpringMVC工作流程「建议收藏」基础介绍SpringMVC主要是通过前端控制器controller中的注解来完成请求处理的。前段请求从web.xml中servlet的配置开始,根据servlet拦截的url-parttern,来进行请求转发控制。处理请求的流程首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在SpringWeb

大家好,又见面了,我是你们的朋友全栈君。

基础介绍

SpringMVC主要是通过前端控制器controller中的注解来完成请求处理的。
前段请求从web.xml中servlet的配置开始,根据servlet拦截的url-parttern,来进行请求转发控制。

处理请求的流程

  1. 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;

  2. 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);

  3. 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;

  4. 前端控制器再次收回控制权,将响应返回给用户,至此整个结束。

Spring MVC工作流程

在这里插入图片描述

工作流程描述如下:

  1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

  2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

  3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)

  4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
    HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中.

  5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

  6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

  7. ViewResolver 结合Model和View,来渲染视图

  8. 将渲染结果返回给客户端。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135365.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月5日 上午11:00
下一篇 2022年6月5日 上午11:16


相关推荐

  • 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码

    多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码前沿:最近太忙,这个系列已经很久没有更新了,本次就更新一个Deb大神的NSGA2的“升级版”算法NSGA3。因为multi-objectiveoptimization已经被做烂了,现在学者们都在做many-objectiveoptimization,也就是5个以上的目标函数(悄悄说一句,我觉得这个也要…

    2022年5月13日
    53
  • C语言大数运算-加法篇

    C语言大数运算-加法篇前言 本篇博客将分为 4 到 5 篇来和大家一块讨论大数的加减乘除 然后再将运算做成一个大数运算库 其中除法较为棘手 但如果作完前三个运算后就没有什么难度了 虽然大多主流的编程语言如 java c 都有大数运算库 可是 c 语言标准库并没有提供的大数运算 网上的 c 语言大数运算大多散而不周或过于复杂 所以本人决定写博客做一些简单的介绍 由于本人水平有限 如有错误或者 bug 请大家批评指正我会第一时间更正 开发

    2026年3月19日
    1
  • win10下nessus家庭版安装和简单使用「建议收藏」

    win10下nessus家庭版安装和简单使用「建议收藏」1.访问nessue官网下载:https://www.tenable.com/downloads/nessus?loginAttempted=true2.没有找到windows64位,这里下载了windows服务器版64位的3.双击下载的安装包进行安装,一直Next即可4.浏览器访问:http://localhost:8834即可打开Nessus(用谷歌可以直译成中文),如打开浏览器报错选择高级\进阶继续访问就行,点击‘ConnectviaSSL’5.

    2022年10月8日
    4
  • SQL Server中SET QUOTED_IDENTIFIER的使用

    SQL Server中SET QUOTED_IDENTIFIER的使用

    2022年3月5日
    50
  • c语言十进制转八进制程序_c语言八进制以什么开头

    c语言十进制转八进制程序_c语言八进制以什么开头二进制整数转八进制算法二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。八进制整数转二进制算法八进制整数转换为二进制整数时,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。案例二进制整数转八进制将二进制整数1110111100转换为八进制,转换过程如下:我们将二进制的1110111100转…

    2025年6月21日
    8
  • 单层感知器python_多层感知器背后的概念及Python实现

    单层感知器python_多层感知器背后的概念及Python实现机器学习正在成为数据科学中最具革命性的技术之一 它允许我们发现特征之间的非线性关系 并使用它来预测新的样本 机器学习中最简单的体例之一是多层感知器 在本文中 我将讨论多层感知器背后的概念 并向您展示如何在不使用流行的 scikit learn 库的情况下用 Python 构建自己的多层感知器 我觉得 在没有库的情况下从零开始构建多层感知器 可以让我们更深入地了解反向传播和前馈等想法是如何工作的 感知器

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号