1、springboot2.0下的DispatcherServlet代码跟踪:
客户端发送请求,调用DispatcherServlet的service(),此方法继承于Servlet(DispatcherServlet extends FrameworkServlet ,FrameworkServlet extends HttpServletBean,HttpServletBean extends HttpServlet,HttpServlet extends GenericServlet,GenericServlet extends Servlet),并且在HttpServlet重写了service(),这个方法中对get/post/head/put等请求进行处理,并调用相应的doGet/doPost/doHead/doPut等方法,在FrameworkServlet中对这些方法进行了重写,doGet/doPost/doHead/doPut等方法最终调用processRequest();此方法中最终调用了doService();DispatcherServlet重写了doService(),在此方法中调用doDispatch()进行请求分发

doDispatch通过调用getHandler方法得到处理器(Controller),调用getHandlerAdapter方法得到适配器

mv = ha.handle(processedRequest, response, mappedHandler.getHandler());这行代码最终调用RequestMappingHandlerAdapter的handleInternal方法

最终通过invokeHandlerMethod方法里面的invocableMethod.invokeAndHandle(webRequest, mavContainer)调用对应的处理器,即执行控制类的业务逻辑代码。
2、SpringMVC的运行流程:

⑴ 用户发送请求至前端控制器DispatcherServlet
⑵ DispatcherServlet收到请求调用HandlerMapping处理器映射器。
⑶ 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
⑷ DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
⑸ 执行处理器(Controller,也叫后端控制器)。
⑹ Controller执行完成返回ModelAndView
⑺ HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
⑻ DispatcherServlet将ModelAndView传给ViewReslover视图解析器
⑼ ViewReslover解析后返回具体View
⑽ DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
⑾ DispatcherServlet响应用户。从上面可以看出,DispatcherServlet有接收请求,响应结果,转发等作用。有了DispatcherServlet之后,可以减少组件之间的耦合度。

springboot下的DispatcherServlet相关推荐

  1. springboot下使用mybatis配置

    springboot下使用mybatis配置 1. 依赖安装 pom.xml文件 <dependency><groupId>org.mybatis.spring.boot< ...

  2. springboot下整合各种配置文件

    本博是在springboot下整合其他中间件,比如,mq,redis,durid,日志...等等  以后遇到再更.springboot真是太便捷了,让我们赶紧涌入到springboot的怀抱吧. ap ...

  3. Docker下redis与springboot三部曲之三:springboot下访问redis哨兵

    在< Docker下redis与springboot三部曲之二:安装redis主从和哨兵>一文中,我们在docker下搭建了redis主从和哨兵,本章我们开发一个基于springboot的 ...

  4. springboot下配置druid监控

    springboot下配置druid监控 在springboot中引用的包 相关配置 页面访问 获取druid监控数据 官方介绍如下:Druid是Java语言中最好的数据库连接池.Druid能够提供强 ...

  5. SpringBoot下的策略模式,消灭了大量的ifelse,真香!

    前言 项目中有这样一个场景,在公园放置了用来拍摄人像的识别杆,根据用户在不同识别杆之间采集的图象来计算用户的运动距离.由于涉及到许多公园,每个公园的布局不同,识别杆之间距离不同,算法也不同.但代码中每 ...

  6. springBoot下的ftp下载

    springBoot下的ftp下载 springboot-Environment ftp登录.退出 打包下载 本实例将创建一个ftp打包文件的工具类 Environment类获取配置信息 spring ...

  7. springBoot下java代码mysql数据库定时任务(创建表)

    springBoot下用java代码创建表 首先找到application.yml配置文件进行数据库连接配置 2-编写初始化数据库表类 这里就先写个demo用作测试 在项目目下新建一个包,报名任意,在 ...

  8. SpringBoot下MySQL的读写分离

    首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校 会员中心 收藏 动态 消息 创作中心 02-下篇-SpringBoot下MySQL的读写分离 dusuanyun 2018-07- ...

  9. springboot下MVC的MessageConverters和静态资源位置的配置

    文章目录 1. WebMvcConfigurationSupport.WebMvcConfigurer 区别 2. 自定义消息转换器MessageConverters 3. 静态资源 3.1 静态资源 ...

最新文章

  1. 细聊 Cocoapods 与 Xcode 工程配置
  2. 基于ROS的人脸识别
  3. 数学发展重在人才,丘成桐鼓励年轻学子“无法无天”
  4. [转载] 【C/C++】Vector的创建与初始化方法
  5. php缓存技术基础知识
  6. dual mysql 获取序列_FASTJSON反序列化和构造函数之间的一点小秘密
  7. 关于指针赋初值为NULL的问题
  8. Qt5 QFileDialog中文英文交界处乱码问题
  9. 详细解说冲压模具的结构和分类
  10. 腾讯云不重启修改主机名
  11. Go实战--也许最快的Go语言Web框架kataras/iris初识四(i18n、filelogger、recaptcha)
  12. 如何在opensolaris2008.05清除root密码
  13. GrayWorld 色彩均衡算法
  14. 管理科学与工程和计算机哪个难考,考研管理科学与工程 管理学和工学哪个好考?...
  15. 支持向量机理论(SVM)
  16. Day1 - Python基础
  17. java玫瑰花代码_js html5渲染的3D玫瑰花(程序员的情人节礼物)
  18. 想要提高企业分账管理,简单分账系统如何做到?
  19. spark运行正常,某一个Stage卡住,停止不前异常分析
  20. Java操作百万数据量Excel导入导出工具类(程序代码教程)

热门文章

  1. 物理对计算机科学专业的意义,浅谈物理学对计算机科学发展的影响
  2. 多版本Gradle离线包下载
  3. 影流服务器显示无法连接服务器,腾讯服务器崩溃?王者荣耀网络异常,LOL服务器也炸了...
  4. 【计算机网络】网络层(五)—— IPv6总结
  5. php ksort降序为1,PHP ksort()用法及代码示例
  6. 《醋溜族》经典搞笑语录
  7. 戏说开源数据库“五虎将”
  8. 计算机视觉与人工智能顶会顶刊
  9. vue ui客户端工具
  10. 【Books系列】2022年:《慢慢变富》读书笔记