spring-mvc 工作流程

news/2024/11/23 9:46:52/

一、概述

  • spring-mvc 主要是DispatcherServlet工作流程
  • 流程可以分为两块,第一块为DispatcherServlet的加载,第二块为请求处理

二、DispatcherServlet的加载

主要依靠三个对象

  1. DispatcherServletRegistrationBean:实现了ServletContextInitializer接口,在tomcat启动后创建完成ServletContext时,将DispatcherServlet交给tomcat
    2. DispatcherServletAutoConfiguration:定义了DispatcherServlet和DispatcherServletRegistrationBean
    3. TomcatStarter:其实现了ServletContainerInitializer接口,将DispatcherServlet放入Tomcat
    主要分为二步

  2. DispatcherServlet放入spring容器

调用
调用
spring-boot 启动流程
读取spring-boot-autoconfigure-*.jar
/META-INF/spring.factories文件
加载并解析DispatcherServletAutoConfiguration对象
DispatcherServletConfiguration.dispatcherServlet()
向容器注入DispatcherServlet
DispatcherServletRegistrationConfiguration.dispatcherServletRegistratio()
向容器注入DispatcherServletRegistrationBean
  1. 从容器里获取DispatcherServlet放入tomcat
调用
调用
调用
调用
调用
调用
调用
spring-boot 启动流程
加载AnnotationConfigServletWebServerApplicationContext
AnnotationConfigServletWebServerApplicationContext.refresh()
onRefresh()
createWebServer()
TomcatServletWebServerFactory.getWebServer()
prepareContext()
configureContext()
实例化 TomcatStarter start=new TomcatStarter(initializers)
Context.addServletContainerInitializer(start)
将TomcatStarter放入tomcat

三、主流程

  1. 涉及组件

    • FlashMapManager:重定向时,会带上前一次请求的数据。
    • MultipartResolver:处理http content-type= multipart/form-data类型的请求
    • HandlerMapping:处理映射,根据路径寻找指定controller和拦截器链,调用拦截器
    • HandlerAdapter:处理controller对象调用,包括请求参数的解析,方法调用,响应处理
    • RequestToViewNameTranslator:以在处理器返回的View为空时,使用它根据Request获取默认viewName。
    • LocaleResolver:用于多语言解析,英语,法语等
    • ViewResolver:用于后端动态渲染页面,像velocity三方页面渲染工具
    • ThemeResolver:用于动态样式,由后端来决定前端的展示
    • HandlerExceptionResolver:异常处理
  2. 组件配置
    每个组件都有默认值。首先从spring容器中获取,如果没有则使用默认值

  3. 流程

FlashMapManager
MultipartResolver
HandlerMapping
HandlerAdapter
RequestToViewNameTranslator
localeResolver
ViewResolver
HandlerExceptionResolver

四、 HandlerMapping 流程

  1. 组件
    • HandlerInterceptor:拦截器,在请求到达controller之前处理
    • CorsConfiguration:配置跨域请求如何处理
    • UrlPathHelper:获取路径,比如请求目录,servletPath等
    • PathMatcher:判断获取的路径是否和你设置的正则相匹配
  2. 组件配置
    每个组件都有默认值。可以通过实现WebMvcConfigurer接口来配置
  3. 流程
HandlerMapping.getHandler()
urlPathHelper.getLookupPathForRequest()获取路径
pathMatcher.matches()寻找匹配的拦截器
拦截器preHandle()处理请求
调用controller
拦截器postHandle()处理请求

五、 HandlerAdapter 流程

  1. 组件
    • HttpMessageConverter:将请求的数据转换为对象,将对象转换为特定格式数据,比如json
    • HandlerMethodArgumentResolver:从请求、cookie、session等解析出controller方法需要的参数
    • HandlerMethodReturnValueHandler:处理controler的返回值,将值转换为特定格式输出,比如html,json等
    • WebDataBinder:将请求数据转换为指定类型数据,并验证
    • ModelMap:存储响应数据,主要用于velcoity这种页面渲染
  2. 组件配置
    • HttpMessageConverter,HandlerMethodArgumentResolver,HandlerMethodReturnValueHandler 有默认值。可以通过实现WebMvcConfigurer接口来配置
    • WebDataBinder:@ControllerAdvice配合@InitBinder进行全局配置;controller的@InitBinder进行当前controller设置。
    • ModelMap:@ControllerAdvice配合@ModelAttribute 进行全局配置;controller的@ModelAttribute进行当前controller设置。
  3. 流程
使用
使用
使用
HandlerAdapter.handle()
HandlerMethodArgumentResolver
HandlerMethodReturnValueHandler
HttpMessageConverter
WebDataBinder
ModelMap

http://www.ppmy.cn/news/293668.html

相关文章

paas云底座-数字化转型,你真的了解么

云底座是什么? 如图 底座其实就是一个基础打个比方: 把底座看成一块土地,我们在这块土地上可以盖楼房,可以挖一个游泳池,可以开一家饭店 也就是说我们这块土地可以开发很多东西言归正传 云底座其实就是数字化转型的“底…

【HTML】【一文全解Canvas】从初学到实战,彻底掌握前端绘图神器!

【HTML】Canvas 基本介绍与应用 前言一、Canvas 概述二、基本用法三、Canvas 绘制图形1、绘制矩形a. fillRect()b. strokeRect() 2、绘制圆形a. 绘制实心圆形b. 绘制空心圆形 四、Canvas 绘制文本1、 fillText()2、 strokeText() 五、Canvas 绘制图片1、drawImage()2、createPa…

容器(第四篇)创建镜像-dockerfile

创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 基于现有镜像创建: ①先使用现有镜像创建容器 docker run ②再进入容器进行内容更新 docker exec ③最后提交成新的镜像 docker commit 或 docker…

免费下载百度 豆丁 丁香 等平台文档

免费下载百度文档 免费下载豆丁平台文档 无需积分就可以自由下载百度、豆丁、丁香、MBALib、道客巴巴、Book118等文库文档,无需注册和登录。 下载软件: https://download.csdn.net/download/zengmingen/10918931 (官网下载是免费的,但是…

思维导图软件XMind破解版下载地址 附最简安装教程

XMind XMind 是一款非常实用的商业思维导图软件,应用全球最先进的Eclipse RCP 软件架构,全力打造易用、高效的可视化思维软件,强调软件的可扩展、跨平台、稳定性和性能,致力于使用先进的软件技术帮助用户真正意义上提高生产率。 …

Qt6 C++基础入门3 对话框与MainWindow

目录 对话框MainWindow菜单工具栏 对话框 目前的对话框主要有以下几大类 文件对话框( QFile Dialog)消息对话框( QMessageBox)输入对话框( QInputDialog)颜色对话框( QColorDialog)字体对话框( QFontDialog) 这是七大对话框及其基本用法的实例参考,所有代码都写在…

给大家推荐一款冰点文档下载器(免登陆,免积分)下载百度,豆丁,畅享网,mbalib,hp009,mab.book118文库文档

给大家推荐一款冰点文档下载器(免登陆,免积分) 下载百度,豆丁,畅享网,mbalib,hp009,mab.book118文库文档; 下载链接在我的资源里面(资源也是免积分的); 资源链接:http://download…

bibtex4word 安装及使用

一、安装 1、首先需要安装TexLive20xx,包含bibtex.exe 2、bibtex4word下载地址:Bibtex4Word 下载后解压,将bibtex4word.dot文件拷贝出来,复制到C:\Users\*****\AppData\Roaming\Microsoft\Word\STARTUP目录下 3、添加用户环境…