当前位置: 首页 > news >正文

spring-mvc 工作流程

一、概述

  • 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.lryc.cn/news/93602.html

相关文章:

  • 物联网Lora模块从入门到精通(六)OLED显示屏
  • 平面坐标变换(单应性变换/Homography变换)
  • 大数据项目常识
  • Linux系统:常用服务端口
  • 前端和后端分别是什么?
  • Spring基础知识(一)
  • 易语言使用node编译的js文件
  • 计算机网络笔记:动态主机配置协议(DHCP)
  • 新买的电脑怎么用U盘重装系统?新买的电脑用U盘重装系统教程
  • 图像边缘检测原理
  • 爬虫利器 Beautiful Soup 之遍历文档
  • 12、Nginx高级之高级模块(secure_link/secure_link_md5)
  • 【python】数据可视化,使用pandas.merge()对dataframe和geopandas类型数据进行数据对齐
  • 大模型入门(三)—— 大模型的训练方法
  • 人机交互学习-4 交互设计过程
  • 大话Stable-Diffusion-Webui之kohya-ss主题更改
  • 搜索在计算机中的地位十分重要
  • 多模态深度学习:定义、示例、应用
  • 基于ZCU106平台部署Vitis AI 1.2/2.5开发套件【Vivado+Vitis+Petalinux2020/2022】
  • ChatGPT原理简介
  • 从0搭建Hyperledger Fabric2.5环境
  • Rust每日一练(Leetday0026) 最小覆盖子串、组合、子集
  • c# 从零到精通-ArrayList-Hashtable的操作
  • pnpm带来了什么
  • 图像分类模型嵌入flask中开发PythonWeb项目
  • GIT安装教程(入门)
  • 全志V3S嵌入式驱动开发(触摸屏驱动)
  • 死信队列详解
  • 我用ChatGPT写2023高考语文作文(五):北京卷I
  • 《微服务实战》 第二十八章 分布式锁框架-Redisson