博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小编带着小白看springboot源码4
阅读量:5919 次
发布时间:2019-06-19

本文共 1698 字,大约阅读时间需要 5 分钟。

好了继续上回说道,这次说一下springboot对于springmvc的大概整个流程,以请求动态网页为例 。

1.梳理一下springmvc的大概流程

首先是客户端(浏览器)发送请求到前端控制器(dispatcherServlet)-------------->前端控制器就会去调用处理器映射器(HandlerMapping),去寻找真正的Handler(其实就是controller),返回执行器链(HandlerExecutionChain,本质上就是目标Handler和一些拦截器组成的)给前端控制器----------->前端控制器就去调用处理器适配器(HandlerAdapter)去执行这个Handler,返回模型数据和视图(ModelAndView)给前端控制器------------->前端控制器从ModelAndView中获取逻辑视图(可以理解为controller返回的字符串),前端控制器调用视图解析器(ViewResolver)找到真正的视图(可以理解为就是加了一个前后缀,例如上节将的去类路径下找 “/template/xxx.html”)-------------->将真正的视图返回到前端控制器------------>模板引擎去渲染解析真正的视图响应客户端(ssm中就是去把里面写的jsp标签内容以及html标签内容,都变成servlet,编译成字节码文件,运行,然后响应客户端)

2.springboot的流程

其实吧,springboot暂时可以理解为ssm中的springmvc+spring,虽然说这个理解不准确,但是有助于理解,不然脑中就只有一个印象:springboot很牛逼,做web应用特快,不需要配置,还是一个框架。。emmmm.....

所以,以前springmvc配置的东西,springboot里面也有,前端控制器,映射器,适配器,视图解析器等在springboot中也有,就看你会不会找。(不用想,肯定在那xxxAutoConfiguration中!不然加载那么多自动配置类吃多了啊....)

好,第一步,我们先来找找前端控制器,在那些自动配置类中,有个叫做DispatcherServletAutoConfiguration,打开这个类(ctrl+鼠标左键,嘿嘿)

小编带着小白看springboot源码4

打开DispatcherServlet这个类的doDispatcher方法

小编带着小白看springboot源码4
小编带着小白看springboot源码4
小编带着小白看springboot源码4
到这里,就完成一部分了,再之后,ModelAndView返回到前端控制器,我们再来看看视图解析器

打开这个配置类,并找到视图解析器的组件

小编带着小白看springboot源码4
小编带着小白看springboot源码4
接下来,我们就看看上图中 ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();这里是如何设置视图解析器的。打开这个类并找方法initServletContext(获取容器中的所有视图解析器,这点很是关键,那是不是我写一个视图解析器放进容器,在这里是不是也会取到呢?答案当然是可以取到,这也是后面我们自己定制一个视图解析器的方法,而且,从这里可以看到,我们要自己定制一个组件,只需要实现相应组件的接口,然后丢到容器里就可以了,是不是很简单!)
小编带着小白看springboot源码4
小编带着小白看springboot源码4
viewResolver这个集合肯定很有用,果然,后面马上就用到了
小编带着小白看springboot源码4
小编带着小白看springboot源码4
到这里,大概的过程就走了一遍了,后面的就是模板引擎去渲染页面响应了,没什么说的,具体的还是要自己走走源码就差不多了(估计不会去走源码,咳咳)。不会走源码的可点击链接学习:
其实说了这么多,大家也发现了,暂时springboot重点就是那些xxxAutoConfiguration,有了这些自动配置类,才能让我们去关注逻辑,而不是那些机械化的配置。

下一节就说说我们往这些组件添加更多功能,因为由于一些特殊原因,springboot自动配置的功能不能满足我们的要求。或者干脆了说,我们想要把springboot某个组件替换掉,用我们自己写的组件,多好。

转载于:https://blog.51cto.com/13842645/2332030

你可能感兴趣的文章
程序员保持快乐活跃的6个好习惯(转)
查看>>
【转】linux /usr/bin/ld cannot find 解决
查看>>
SQL中各数据类型的长度、精度
查看>>
webpack-dev-server
查看>>
python发送邮件
查看>>
DIY一个自己的音乐播放器
查看>>
golang使用protobuf
查看>>
少年,你想在vue的世界里掌控雷电吗,没错,看这个分享就对了!
查看>>
安装Yaconf
查看>>
Agora iOS SDK-快速入门
查看>>
响应式开发网站
查看>>
细说JS数组
查看>>
Adaptive Execution让Spark SQL更高效更好用
查看>>
如何应对大促?看京东核心中间件团队的高可用实践指南
查看>>
C# 7.1、7.2特性追踪
查看>>
苏宁的Node.js实践:不低于Java的渲染性能、安全稳定迭代快
查看>>
Jenkins将致力于提升稳定性、易用性和云原生兼容性
查看>>
从零开始用Python实现k近邻算法(附代码、数据集)
查看>>
Spring注解@Primary的意思
查看>>
行业看点 | 军事专家:量子技术将引起战争基因突变,颠覆未来战争形态
查看>>