Spring技术揭幕----DispatcherServlet
Spring MVC是一个MVC模式的实现。在Spring MVC的使用中,需要在web.xml中配置DispatcherServlet,也就是说其核心是一个Servlet,这个DispatcherServlet实现的是Sun的J2EE核心模式中的前端控制器模式(Front Controller),所有的Web请求都需要通过它来处理,进行转发、匹配、数据处理后,并转由页面进行展现,因此这个DispatcherServlet可以看成是Spring MVC实现最为核心的部分。
web.xml中配置dispatcherServlet
<servlet>
<servlet-name>portrait</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-si-portrait-mvc.xml</param-value>
</init-param>
</servlet>
Spring的上下文体系通过ContextLoader和DispatcherServlet建立并初始化的过程。在完成对ContextLoaderListener的初始化以后,Web容器开始初始化DispatcherServlet,这个初始化的启动与在web.xml中对载入次序的定义有关。DispatcherServlet会建立自己的上下文来持有Spring MVC的Bean对象,在建立这个自己持有的IoC容器时,会从ServletContext中得到根上下文作为DispatcherServlet持有上下文的双亲上下文。再对自己持有的上下文进行初始化,最后把自己持有的这个上下文保存到ServletContext中,供日后检索和使用。

DispatcherServlet的工作大致可以分为两部分,一个是初始化部分InitServletBean()启动,通过initWebApplicationContext方法最终调用DispatcherServlet的initStrategies方法,另一个是对Http请求进行相应作为一个Servlet,Web容器会调用Servlet的doGet()和doPost()方法,在经过FrameworkServlet的processRequest()简单处理后,会调用doService。最后调用重要的doDispatch().
Spring MVC对HTTP请求的分发处理
在MVC框架初始化完成之后,对HTTP请求的处理是在doService()方法中完成的,DispatcherServlet是HttpServlet的子类,与其他HttpServlet一样,通过Doservice()来相应HTTP的请求。对请求的处理实际上是由doDispatch()来完成,它是DispatcherServlet完成Dispatcher的主要方法,包括准备ModelAndView,调用getHandler来响应HTTP的请求,然后通过执行Handler的处理来得到返回的ModelAndView结果,最后把这个ModelAndView对象交给相应的视图对象去呈现。
Spring MVC的实现大致由以下几个步骤完成:
1)建立Controller控制器和HTTP请求之间的映射关系,由在handlerMapping中封装的HandlerExecutionChain对象来完成,在堆Controller控制器和HTTP请求的映射关系的配置是在Bean定义中描述,并在IOC容器初始化时,通过初始化HandlerMapping来完成的,这些定义的映射关系会被载入到一个handlerMap中使用。
2)在初始化为Spring MVC接收HTTP请求并完成相应处理做好准备,在MVC接收到HTTP请求的时候,DispatcherServlet会根据具体的URL请求信息,在HandlerMapping中进行查询,从而得到对应的HandlerExecutionChain.在它的里面封装了配置的Controller,这个请求对应的Controller会完成请求的响应动作,生成需要的ModelAndView对象,这个对象就像它的名字所表示的一样,可以从对象中获得ModelAndView对象,从该对象中获得Model模型数据和视图对象。
3)DispatcherServlet把获得的模型数据交给特定的视图对象,从而完成这些数据的视图呈现工作。
Spring技术揭幕----DispatcherServlet的更多相关文章
- Spring MVC之DispatcherServlet初始化详解
Spring作为一个优秀的web框架,其运行是基于Tomcat的.在我们前面的讲解中,Spring的驱动都是使用的ClassPathXmlApplicationContext,并且都是直接在main方 ...
- Spring技术内幕:设计理念和整体架构概述(转)
程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...
- Spring Mvc中DispatcherServlet和Servlet的区别小结
在web开发过程中开始接触的是servlet,用来处理用户请求.这几年随着spring 框架越来越成熟,几乎成了java web开发界的主流框架.既然这么受欢迎肯定有它的优点,spring框架在原来的 ...
- 《spring技术内幕》读书笔记(1)——什么是POJO模式
今天在看<spring技术内幕>,第一章中多次提到了使用POJO来完成开发,就百度了一下,在此保留 1. 什么是POJO POJO的名称有多种,pure old java obje ...
- Spring技术内幕:SpringIOC原理学习总结
前一段时候我把Spring技术内幕的关于IOC原理一章看完,感觉代码太多,不好掌握,我特意又各方搜集了一些关于IOC原理的资料,特加深一下印象,以便真正掌握IOC的原理. IOC的思想是:Spring ...
- Spring MVC中DispatcherServlet工作原理探究
转:http://blog.csdn.net/zhouyuqwert/article/details/6853730 下面类图将主要的类及方法抽离出来,以便查看方便,根据类的结构来说明整个请求是如何工 ...
- Spring mvc中DispatcherServlet详解
简介 DispatcherServlet是前端控制器设计模式的实现,提供SpringWebMVC的集中访问点,而且负责职责的分派,而且与spring IOC容器无缝集成,从而可以获得Spring的优势 ...
- spring自动扫描、DispatcherServlet初始化流程、spring控制器Controller 过程剖析
spring自动扫描1.自动扫描解析器ComponentScanBeanDefinitionParser,从doScan开始扫描解析指定包路径下的类注解信息并注册到工厂容器中. 2.进入后findCa ...
- [转] EJB 3和Spring技术体系比较
最近在学习EJB 3,对于SSH与EJB3,一直不太明白“即生瑜,何生亮?”,今天无意看到一篇旧文,比较系统的对比了这二种技术架构,转载于此: 原文出处:http://www.51cto.com/sp ...
随机推荐
- .htaccess更改目录下的默认主页
我们知道apache的配置文件httpd.conf可以配置网站目录的默认主页.配置文件该部分定义如下: #DirectoryIndex: sets the file that Apache will ...
- dll的编写和使用
备忘: 1-1: def方式创建:VC6找不到stdafx.h,所以创建空工程,stdafx 里面功能太高端,不用不影响.DLL工程建立好后,新建一CPP文件,叫dlltest.cpp,直接去copy ...
- Pig与Hive的区别
Language 在Hive中可以执行 插入/删除 等操作,但是Pig中我没有发现有可以 插入 数据的方法,请允许我暂且认为这是最大的不同点吧. Schemas Hive中至少还有一个“表”的概念, ...
- 需要使用id内省方法--responsesToSelector: 的两个地方
第一个: 当从数组中取出对象,并且需要执行某个方法时,最好使用responsesToSelector:判断该对象是否可以 执行该方法.因为在OC数组中,取出的对象都是 id 类型的. 第二个: 在MV ...
- c/c++面试题(2)
4.已知String类的原型是: class String { public: String(const char* str = NULL); //普通的构造函数 String(const Str ...
- 实现Android4.4系统设置分页滑动浏览功能
需求描述: 由于手机功能越来越完善,相应的偏好设置也就越来越多:从用户体验的角度考虑,为了让用户能够在短时间内对常用的偏好设置进行操作,如WIFI,蜂窝数据等.单独将一些常用的设置功能单独展示出来,已 ...
- OpenResty 安装及使用(第一篇安装)
OpenResty搭建 1.openResty介绍 OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模 ...
- <转>两个蛋蛋的故事
来自为知笔记(Wiz)
- MVC解决方案发布IIS 登录页面需要输入两次帐号问题
IIS项目在本地VS2013 解决方案中正常登录可以进入.发布IIS时出现需要输入两次帐号密码进入主页面最终发现是web.config文件配置问题 web.config 默认配置 <authen ...
- iOS-Xcode7 网络连接
Xcode7 网络无法连接问题 1.The resource could not be loaded because the App Transport Security policy require ...