学习笔记——springMVC架构
springMVC是一个MVC模式的实现,至于具体什么是MVC大佬们写了多很详细的博文给出一些链接:
链接1、
SpringMVC框架“简单”执行流程
1、首先用户(或浏览器)发送请求到服务端。
2、在服务端配置好的的前端控制器DispatcherServlet就会接受这个请求,这个前端控制器很重要,他负责把用户的请求,有序的送给各个springMVC的组件来执行(当然这个前端控制器也是一个springmvc的一个组件)。
3、当数据都处理好之后(比如:如果用户请求访问一个页面,而这个页面需要在后台做一些处理,比如给页面添加时间、用户信息等),前端控制器DispatcherServlet会将处理好的数据传给用户(或者浏览器)。

提示:从上面看前端控制器DispatcherServlet是个很厉害的类整个springMVC的流程都有他参与。那么是不是只要有他就能完成整个springmvc的流程了呢?当然不是,上面只是介绍了最简单的流程。下面会分析下前端控制器DispatcherServlet到底做了什么。
SpringMVC框架“详细”执行流程

从上面的图可以看到在整个流程的几个调用(2、4、8、10、11)中都是由前端控制器来决定的,这样看来这个前端控制器更像是一个中央控制器,但是不知道为什么看了好多博文都称他为前端控制器。而从这个前端控制器的名称和继承来看,他本质上也是一个Servlet。
下面详细看一下步骤:
1、用户从前端发送请求,可能是请求一个html页面、可能是请求一个jsp页面等等等等等。
2、前端控制器DispatcherServlet接收到这个请求,然后调用处理器映射器HandlerMapping。这又是一个springmvc的组件。
这个处理器映射器HandlerMapping会根据用户的URL请求去找指定的Handler(也就是处理器,也就是我们编写的Controller类)并生成这个处理器的实例,但此时不会执行这个Handler处理器,他是根据我们配置的映射来指定的处理器的,比如我门用注解写的@RequestMapping("/login")。
3、处理器在找到指定的Handler处理器,如果有拦截器也会一起被找到,在这步处理器映射器返回给前端映射器一个HandlerExecutionChain,看名字处理执行链,就知道他是按照顺序执行一系列的拦截器和处理器的。这里可以不对这个类进行特别了解,只要知道其中有一些处理器handler和拦截器就行了。
4、这一步前端控制器通过处理器适配器HandlerAdapter来执行刚才从处理器映射器那里获得的处理器。这里为什么不用前端控制器直接盗用处理器,而使用处理器适配器来执行处理器呢?springMVC这里使用了适配者模式。
5、处理器适配器调用处理器。
6、调用的处理器返回ModelAndView对象。这个对象包含和View视图信息和Model数据信息。
7、处理器适配器又把刚才得到的ModelAndView给前端控制器。
8、前端控制器将刚刚获得的ModelAndView对象传给视图解析器ViewResolver让他来处理。
9、视图解析器返回View给前端控制器。
10、前端控制器对获得的视图View进行解析(将ModelAndView中的模型数据填充到视图中)。
11、将解析后的View返回给用户。
至此,整个流程走完,辛苦前端控制器了。
SpringMVC的架构——组件
上面说了框架的执行流程,显然,只有一个前端控制器这个组件是不够的,还用到了其他很多springMVC组件,下面来看些这些组件,混个脸熟。
(这个器那个器的,刚开始看的时候头都大了)
1、前端控制器DispatcherServlet
这是个类主要负责转发请求、响应结果、处理执行流程啊等等,中央处理器一样别的组件都围着他转。他说调用哪个组件就调用哪个组件。
继承关系:

看到了吧,他也是servelt的一些高级实现。
2、处理器映射器HandlerMapping
是个接口,用来处理映射请求的。
他有一些实现,继承关系如下:

3、处理器适配器HandlerAdapter
这也是个接口,负责执行处理器Handler,也就是Controller。这时适配器设计模式的应用,这样要想执行更多类型的处理器的时候,值需要拓展适配器就行了,其他代码不用动。
实现类和继承关系:

4、视图解析器ViewResolver
他也是个接口,用来生成View的,比如freeMakerView、jspView等。。
实现类和继承关系:

5、View视图接口
上面的视图解析器是生成的视图View,这个View接口又不同的实现类,用于实现不同的视图。也就是返回给用户的数据,可能不一定是可视化的html、jsp类似的结果,也可能是xml或者json这种数据。
实现类和继承关系如下:

