Spring之DispatcherServlet

作者: David_jim | 来源:发表于2017-04-11 13:38 被阅读321次

    欢迎加入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

    相关文章

      网友评论

        本文标题:Spring之DispatcherServlet

        本文链接:https://www.haomeiwen.com/subject/hjfsattx.html