【SpringMVC 笔记】6、请求处理的大致流程

SpringMVC请求处理流程:DispatcherServlet工作原理 DispatcherServlet是SpringMVC框架的核心,它扮演着前端控制器(Front Controller)的角色,是整个请求处理流程的调度中心。作为一个标准的Servlet,DispatcherServlet继承自HttpServlet,遵循Servlet生命周期,在Web容器启动时初始化并加载SpringMVC相关配置。它的主要职责是接收HTTP请求,并根据请求信息将其分发给相应的处理器(Handler),随后协调视图解析器(ViewResolver)渲染结果,最终返回响应给客户端。 阅读详情

请求处理的大致流程

1)所有请求过来,DispatcherServlet收到请求
2)调用doDispatch()方法进行处理
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
    HttpServletRequest processedRequest = request;
    HandlerExecutionChain mappedHandler = null;
    boolean multipartRequestParsed = false;
    WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);

    try {
        ModelAndView mv = null;
        Object dispatchException = null;

        try {
            //1.首先判断当前请求是否是文件上传请求
            processedRequest = this.checkMultipart(request);
            multipartRequestParsed = processedRequest != request;

            //2.getHandler()获取能够处理该请求的前端控制器
   /*ioc容器启动时创建每个组件对象时
     会扫描每个Cintroller对象的RequestMapping收集其可以处理的请求,并将这些信息保存在HandlerMapping的HandlerMap中
    当请求过来时查看哪个HandlerMap有对应的处理请求,则返回该处理请求所在的前端控制器

   */
            mappedHandler = this.getHandler(processedRequest);

            //3.如果没找到合适的处理器就404,或者抛异常
            if (mappedHandler == null) {
                this.noHandlerFound(processedRequest, response);
                return;
            }

            //4、getHandlerAdapter()拿到能够执行这个类的所有方法的适配器(反射工具AnnotationMethodHandlerAdapter能解析注解方法的适配器)
            HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());

            //5、获取请求方式:POST、GET等
            String method = request.getMethod();
            boolean isGet = "GET".equals(method);

            if (isGet || "HEAD".equals(method)) {
                long lastModified = ha.getLastModified(request, mappedHandler.getHandler());
                if (this.logger.isDebugEnabled()) {
                    this.logger.debug("Last-Modified value for [" + getRequestUri(request) + "] is: " + lastModified);
                }

                if ((new ServletWebRequest(request, response)).checkNotModified(lastModified) && isGet) {
                    return;
                }
            }

            if (!mappedHandler.applyPreHandle(processedRequest, response)) {
                return;
            }

            //6.用适配器执行目标方法,方法返回值作为视图名,设置保存到ModelAndView中
              //目标方法无论怎么写,最终适配器执行完成后都会将执行完成的结果封装成ModelAndView
            mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
            if (asyncManager.isConcurrentHandlingStarted()) {
                return;
            }

            this.applyDefaultViewName(processedRequest, mv);
            mappedHandler.applyPostHandle(processedRequest, response, mv);
        } catch (Exception var20) {
            dispatchException = var20;
        } catch (Throwable var21) {
            dispatchException = new NestedServletException("Handler dispatch failed", var21);
        }

        //7.根据方法最终执行完后的封装的ModelAndView:转发到对应页面,而且ModelAndView中的数据可以在请求域中获取
        this.processDispatchResult(processedRequest, response, mappedHandler, mv, (Exception)dispatchException);
    } catch (Exception var22) {
        this.triggerAfterCompletion(processedRequest, response, mappedHandler, var22);
    } catch (Throwable var23) {
        this.triggerAfterCompletion(processedRequest, response, mappedHandler, new NestedServletException("Handler processing failed", var23));
    } finally {
        if (asyncManager.isConcurrentHandlingStarted()) {
            if (mappedHandler != null) {
                mappedHandler.applyAfterConcurrentHandlingStarted(processedRequest, response);
            }
        } else if (multipartRequestParsed) {
            this.cleanupMultipart(processedRequest);
        }

    }
}
SpringMVC启动与请求处理流程解析 实现了Controller接口的Bean对象实现了HttpRequestHandler接口的Bean对象添加了@RequestMapping注解的方法一个HandlerFunction对象@Override@Override@Component@Autowired@Bean.build();HandlerMapping负责去寻找Handler,并且保存路径和Handler之间的映射关系。 阅读详情

相关推荐

专项1.CCS代码补全与快捷键优化全攻略

本文全面解析CCS开发环境的代码补全功能与快捷键优化技巧,包括内容辅助触发机制、快捷键自定义配置、编码效率提升方法等实用内容。通过详细步骤指导开发者优化CCS配置,实现高效的代码自动补全和个性化快捷键设置,显著提升嵌入式开发效率。

