SpringMVC中执行流程

news/2024/7/8 10:36:36 标签: mvc, java, 服务器

文章目录

    • 14、SpringMVC执行流程
      • 14.1、SpringMVC常用组件
      • 14.2、DispatcherServlet初始化过程
        • ①初始化WebApplicationContext
        • ②创建WebApplicationContext
        • ③DispatcherServlet初始化策略
      • 14.3、DispatcherServlet调用组件处理请求
        • ①processRequest()
        • ②doService()
        • ③doDispatch()
        • ④processDispatchResult()
      • 14.4、SpringMVC的执行流程
        • 用户向服务器发送请求,请求被SpringMVC 前端控制器 DispatcherServlet捕获。
        • DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射:
          • 不存在
          • 存在则执行下面的流程

14、SpringMVC执行流程

14.1、SpringMVC常用组件

  1. DispatcherServlet:前端控制器,不需要工程师开发,由框架提供

作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求

  1. HandlerMapping:处理器映射器,不需要工程师开发,由框架提供

作用:根据请求的url、method等信息查找Handler,即控制器方法

  1. Handler:处理器,需要工程师开发

作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理

  1. HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供

作用:通过HandlerAdapter对处理器(控制器方法)进行执行

  1. ViewResolver:视图解析器,不需要工程师开发,由框架提供

作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、

RedirectView

  1. View:视图

作用:将模型数据通过页面展示给用户

14.2、DispatcherServlet初始化过程

DispatcherServlet 本质上是一个 Servlet,所以天然的遵循 Servlet 的生命周期。所以宏观上是 Servlet生命周期来进行调度。

①初始化WebApplicationContext
②创建WebApplicationContext

所在类:org.springframework.web.servlet.FrameworkServlet

③DispatcherServlet初始化策略

FrameworkServlet创建WebApplicationContext后,刷新容器,调用onRefresh(wac),此方法在DispatcherServlet中进行了重写,调用了initStrategies(context)方法,初始化策略,即初始化DispatcherServlet的各个组件

所在类:org.springframework.web.servlet.DispatcherServlet

14.3、DispatcherServlet调用组件处理请求

①processRequest()

FrameworkServlet重写HttpServlet中的service()和doXxx(),这些方法中调用了

processRequest(request, response)

所在类:org.springframework.web.servlet.FrameworkServlet

②doService()

所在类:org.springframework.web.servlet.DispatcherServlet

③doDispatch()

所在类:org.springframework.web.servlet.DispatcherServlet

④processDispatchResult()

14.4、SpringMVC的执行流程

  1. 用户向服务器发送请求,请求被SpringMVC 前端控制器 DispatcherServlet捕获。
  2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射:
    • 不存在
      1. 再判断是否配置了mvc:default-servlet-handler
      2. 如果没配置,则控制台报映射查找不到,客户端展示404错误
      3. 如果有配置,则访问目标资源(一般为静态资源,如:JS,CSS,HTML),找不到客户端也会展示404错误
    • 存在则执行下面的流程
      1. 根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain执行链对象的形式返回。
      2. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter
      3. 如果成功获得HandlerAdapter,此时将开始执行拦截器的preHandler(…)方法【正向】
      4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)方法,处理请求。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
        • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
        • 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
        • 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象。
      6. 此时将开始执行拦截器的postHandle(…)方法【逆向】。
      7. 根据返回的ModelAndView(此时会判断是否存在异常:如果存在异常,则执行 HandlerExceptionResolver进行异常处理)选择一个适合的ViewResolver进行视图解析,根据Model 和View,来渲染视图。
      8. 渲染视图完毕执行拦截器的afterCompletion(…)方法【逆向】。
        择一个适合的ViewResolver进行视图解析,根据Model 和View,来渲染视图。
      9. 渲染视图完毕执行拦截器的afterCompletion(…)方法【逆向】。
      10. 将渲染结果返回给客户端。

http://www.niftyadmin.cn/n/5537105.html

相关文章

51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器

本章重点讲解将TIM0用作两个8位定时器,同时将TIM1用作波特率发生器。 当定时器T0在方式3时,T1不能产生中断,但可以正常工作在方式0、1、2下,大多数情况下,T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…

探索人工智能在电子商务平台与游戏发行商竞争中几种应用方式

过去 12 年来,电脑和视频游戏的发行策略发生了巨大变化。数字游戏的销量首次超过实体游戏的销量 在20132020 年的封锁进一步加速了这一趋势。例如,在意大利,封锁的第一周导致数字游戏下载量 暴涨174.9%. 展望未来,市场有望继续增…

【Spring Boot】spring boot环境搭建

1、环境准备 JDK安装:确保安装了Java Development Kit (JDK) 1.8或更高版本。JDK是Java编程的基础,Spring Boot项目需要它来编译和运行。Maven或Gradle安装:选择并安装Maven或Gradle作为项目构建工具。Maven通过pom.xml文件来管理项目的依赖…

Ubuntu多显示器设置不同缩放比例

Ubuntu多显示器设置不同缩放比例 设备问题解决方案 设备 笔记本屏幕分辨率为2560 \times 1600,外接显示器的分辨率为3840 \times 2160。 问题 Ubuntu默认的显示器设置中,缩放仅能选择100%,200%,300%,400%。假…

使用selenium定位input标签下的下拉框

先来看一下页面效果&#xff1a;是一个可输入的下拉列表 再来看一下下拉框的实现方式&#xff1a; 是用<ul>和<li>方式来实现的下拉框&#xff0c;不是select类型的&#xff0c;所以不能用传统的select定位方法。 在着手定位元素前一定一定要先弄清楚下拉列表…

应用案例 | 劳易测DCR 55助力电子制造业高效检测

在当今快节奏的电子制造行业中&#xff0c;电子产品的生产过程也日益复杂和精细化。在这个过程中&#xff0c;对各个组件的精确识别和有效追溯显得尤为重要。电子产品无论是部件零组件&#xff0c;还是封装模组&#xff0c;在组装成品前都需要经过严格的测试&#xff0c;包括功…

物联网数据解析实战:掌握CJSON库核心函数,精准处理JSON数据

物联网数据解析实战&#xff1a;掌握CJSON库核心函数&#xff0c;精准处理JSON数据 CJSON库是一个轻量级的JSON解析库&#xff0c;专为C语言设计&#xff0c;适用于嵌入式系统和物联网应用。它提供了简单易用的API&#xff0c;使得开发者能够轻松地解析和生成JSON数据。在本教…

【讲解下AI Native应用中的模型微调】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…