• 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等,而且如果我们没有配置,还会给我们提供默认的配置。

     



  • 相关阅读:
    String.getBytes()未设置字符集导致打印的pdf乱码
    git更新代码报错,error: The following untracked working tree files would be overwritten by ch
    thinkpad X1 extreme 安装Ubuntu 18.04.2 LTS
    plsql的sql窗口中文模糊查询没有作用
    mysql 触发器和存储过程组合使用,实现定时触发操作
    css 实现table 隔行变色
    meta标签详解:源http://blog.csdn.net/kongjiea/article/details/17092413
    Spring+Quartz实现定时任务的配置方法
    ECToch随笔
    转载:ecshop自定义销量
  • 原文地址:https://www.cnblogs.com/wql025/p/4805634.html
Copyright © 2020-2023  润新知