kotlin6android的博客 223

springboot请求处理流程

最近在看尚硅谷雷神的springboot2,整理一下,方便自己理解,有的地方有可能出错

weixin_49260963的博客 6040

2.4G/4G天线共存方案:Air8101多频段隔离设计实战(附波长计算表)

本文深入探讨了物联网设备中Wi-Fi 2.4GHz与4G LTE天线共存设计的实战方案。针对B40与2.4G频段紧邻带来的干扰挑战,文章系统性地提出了空间隔离、PCB布局优化、结构设计三重防线,并提供了关键的波长计算工具与系统级验证Checklist,旨在帮助工程师将多频段隔离设计从“玄学”变为可执行的工程规范。

weixin_29197051的博客 389

SpringBoot一个请求的处理全过程

SpringBoot一个请求的处理全过程:过滤器、拦截器、参数解析、参数转换、参数校验、返回值处理、异常处理。

骑个小蜗牛的博客 4万+

TI IWR 6843 ISK 毫米波雷达开箱测试

TI IWR6843 ISK毫米波雷达上手体验,教程十分详细,对于新手很友好。

qq_57061492的博客 4033

ABAQUS中CDP模型在钢筋混凝土节点低周反复荷载模拟的关键技术解析

本文深入解析了ABAQUS中CDP模型在钢筋混凝土节点低周反复荷载模拟中的关键技术。通过详细介绍CDP模型的核心价值、建模关键技术、滞回曲线优化方法及典型问题排查指南,帮助工程师精准模拟混凝土的拉伸开裂和压缩压碎行为,提升抗震分析效率。文章还提供了实用的工程应用技巧,如快速建模模板和后处理自动化脚本。

weixin_30555125的博客 525

springMVC处理请求全过程

总的来说,Spring MVC 的请求处理流程是一个经典的 MVC 模式的实现,通过各个组件的配合,实现了请求的接收、处理、响应的完整流程,为开发者提供了一种简单、灵活且可扩展的方式来构建 Web 应用程序。熟悉这些流程和组件对于理解 Spring MVC 的工作原理和实现机制非常重要,有助于更加高效地开发和调试应用程序。

Supreme13的博客 3985

RFSoC应用XCZU47DR八发八收FPGA设计方案

本文介绍了基于Xilinx XCZU47DR RFSoC芯片的八发八收FPGA设计方案。该方案采用集成射频数据转换器的SoC架构,支持8路14bit ADC(5GSPS)和8路14bit DAC(9.85GSPS),可直接处理5GHz以下射频信号。硬件设计包含高性能输入缓冲器、QMC校正和复杂混频器,适用于5G/6G通信、雷达、卫星通信等领域。文章详细阐述了ADC/DAC子系统参数,包括通道配置、采样率、带宽等特性,并提供了FPGA顶层模块的硬件接口设计,展示了多通道数据收发处理能力。该方案无需外置混频器,

toonyhe的博客 1786

揭秘Spring Boot的请求处理全流程:从启动到响应的奥秘

在 Spring Boot 中,一个简单的接口@RestController,就能轻松地实现复杂的Web服务。当我们在浏览器中访问http://localhost:8080/user/all,返回一个简单的字符串"all user",背后究竟发生了什么?

懒惰蜗牛的博客 2645

HLM(多层线性模型)在stata中语句

在阅读CEPS中发现有些研究采用的是HLM模型,HLM简单来说用一个方程跑两个回归。举例,对学习成绩影响因素,不同层有不同的影响,如在个体层面上个体特征会对成绩产生影响,在学校层面学校排名等因素会对成绩产生影响,两种因素不在一个层面,每层造成的差异都不相同。 在找相关语句时候发现操作这个语句的软件大多是SPSS和HLM,对于stata操作者并不友好。因此,在有限资料中总结了HLM在stata中的语句,后面会附上学习视频和链接。 先放语句,后面对方程式一个大致解析。由于针对HLM有一本书的介绍,可能一篇文章无

weixin_44652251的博客 1万+

OpenCV 常用的API总结(迅速查询)

OpenCV基本操作 openCV安装 读取图片(IO操作) 绘制集合图形 图像加法以及混合操作 OpenCV图像处理 图像几何变换 形态学操作 图像平滑 直方图 边缘检测 模板匹配 傅里叶变换 轮廓检测 图像分割 图像特征提取 SIFT检测关键点 视频读写............

Peyzhang的博客 3936

SpringBoot 请求处理流程

