springboot下的DispatcherServlet
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相关推荐
- springboot下使用mybatis配置
springboot下使用mybatis配置 1. 依赖安装 pom.xml文件 <dependency><groupId>org.mybatis.spring.boot< ...
- springboot下整合各种配置文件
本博是在springboot下整合其他中间件,比如,mq,redis,durid,日志...等等 以后遇到再更.springboot真是太便捷了,让我们赶紧涌入到springboot的怀抱吧. ap ...
- Docker下redis与springboot三部曲之三:springboot下访问redis哨兵
在< Docker下redis与springboot三部曲之二:安装redis主从和哨兵>一文中,我们在docker下搭建了redis主从和哨兵,本章我们开发一个基于springboot的 ...
- springboot下配置druid监控
springboot下配置druid监控 在springboot中引用的包 相关配置 页面访问 获取druid监控数据 官方介绍如下:Druid是Java语言中最好的数据库连接池.Druid能够提供强 ...
- SpringBoot下的策略模式,消灭了大量的ifelse,真香!
前言 项目中有这样一个场景,在公园放置了用来拍摄人像的识别杆,根据用户在不同识别杆之间采集的图象来计算用户的运动距离.由于涉及到许多公园,每个公园的布局不同,识别杆之间距离不同,算法也不同.但代码中每 ...
- springBoot下的ftp下载
springBoot下的ftp下载 springboot-Environment ftp登录.退出 打包下载 本实例将创建一个ftp打包文件的工具类 Environment类获取配置信息 spring ...
- springBoot下java代码mysql数据库定时任务(创建表)
springBoot下用java代码创建表 首先找到application.yml配置文件进行数据库连接配置 2-编写初始化数据库表类 这里就先写个demo用作测试 在项目目下新建一个包,报名任意,在 ...
- SpringBoot下MySQL的读写分离
首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校 会员中心 收藏 动态 消息 创作中心 02-下篇-SpringBoot下MySQL的读写分离 dusuanyun 2018-07- ...
- springboot下MVC的MessageConverters和静态资源位置的配置
文章目录 1. WebMvcConfigurationSupport.WebMvcConfigurer 区别 2. 自定义消息转换器MessageConverters 3. 静态资源 3.1 静态资源 ...
最新文章
- 细聊 Cocoapods 与 Xcode 工程配置
- 基于ROS的人脸识别
- 数学发展重在人才,丘成桐鼓励年轻学子“无法无天”
- [转载] 【C/C++】Vector的创建与初始化方法
- php缓存技术基础知识
- dual mysql 获取序列_FASTJSON反序列化和构造函数之间的一点小秘密
- 关于指针赋初值为NULL的问题
- Qt5 QFileDialog中文英文交界处乱码问题
- 详细解说冲压模具的结构和分类
- 腾讯云不重启修改主机名
- Go实战--也许最快的Go语言Web框架kataras/iris初识四(i18n、filelogger、recaptcha)
- 如何在opensolaris2008.05清除root密码
- GrayWorld 色彩均衡算法
- 管理科学与工程和计算机哪个难考,考研管理科学与工程 管理学和工学哪个好考?...
- 支持向量机理论(SVM)
- Day1 - Python基础
- java玫瑰花代码_js html5渲染的3D玫瑰花(程序员的情人节礼物)
- 想要提高企业分账管理,简单分账系统如何做到?
- spark运行正常,某一个Stage卡住,停止不前异常分析
- Java操作百万数据量Excel导入导出工具类(程序代码教程)