Spring MVC(一)--SpringMVC的初始化和流程
SpringMVC是Spring提供给WEB应用的MVC框架,MVC框架一般来说由三部分组成:
- Model:模型层,一般由java bean完成,主要是进行数据库操作;
- View:视图层,用于前端展示,比如jsp、html等;
- Controller:控制层,链接前后端,处理用户请求,起着承前启后的作用;
早期的MVC模式中,Model由java bean扮演,View由jsp扮演,Controller由Servlet扮演,三者组成一个三角形的MVC框架,使得前后端有了一定的分离,而且控制器和模型层的分离使得很多java代码得以重用,但是随着前端设备的多样化和前端各种技术的兴起,前端和后段的交互只变成json数据的交互,导致后端对于jsp的依赖减少,这就出现了Spring MVC的架构。它的最大特点是结构比较松散,在Spring MVC中能够使用JSP、JSON、XML、PDF等各类视图,所以它能满足手机、PC、平板等不同设备中的WEB请求。
一、Spring MVC组件和流程
Spring MVC是基于Servlet的技术,它提供了核心类DispatcherServlet和相关的组件,围绕这个核心类有一个完整的流程,所有的WEB请求都是沿着它所规定的流程进行,所以流程就是它最神秘也是我们所好奇的运行原理。下看一个流程图(备注:图片摘自《JavaEE互联网轻量级框架整合开发-SSM框架》)

Spring MVC执行流程
从上图中可以看出,Spring MVC就是围绕着DispatcherServlet进行的,这个类是继承了WEB容器所提供的Servlet类,所以当WEB容器启动的时候,随着Servlet的初始化,它会执行过程为:
1、首先SpringMVC会根据配置信息,得到URI和处理器之间的映射关系,即处理器映射HandlerMapping,因为处理器上还能加拦截器,从而会形成一个处理器执行链;
2、其次它还会根据上下文初始化视图解析器ViewResolver;
上面两步是初始化时的一些准备工作,当用户发起一个请求时,首先会根据准备好的HandlerMapping找到对应的处理器Handler ,这样就开始执处理器和拦截器组成的执行链,这个执行链的环境需要找处理器适配HandlerAdapter提供,当处理器返回模型和视图的时候DispatcherServlet会把它们交给视图解析器ViewResolver进行解析。需要注意的是,这一步要区分是不是逻辑视图,如果是逻辑视图,那么试图解析器会把模型渲染到视图中,然后响应给用户;如果不是逻辑视图,则直接通过视图渲染数据。
二、Spring MVC的初始化
Spring MVC的初始化主要有两部分组成:
1⃣️初始化Spring IOC
通过配置ContextLoderListener完成
2⃣️初始化映射请求上下文
通过配置DispatcherServlet完成
注意⚠️:如果没有配置Spring IOC的初始化类ContextLoderListener,那么DispatcherServlet在它初始化的时候会对Spring IOC进行初始化,一般来说最好在DispatcherServlet初始化之前就完成Spring IOC初始化。
下面是DispatcherServlet的设计(通过源码可知它们的关系):

