欢迎加入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的配置
实现WebApplicationInitializer,而且这个接口是spring 实现Servlet api 暴露出来的接口,从下面的的图中可以看出
所在,Servlet容器的接口,在spring 中有具体的实现SpringServletContainerInitializer,这个是Servlet容器启动初始化的内容。
接下来,介绍下,要如何在项目代码中进行操作这个WebApplicationInitializer接口
实现方法onStartup
1、向上下文中注册spring的Servlet (DispatcherServlet)
2、添加初始化参数
2.1contextConfigLocation 是上下文的配置路径,一般用于加载Bean,
2.2 contextClass 是上下文的Context 类型,如AnnotationConfigWebApplicationContextXmlWebApplicationContext
2.3 contextInitializerClassesApplicationContextInitializer的具体实现
这几个参数是什么意思呢,分析源码,会发现,这几个参数是DispatcherServlet的几个属性,在容器初始化的时候,会通过反射去初始化这几个参数,首先看下DispatcherServlet的类图:
DispatcherServlet 类图再来看下初始化的方法的调用情况,一并分析下这几个参数的实例化过程
在Servlet的API中
这个方法是在初始化的时候,会主动被容器调用,spring 实现该方法,处理的了上面的那几个方法,来配置DispatcherServlet的属性
而这几个属性是在什么时候会用到呢?
继续来看 HttpServletBean中的init方法 ,在初始化完以后,就调用InitServletBean方法了,这个方法在FrameworkServlet中有具体实现
到这里,WebApplicationContext 在1这里真正被实例化,同时在2处设置了Context的ConfigLocation变量,再看下configureAndRefreshWebApplicationContext
在容器创建完以后,会调用初始化容器的方法applyInitializers,这里会调用实现了ApplicationContextInitializer类的所有类,可以作初始化容器环境变量等工作
到这里,这几个参数的用法,就已经真正被处理完了,接下来就是调用容器的refresh方法,会把相应的bean 注册到容器里,这块内容,会在spring ioc 这章节进行详述。
这是三个参数的解释
另外还有两个内容:
1、load-on-startup:表示启动容器时初始化该Servlet;
2、url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
3、filter:添加了一个过滤器
这样DispathcerServlet的配置,就结束了。
欢迎加入qq群进行讨论:416842413
网友评论