首页 > 其他分享 >SpringMVC的执行流程

SpringMVC的执行流程

时间:2023-07-01 23:22:07浏览次数:37  
标签:HandlerMapping 调用 SpringMVC 流程 拦截器 处理器 HandlerMethod 执行

SpringMVC的执行流程

要求

  • 掌握 Spring MVC 的执行流程
  • 了解 Spring MVC 的重要组件的作用

概要

我把整个流程分成三个阶段

  • 准备阶段
  • 匹配阶段
  • 执行阶段

准备阶段

  1. 在 Web 容器第一次用到 DispatcherServlet 的时候,会创建其对象并执行 init 方法
  2. init 方法内会创建 Spring Web 容器,并调用容器 refresh 方法
  3. refresh 过程中会创建并初始化 SpringMVC 中的重要组件, 例如 MultipartResolver,HandlerMapping,HandlerAdapter,HandlerExceptionResolver、ViewResolver 等
  4. 容器初始化后,会将上一步初始化好的重要组件,赋值给 DispatcherServlet 的成员变量,留待后用
    image

匹配阶段

  1. 用户发送的请求统一到达前端控制器 DispatcherServlet

  2. DispatcherServlet 遍历所有 HandlerMapping ,找到与路径匹配的处理器

    ① HandlerMapping 有多个,每个 HandlerMapping 会返回不同的处理器对象,谁先匹配,返回谁的处理器。其中能识别 @RequestMapping 的优先级最高

    ② 对应 @RequestMapping 的处理器是 HandlerMethod,它包含了控制器对象和控制器方法信息

    ③ 其中路径与处理器的映射关系在 HandlerMapping 初始化时就会建立好
    image

  3. 将 HandlerMethod 连同匹配到的拦截器,生成调用链对象 HandlerExecutionChain 返回
    image

  4. 遍历HandlerAdapter 处理器适配器,找到能处理 HandlerMethod 的适配器对象,开始调用
    image

调用阶段

  1. 执行拦截器 preHandle
    image

2.由 HandlerAdapter 调用 HandlerMethod

① 调用前处理不同类型的参数

② 调用后处理不同类型的返回值
image
3. 第 2 步没有异常

① 返回 ModelAndView

② 执行拦截器 postHandle 方法

③ 解析视图,得到 View 对象,进行视图渲染
image

  1. 第 2 步有异常,进入 HandlerExceptionResolver 异常处理流程
    image

  2. 最后都会执行拦截器的 afterCompletion 方法

  3. 如果控制器方法标注了 @ResponseBody 注解,则在第 2 步,就会生成 json 结果,并标记 ModelAndView 已处理,这样就不会执行第 3 步的视图渲染

标签:HandlerMapping,调用,SpringMVC,流程,拦截器,处理器,HandlerMethod,执行
From: https://www.cnblogs.com/wish139630/p/17520166.html

相关文章

  • Web前端在浏览器如何启动本地可执行文件
    方法2本地监听法可以自己开发一个小的可执行程序,监听前端发的web请求。收到请求后,我们自己编写的可执行程序启动本地的可执行文件即可。想要启动本地可执行文件的关键就是本地有一个小服务端,我们通过本地网络与服务端通信,服务端负责启动可执行文件。这种方法对于任何浏览器都兼......
  • 多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docke
    多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docker+Uniapp+Vue3随着移动互联网的快速发展和智能手机的普及,代驾服务成为了一个日益火热的行业。在这个行业中,如何构建一个具备商业级可靠性和扩展性的代驾业务系统成为了关键问题。本文将介绍一......
  • 使用 ABAP 正则表达式提高字符串解析的执行效率
    在ABAP(AdvancedBusinessApplicationProgramming)中,正则表达式(RegularExpressions)是一种强大的工具,可用于处理字符串和文本数据。正则表达式可以帮助您执行各种任务,如查找和替换文本、验证输入格式或拆分字符串。本文将介绍在ABAP中使用正则表达式的几种方法。使用CL_ABAP......
  • Midjourney 自动化流程
    1.批量获取Prompt描述这部分是可以让chatgpt来完成的,但是效果上还是需要调整建议的流程是自己描述想象中的角色造型,越详细越细节越好尝试多种美术风格,挑选出自己最喜欢的,之后的配置项就都统一一致即可下面主要介绍几个在使用Midjoureny中重要的小技巧>Midjoureny根据参考图......
  • gitlab-runner因与gitlab版本不匹配,降低gitlab-runner版本,操作流程
     1.查看版本号:sudogitlab-runner--verison2.降低gitlab-runner版本。卸载gitlab-runner版本,然后安装低版本的gitlab-runner查看gitlab-runner版本操作命令gitlab-runner命令gitlab-runner-h 卸载的命令gitlab-runner uninstall  查看卸载的情况,发现不好......
  • Linux Shell流程控制
    预计更新1:基础知识简介和安装基本命令变量和环境变量2:流程控制条件语句循环语句函数3:文件处理文件读写文件权限和所有权文件搜索和替换4:网络和进程网络通信进程管理信号处理5:文本处理正则表达式文本分析和处理生成报告和日志6:用户界面命令行参数和选......
  • python执行终端命令并获得输出结果
    兼容windows和linux的终端执行函数defshell_exec(cmd:str)->str:  """ 执行终端命令,输出终端打印结果 :paramcmd: :return: """  withos.popen(cmd)asfp:    bf=fp._stream.buffer.read()  out=bf.decode().strip()  retu......
  • 【十】MySQL数据库之流程控制
    【十】MySQL数据库之流程控制流程控制【一】条件语句if条件语句delimiter//CREATEPROCEDUREproc_if()BEGINdeclareiintdefault0;ifi=1THENSELECT1;ELSEIFi=2THENSELECT2;ELSESELECT7;ENDIF;E......
  • springboot的启动流程
    SpringBoot启动过程1、运行SpringApplication.run()方法可以肯定的是,所有的标准的springboot的应用程序都是从run方法开始的packagecom.spring;importorg.springframework.beans.factory.config.ConfigurableListableBeanFactory;importorg.springframework.boot.Sprin......
  • java流程控制
    一、Scanner对象java的一个工具类用来获取用户输入使用方式:导入java.util.Scanner包就能使用基本语法Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取输入字符串读取值之前我们一般需要使用hasNext()与hasNextLine()判断是......