继续开头说些废话,我也不知道什么鬼,每次写着写着经常会写到其他地方去了,太容易分神了。

  这次说一下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+鼠标左键,嘿嘿)

  打开DispatcherServlet这个类的doDispatcher方法

  到这里,就完成一部分了,再之后,ModelAndView返回到前端控制器,我们再来看看视图解析器

 

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

接下来,我们就看看上图中 ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();这里是如何设置视图解析器的。打开这个类并找方法initServletContext(获取容器中的所有视图解析器,这点很是关键,那是不是我写一个视图解析器放进容器,在这里是不是也会取到呢?答案当然是可以取到,这也是后面我们自己定制一个视图解析器的方法,而且,从这里可以看到,我们要自己定制一个组件,只需要实现相应组件的接口,然后丢到容器里就可以了,是不是很简单!)

  viewResolver这个集合肯定很有用,果然,后面马上就用到了

  到这里,大概的过程就走了一遍了,后面的就是模板引擎去渲染页面响应了,没什么说的,具体的还是要自己走走源码就差不多了(估计不会去走源码,咳咳)。

  其实说了这么多,大家也发现了,暂时springboot重点就是那些xxxAutoConfiguration,有了这些自动配置类,才能让我们去关注逻辑,而不是那些机械化的配置。

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

带着萌新看springboot源码04的更多相关文章

  1. 带着萌新看springboot源码8(spring ioc源码 完)

    上一节说到实例化了所有的单实例Bean,后面还有一步遍历 12.完成容器刷新(finishRefresh();) 那个和生命周期有关的后置处理器类型是LifecycleProcessor:监听器原理我 ...

  2. 带着萌新看springboot源码05

    上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不 ...

  3. 带着萌新看springboot源码8(spring ioc源码上)

    emmm.....这次先不说springboot原理,先好好回顾一下以前的注解版spring原理,先把spring原理了解清晰了,再看springboot原理更容易. 要说起spring,最重要的就是 ...

  4. 带着萌新看springboot源码03

    上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码. 这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个 ...

  5. 带着萌新看springboot源码12(启动原理 下)

    先继续接上一篇,那个启动原理还有一点没说完. 6. afterRefresh(context, applicationArguments); 看这个名字就知道,应该就是ioc容器刷新之后的一些操作了, ...

  6. 带着萌新看springboot源码11(springboot启动原理 源码上)

    通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些 ...

  7. 带着萌新看springboot源码10(springboot+JdbcTemplate+druid)

    上一节把springboot和jdbcTemplate大概用法说了一下,以及大概看了一下源码,还说了加载sql文件时的原理. 这一节来看看自动注入JdbcTemplate的原理,顺便用一用Druid数 ...

  8. 带着萌新看springboot源码09(springboot+JdbcTemplate)

    emmm.....常规开局,继续说一下废话,前面简单的说了一下spring的ioc容器创建原理(花了不少时间去看了别人的博客+查了不少资料+自己的理解),相信大家对ioc容器有了一个初步的认识了. s ...

  9. 带着萌新看springboot源码8(spring ioc源码下)

    继续接着上一节,到了第六步(温馨提醒,内容有点小多,不过看完ioc原理就差不多了) 6.注册Bean后置处理器(registerBeanPostProcessors(beanFactory)) 最后一 ...

随机推荐

  1. ES6躬行记(15)——箭头函数和尾调用优化

    一.箭头函数 箭头函数(Arrow Function)是ES6提供的一个很实用的新功能,与普通函数相比,不但在语法上更为简洁,而且在使用时也有更多注意点,下面列出了其中的三点: (1)由于不能作为构造 ...

  2. Android-Animation (1) 视图动画

    Android-Animation (1) 视图动画 学习自: Keegan小钢 :http://keeganlee.me/post/android/20151003 Carson_Ho : http ...

  3. 利用kibana插件对Elasticsearch进行bool查询

    #bool查询#老版本的filtered查询已经被bool代替#用 bool包括 must should must_not filter来完成 ,格式如下:#bool:{#  "filter ...

  4. sudo命令详解

    语法 sudo(选项)(参数) 选项 选项 说明 -b 在后台执行指令: -h 显示帮助: -H 将HOME环境变量设为新身份的HOME环境变量: -k 结束密码的有效期限,也就是下次再执行sudo时 ...

  5. django介绍及路由系统

    第一:Python的web框架介绍 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引 ...

  6. java课程之团队开发冲刺阶段1.6

    一.总结昨天进度 1.依照视频学习了sqlite,但是由于视频的不完整性导致并不知道代码的实际效果怎么样. 二.遇到的问题 1.依据上一条,在date目录下date文件夹中,的确发现了数据库的文件,但 ...

  7. dedecms给图片加水印覆盖整张图片

    位置: /include/image.class.php $wmwidth = $imagewidth - $logowidth; $wmheight = $imageheight - $logohe ...

  8. Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作

    写在前面 上文 Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件主要讲Spring容器创建时通过XmlBeanDefinitionReader读 ...

  9. 单点登录实现原理(SSO)

    简介 单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的保护资源,若用户在某个应用系统中进行注销登录,所有的应用系统都不能再直接访问保护资源,像一些知名的大型网站,如:淘 ...

  10. CVE-2018-20129:DedeCMS V5.7 SP2前台文件上传漏洞

    一.漏洞摘要 漏洞名称: DedeCMS V5.7 SP2前台文件上传漏洞上报日期: 2018-12-11漏洞发现者: 陈灿华产品首页: http://www.dedecms.com/软件链接: ht ...