如上面,又freeMaker的实现、JstlView的是的实现、又xxxJsonView的实现。用于返回给用户不同的数据结果。
学习笔记——springMVC架构的更多相关文章
- Adaptive AUTOSAR 学习笔记 6 - 架构 - 方法论和 Manifest
本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 AP:AUTOSAR Adap ...
- (转)SpringMVC学习(二)——SpringMVC架构及组件
http://blog.csdn.net/yerenyuan_pku/article/details/72231385 相信大家通过前文的学习,已经对SpringMVC这个框架多少有些理解了.还记得上 ...
- SpringMVC学习(二)——SpringMVC架构及组件(及其运行原理)-转载
相信大家通过前文的学习,已经对SpringMVC这个框架多少有些理解了.还记得上一篇文章中SpringMVC的处理流程吗? 这个图大致描述了SpringMVC的整个处理流程,这个流程图还是相对来说比 ...
- JAVA NIO学习笔记1 - 架构简介
最近项目中遇到不少NIO相关知识,之前对这块接触得较少,算是我的一个盲区,打算花点时间学习,简单做一点个人学习总结. 简介 NIO(New IO)是JDK1.4以后推出的全新IO API,相比传统IO ...
- C# 学习笔记 三层架构系列(控件一)
下面是我两周的学习总结:这是我写给自己的,如果哪位朋友有幸看到这篇文章就是缘分.如果所说的内容不对,就请纠正.勿喷!!! 想要将两周的学习知识通过文字.通过代码.通过图片储备起来,以防自己那天思维短路 ...
- [学习笔记]BS架构与CS架构
整理自:http://www.iteye.com/problems/102411 前两天面试的时候被问到这个问题,没有回答上来因此在这里学习整理一下. B/S架构 B/S架构的全称为Browser/S ...
- Adaptive AUTOSAR 学习笔记 4 - 架构
本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 AP:AUTOSAR Adap ...
- Adaptive AUTOSAR 学习笔记 5 - 架构 - 物理视图
本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 AP:AUTOSAR Adap ...
- Dubbo 用户手册学习笔记 —— Dubbo架构
Dubbo的架构 节点角色说明 节点 角色说明 Provider 服务提供方 Consumer 服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监 ...
随机推荐
- 每天进步一点点------Allegro 布线完成后如何修改线宽
一.如果要改变整个一条导线的宽度 1.在find栏里选择Cline; 2.在PCB中选择要改的导线,点击右键,选择Change Width 3.在对话框中输入你想要的线宽 3.如果要改变整个导线 ...
- 每天进步一点点------Allegro 蛇形走线
对于高速数据总线,如果芯片内部没有延时调节功能,通常使用蛇形走线来调整延时以满足时序要求,也就是通常所说的等长线.蛇形走线的目的是调整延时,所以这一类网络都有延迟或相对延迟约束.所以在做蛇形走线调整时 ...
- 每天进步一点点------Xilinx DCM
时钟---锁相环 1. Xilinx DCM 数字时钟管理模块(Digital Clock Manager,DCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,Dela ...
- [Note]后缀数组
后缀数组 代码 void rsort() { for (int i = 1; i <= m; ++i) tax[i] = 0; for (int i = 1; i <= n; ++i) + ...
- UVA 11520 Fill the Square(模拟)
题目链接:https://vjudge.net/problem/UVA-11520 这道题我们发现$n\leq 10$,所以直接进行暴力枚举. 因为根据字典序所以每个位置试一下即可,这样的复杂度不过也 ...
- Bugku-CTF之login2(SKCTF)(hint:union,命令执行)
Day40 login2(SKCTF) http://123.206.31.85:49165/ SKCTF{xxxxxxxxxxxxxxxxxxxxx} hint:union,命令执行
- Linux - CentOS7 命令行快捷键简介
1. 概述 CentOS7 下输入命令的一些快捷键 2. 快捷键 1. 移动 单个字符 ctrl + b/f 单个单词 alt + b/f 行首行尾 ctrl + a/e 2. 编辑 删除单个字符 c ...
- Atcoder Beginner Contest 147D(按位处理)
把每个数字每一位上二进制数字取出,求答案时直接用N个数里这一位是0的个数乘上这一位是1的个数然后乘上二的这一位次方,注意所有可能溢出的地方都要对mod取模. #define HAVE_STRUCT_T ...
- 作业2:go实现一个压测工具,具备upload功能
作业:go实现压测工具,具备upload功能. upload内容是.tar.gz,使用http协议上传. 要求:upload的文件名,http目的地址灵活可配. deadline:2019.4.30
- Mac电脑安装openresty
安装brew 软件仓库, /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ ...