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

  这次说一下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. .Net异步关键字async/await的最终理解

    由于之前的项目中自己突然想试试异步action,于是使用了一下,突然就对异步action的执行流程以及原理及其好处产生了兴趣,再参考了一些文章之后,就做了下归类. 我们可以不需要太深入的理解底层,但是 ...

  2. POJ 3751 JAVA

    题意: 对于给定的采用”yyyy/mm/dd”加24小时制(用短横线”-”连接)来表示日期和时间的字符串, 请编程实现将其转换成”mm/dd/yyyy”加12小时制格式的字符串,末尾加上pm或者am. ...

  3. C++输出

    setiosflags 意思就是设置输入输出的标志iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移 ...

  4. 用idea 创建一个spring小demo,基于xml文件配置

    1.首先,File->new->project ,进入新增项目页面 或者在 2.勾选spring,然后点击下一步 3.修改项目名称和项目位置 进入页面后 5.创建一个spring配置文件 ...

  5. 继承ipkPlayer中出现的一些错误汇总

    1.下载完ffmpeg后,我们再在终端执行下面两个命令: cd ios./compile-ffmpeg.sh clean./compile-ffmpeg.sh all 大体流程如下  这里如果出现 x ...

  6. PLC不能初始化问题

    检索COM 类工厂中 CLSID 为 <28e68f9a-8d75-11d1-8dc3-3c302a000000> 的组件时失败,原因是出现以下错误: 80040154 解决方案: Win ...

  7. 从url中获得域名

    import java.net.MalformedURLException; import java.net.URL; /** * * @author csh * */ public class AA ...

  8. redhat 6 红帽6 Linux 网络配置

    [root@ORAMYSQL ~]# cd /etc/sysconfig/network-scripts/ 切换到网卡配置目录 [root@ORAMYSQL network-scripts]# vi ...

  9. ps入门学习

    快捷键 打开 ctrl+O 切换显示窗口 ctrl+tab 隐藏工具栏和面板  tab 只隐藏面板不隐藏工具栏  shift+tab 切换屏幕模式  F 文件的新建与格式 1.新建文档Ctrl+N,存 ...

  10. SSIS - 6.序列容器和优先约束

    一.多样的优先约束(看例子) 1)打开一个空白的SSIS包,拖拽4个脚本任务到设计面板上,重命名后连接起来,如下图所示. 2)执行包,可以看到任务执行成功.之后我们改变C和D之间的优先约束为“失败”. ...