Spring之DispatcherServlet

欢迎加入qq群进行讨论:416842413

DispatcherServlet作用

DispatcherServlet是spring 对于 Servlet API的实现,提供spring web mvc的集中访问点,负责职责的分派,spring ioc 容器的初始化

1、用户发起的请求到DispatcherServlet

2、查找相应的HandlerMapping,将请求映射到处理器

3、通过hanlderAdapter 支持多种类型的处理器(HanlderExecutionChain中的处理器)

4、通过ViewResolver解析逻辑视图到具体视图实现

5、本地化解析

6、渲染具体的视图

7、异常处理(HandlerExceptionResolver)  -->请查看spring 之异常处理章节

而且在流程中是,比较容易进行扩展的

2、spring DispatcherServlet的实现

spring 3.0 中DispatcherServlet的配置


Spring之DispatcherServlet_第1张图片


实现WebApplicationInitializer,而且这个接口是spring 实现Servlet api 暴露出来的接口,从下面的的图中可以看出



Spring之DispatcherServlet_第2张图片

所在,Servlet容器的接口,在spring 中有具体的实现SpringServletContainerInitializer,这个是Servlet容器启动初始化的内容。

接下来,介绍下,要如何在项目代码中进行操作这个WebApplicationInitializer接口


Spring之DispatcherServlet_第3张图片

实现方法onStartup

1、向上下文中注册spring的Servlet (DispatcherServlet)

2、添加初始化参数

2.1contextConfigLocation 是上下文的配置路径,一般用于加载Bean,

2.2 contextClass  是上下文的Context 类型,如AnnotationConfigWebApplicationContextXmlWebApplicationContext

2.3 contextInitializerClassesApplicationContextInitializer的具体实现

这几个参数是什么意思呢,分析源码,会发现,这几个参数是DispatcherServlet的几个属性,在容器初始化的时候,会通过反射去初始化这几个参数,首先看下DispatcherServlet的类图:


Spring之DispatcherServlet_第4张图片
DispatcherServlet 类图

再来看下初始化的方法的调用情况,一并分析下这几个参数的实例化过程


Spring之DispatcherServlet_第5张图片

在Servlet的API中


Spring之DispatcherServlet_第6张图片

这个方法是在初始化的时候,会主动被容器调用,spring 实现该方法,处理的了上面的那几个方法,来配置DispatcherServlet的属性


Spring之DispatcherServlet_第7张图片

而这几个属性是在什么时候会用到呢?

继续来看 HttpServletBean中的init方法 ,在初始化完以后,就调用InitServletBean方法了,这个方法在FrameworkServlet中有具体实现


Spring之DispatcherServlet_第8张图片


Spring之DispatcherServlet_第9张图片


Spring之DispatcherServlet_第10张图片


Spring之DispatcherServlet_第11张图片

到这里,WebApplicationContext 在1这里真正被实例化,同时在2处设置了Context的ConfigLocation变量,再看下configureAndRefreshWebApplicationContext


Spring之DispatcherServlet_第12张图片

在容器创建完以后,会调用初始化容器的方法applyInitializers,这里会调用实现了ApplicationContextInitializer类的所有类,可以作初始化容器环境变量等工作


Spring之DispatcherServlet_第13张图片

到这里,这几个参数的用法,就已经真正被处理完了,接下来就是调用容器的refresh方法,会把相应的bean 注册到容器里,这块内容,会在spring ioc 这章节进行详述。

这是三个参数的解释

另外还有两个内容:

1、load-on-startup:表示启动容器时初始化该Servlet;

2、url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。

3、filter:添加了一个过滤器

这样DispathcerServlet的配置,就结束了。


欢迎加入qq群进行讨论:416842413

你可能感兴趣的:(Spring之DispatcherServlet)