zoukankan      html  css  js  c++  java
  • DispatcherServlet--Spring的前置控制器作用简介

    参考网址:http://jinnianshilongnian.iteye.com/blog/1602617

    Struts有一个ActionServlet,用来完成前置控制器(分发器)的功能。其实,所有MVC框架都有一个Servlet来完成这个功能,Spring也不例外,Spring中的前置控制器(分发器)就是DispatcherServlet.

    在百度百科这样介绍它的作用:

    DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

    一、org.springframework.web.servlet.DispatcherServlet在web.xml中的配置

    所有的分发器都要在web.xml中定义,定义分发器的示例代码如下:

    <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value> </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    代码说明:

    <servlet-name>是<servlet>的属性,用来定义servlet的名称,这里是dispatcherServlet。
    <servlet-class>是<servlet>的属性,用来定义上面定义servlet的具体实现类,这里是org.springframework.web.servlet.DispatcherServlet。
    <init-param>是<servlet>的属性,用来定义servlet的初始化参数,这里指定要初始化WEB-INF文件夹下的dispatcherServlet-servlet.xml。如果spring-mvc.xml的命名方式是前面定义servlet-name+"-servlet",则可以不用定义这个初始化参数,(Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”),Spring会处理这个配置文件。由此可见,Spring的配置文件也可放置在其他位置,只要在这里指定就可以了。如果定义了多个配置文件,则用“,”分隔即可。
    <servlet-mapping>定义了所有以.do结尾的请求,都要经过分发器。

    当DispatcherServlet配置好后,一旦DispatcherServlet接受到请求,DispatcherServlet就开始处理请求了。

    二、org.springframework.web.servlet.DispatcherServlet的相关源码说明
    源码1:
    protected void doService(HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            ......
    
            request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE,
                    getWebApplicationContext());
            ......
        }

    通过上面源码得知,DispatcherServlet会找到上下文WebApplicationContext(其指定的实现类为XmlWebApplicationContext),并将它绑定到一个属性上(默认属性名为WEB_APPLICATION_CONTEXT_ATTRIBUTE),以便控制器能够使用WebApplicationContext。

    源码2:

    protected void initStrategies(ApplicationContext context) {
            initMultipartResolver(context);
            initLocaleResolver(context);
            initThemeResolver(context);
            initHandlerMappings(context);
            initHandlerAdapters(context);
            initHandlerExceptionResolvers(context);
            initRequestToViewNameTranslator(context);
            initViewResolvers(context);
            initFlashMapManager(context);
        }

    从如上代码可以看出,DispatcherServlet启动时会进行我们需要的Web层Bean的配置,如HandlerMapping、HandlerAdapter等,而且如果我们没有配置,还会给我们提供默认的配置。

     



  • 相关阅读:
    ElasticSearch集群配置
    基于visual Studio2013解决C语言竞赛题之0806平均分
    基于visual Studio2013解决C语言竞赛题之0805成绩输出
    基于visual Studio2013解决C语言竞赛题之0804成绩筛选
    基于visual Studio2013解决C语言竞赛题之0803报数
    基于visual Studio2013解决C语言竞赛题之0802图书信息查询
    基于visual Studio2013解决C语言竞赛题之0801信息输出
    基于visual Studio2013解决C语言竞赛题之0710排序函数
    基于visual Studio2013解决C语言竞赛题之0708字符串查找
    基于visual Studio2013解决C语言竞赛题之0707月份输出
  • 原文地址:https://www.cnblogs.com/wql025/p/4805634.html
Copyright © 2011-2022 走看看