SpringBoot 请求处理流程

ChineseSoftware的博客 5247

Juniper SRX PPPoE配置

set interfaces pp0 unit 1 ppp-options chap default-chap-secret 拨号用户名密码。set interfaces pp0 unit 0 ppp-options chap default-chap-secret 拨号密码。set interfaces pp0 unit 0 ppp-options chap local-name 拨号用户名。6号口接运营商进行拨号。

Jian Sun_的博客 750

SpringMVC处理请求流程

下面是一个常见的SpringMVC处理请求的流程从上面的流程中可以看出核心对象是DispatcherServlet,下面我们根据上面的流程图来分析源码,不过需要先知道一些前置知识。

wsb_2526的博客 1132

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringMVC对请求的处理流程

  前言         在没有这些开发框架的传统项目中一般都是使用jsp+Servlet的实现方式,基本上是一个url对应一个Servlet,如果项目比较大的时候就会出现很多的问题,所以,后来出现了strusts、SpringMVC等等一些框架,SpringMVC是我们经常使用到的开发框架,MVC(Model/View/Controller)它是一种设计模式,简化了web开发的工作量,并且很...

xpsallwell的专栏 3208

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SpringMVC 请求处理流程

SpringMVC 请求处理流程 一,如何进行初始化,初始化时做了什么,Filter和Servlet什么时候注入的? 1,springboot启动时onRefresh中会调用,ServletWebServerApplicationContext.createWebServer创建Tomcat 2,启动容器时触发TomcatStarter(实现了ServletContainerInitializer)onStartup方法初始化ServletContextInitializer接口的onStartup方法,第

u011309181的博客 2737

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringMVC请求处理流程深度解析

本文从404场景引入SpringMVC流程。详解DispatcherServlet和9大组件:HandlerMapping、HandlerAdapter、ViewResolver等。深入9步骤:接收请求、查找Handler、拦截器处理、调用Handler、解析渲染视图。源码分析doDispatch方法。手写简易版DispatcherServlet实现URL映射和参数解析。实战RESTful API案例、拦截器和异常处理。提供最佳实践建议。

比较是偷走幸福的小偷 1万+

SpringMVC请求处理流程

个人理解

PSL996的博客 966

SpringMVC的请求处理流程及核心组件

本篇文章介绍了SpringMVC的请求处理流程和核心组件,常用注解等知识点,也是面试中的重点,感兴趣的大佬看过来呀~

小威的博客 1744

springMVC处理请求流程及原理

1、SpringMVC 的运行流程 · 用户发送请求至前端控制器DispatcherServlet ·DispatcherServlet收到请求调用HandlerMapping处理器映射器。 ·处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 ·Dis...

weixin_40378837的博客 1358

了解 SpringMVC 请求流程

本文围绕 SpringMVC 请求流程进行展开,帮助大家进一步理解。

大大怪将军的博客 1115

SpringMVC 处理请求原理

SpringMVC 处理请求原理

学习笔记! 1118

SpringMVC请求处理全流程深度解析:从请求到响应的完美旅程

SpringMVC请求处理流程的核心在于DispatcherServlet的协调调度。本文详细剖析了从请求接收到响应返回的完整过程,包括请求预处理、核心分发处理以及结果渲染等关键阶段。通过分析doDispatch()方法源码,揭示了HandlerMapping、HandlerAdapter等核心组件如何协作完成请求映射、方法执行和视图解析。文章还深入探讨了HandlerMapping的多种实现及其映射解析机制,为开发者理解SpringMVC的工作原理提供了系统性的视角,有助于在实际开发中更好地应用和调试这一

cx1050306424的博客 1801

SpringMVC请求处理流程(图解)及九大组件

SpringMVC请求处理流程 流程说明 第⼀步:⽤户发送请求⾄前端控制器DispatcherServlet 第⼆步: DispatcherServlet收到请求调⽤HandlerMapping处理器映射器 第三步:处理器映射器根据请求Url找到具体的Handler(后端控制器),⽣成处理器对象及处理器拦截器(如果 有则⽣成)⼀并返回DispatcherServlet 第四步: DispatcherServlet调⽤HandlerAdapter处理器适配器去调⽤Handler 第五步:处理器适配器执⾏Ha

程序员资料站 3111

SpringMVC处理请求的流程

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 Spring Web MVC能帮我们做什么√让我们能非常简单的设计出干净的Web层和薄薄的Web层;

幸福在路上 8442
上一篇: 【SpringMVC 笔记】5、将数据传给页面的方法
下一篇: Mysql 忘记密码
JJ_Notebook
博客等级 码龄7年 1粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值