DispatcherServlet

简介

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处

作用

  1. 文件解析上传,如果请求类型是multipart将通过multipartResolver进行文件上传解析
  2. 通过handlerMapping,将请求映射到处理器(返回一个handlerExecutionChain)
  3. 通过handlerAdapter支持多种类型的适配器
  4. 通过ViewResolver解析逻辑视图名到具体视图实现
  5. 本地化解析
  6. 渲染具体的视图
  7. 遇到异常交给handlerExceptionResolver来解析

配置

<servlet>
        <servlet-name>chapter2</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>chapter2</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • load-on-startup:置1时表示启动容器时初始化该Servlet;
  • url-pattern:“/” 是用来定义默认servlet映射的,/*是所有
  • Dispatcherservlet默认使用webapplicationcontext作为上下文
  • Spring默认的配置文件为:/WEB-INF/[servlet名字]-servlet.xml

    可以通过init-param来改变初始化参数

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-servlet-config.xml</param-value>
</init-param>
使用这种配置,会改变默认加载的配置文件,这种会使用classpath:spring-servlet-config.xml来进行初始化上下文

上下文

通用配置

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
          classpath:spring-common-config.xml,
          classpath:spring-budget-config.xml
      </param-value>
</context-param>
<listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  • Spring集成web环境的通用配置:用于加载web层的bean(service,dao)以便于与其他任何web框架集成
    Contextconfiglocation:表示用于加载bean的配置文件
  • ContextClass:表示用于加载bean的applicationcontext实现类,默认webapplicationcontext

    创建完毕后,会将上下文放在servletcontext中

Dispatchservlet的加载顺序

http servletbean继承http servlet,在web启动时会调用init方法,该方法的主要作用:
  • 将servlet初始化参数(init-param)设置到该组件上(contextattribute,contextClass,namespace,contextconfiglocation),通过beanwrapper简化设值得过程,方便后续使用;
  • 提供紫烈初始化扩展点,initservletbean(),改方法由frameworkServlet覆盖.

    FrameworkServlet继承HttpServletBean,通过initservletbean()进行web上下文初始化,该方法主要做了2件事
    
  • 初始化web上下文;

  • 提供给子类初始化拓展点;

    DispatcherServlet继承FrameworkServlet,实现onrefresh()方法提供的一些前端控制器相关配置Dispatcherservlet初始化过程
    
  • 初始化web上下文,并指定父容器(contextloaderListener)

  • 初始化dispatcherservlet使用的策略,如:handlemapper,handleradapter

DispatcherServlet中使用的特殊的Bean

  1. Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;
  2. HandlerMapping:请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;
  3. HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;
  4. ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;
  5. LocalResover:本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;
  6. ThemeResovler:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;
  7. MultipartResolver:文件上传解析,用于支持文件上传;
  8. HandlerExceptionResolver:处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);
  9. RequestToViewNameTranslator:当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;
  10. FlashMapManager:用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值