从上图可以看出,DispatcherServlet最终是继承由WEB容器提供的HttpServlet实现的。它里面有以下几个组件,这些组件就是Spring MVC的核心部分:
- MultipartResolver:文件解析器,用于支持服务器的文件上传;
- LocaleResolver:国际化解析器,用来提供国际化功能;
- ThemeResolver:主题解析器,用来提供皮肤主题功能;
- HandlerMapping:映射URI和处理器,使控制器得以运行;
- HandlerAdapter:处理器适配器,为不同的处理器提供上下文运行环境;
- HandlerExceptionResolver:处理器异常解析器,用来解析处理器产生的异常;
- RequestToViewNameTranslator:视图逻辑名称转换器,根据逻辑视图的名称找到具体的视图。注意⚠️:当处理器没有返回逻辑视图名时,将请求的URL自动映射为逻辑视图名;
- ViewResolver:视图解析器,当控制器返回后,通过试图解析器会把逻辑视图名进行,从而定位实际视图;
在WEB容器启动的时候,Spring MVC就会初始化上面的这些组件,所以我们不需要对他们进行配置就可以用了。本文先记录以下Spring MVC的流程和初始化,下一篇文章将举个实例说明。
Spring MVC(一)--SpringMVC的初始化和流程的更多相关文章
- 2017.3.31 spring mvc教程(二)核心流程及配置详解
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- Spring MVC源码(二) ----- DispatcherServlet 请求处理流程 面试必问
前端控制器 前端控制器,即所谓的Front Controller,体现的是设计模式中的前端控制器模式.前端控制器处理所有从用户过来的请求.所有用户的请求都要通过前端控制器.SpringMVC框架和其他 ...
- Spring MVC 的springMVC.xml疑问解析
<mvc:annotation-driven /> <mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping ...
- 【spring mvc】springmvc在tomcat中的执行过程
一.WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象(每个web应用程序唯一),它代表当前web应用web容器提供其一个全局的上下文环境,其为后面的spri ...
- Spring mvc Interceptor 解决Session超时配置流程
最近公司内部框架中对Session超时这一功能未实现,由于采用iframe结构,Session超时后,当点击左侧系统菜单时,会在iframe的右侧再次弹出登陆框. 该问题是由于没有设置拦截器造成. 添 ...
- 学习SpringMVC必知必会(2)~走近Spring MVC
一.Spring 基本介绍 1.什么是 Spring MVC? SpringMVC 是 Spring-Frame 框架的子集(Spring-Frame包含了Spring MVC), MVC 框架,(类 ...
- Spring MVC执行的流程
1.Spring MVC应用的开发步骤 a.在web.xml文件中定义前端控制器DispatcherServlet来拦截用户请求.由于Web应用是基于请求/响应架构的应用,所以 不管哪个MVC Web ...
- Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程
初学 Spring MVC , 感觉对于 @ModelAttribute 和 @SessionAttributes 是如何被Spring MVC处理的,这一流程不是很清楚, 经过Google资料,有了 ...
- (一)spring MVC基本概念和流程
MVC的概念 Model(模型):包含数据和行为.不过现在一般都分离开来:Value Object(数据) 和 服务层(行为). View(视图):负责进行模型的展示,一般就是展示给用户的界面. Co ...
随机推荐
- 牛客多校第六场 E Androgynos 自补图
题意: 给定点数,构造自补图,要求输出邻接矩阵,和原图与补图的同构映射. 题解: 只有点数为4k和4k+1的情况才能构造自补图,因为只有这些情况下边数才为偶数. 一种构造方式是,邻接矩阵和同构映射增量 ...
- json的dump和dumps的区别
dumps是将dict转化成str格式,loads是将str转化成dict格式. dump和load也是类似的功能,只是与文件操作结合起来了. In [1]: import json In [2]: ...
- Apache服务器性能如何优化
配置网站,要充分的把系统资源利用出去,榨干系统的一切潜能,让网站速度发挥到极致.Apache,是用户浏览和网站数据的一个中间桥梁.但是在这里,我们虽然做得并不是很多,但是如果心细打理,有些设置也会起到 ...
- Java必备的几个开发工具,你会几个?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 以下是Java技术栈微信公众号发布的所有关于 Java 常用工具干货,会从以下几个方面汇总,本文会长期更新. 开发工具篇 M ...
- php中heredoc使用方法
Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实 ...
- MapReduce应用程序执行过程
- Python全栈开发:选课系统实例
程序目录: bin文件夹下为可执行文件:administrator,students config文件夹下为设置文件,涉及系统参数配置:setting db文件夹为数据类文件,涉及系统的输入输出数据: ...
- angularjs 1 Failed to read the 'selectionStart' property from 'HTMLInputElement':
在找angularjs input(type='number')在获取焦点的时候,文本框内容选中效果,参考了:Select text on input focus,我直接复制他的code之后,在ion ...
- CentOS安装tomcat并且部署Java Web项目具有一定的参考价值
本篇文章主要介绍了CentOS安装tomcat并且部署Java Web项目,具有一定的参考价值,有需要的可以了解一下.(http://m.8682222.com) 1.准备工作 b.因为tomcat的 ...
- itextPDF使用笔记
最近在做报表打印,使用的是itextPDF,第一次用到它,简单做个笔记.主要涉及到字体设置,文字处理操作,表格及单元格设置,绘制一些图形 IText中有三个处理text的类com.lowagie.te ...