Spring MVC-前端控制器

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

DispatcherServlet 主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

1、文件上传解析,如果请求类型是 multipart 将通过 MultipartResolver 进行文件上传解析;
2、通过 HandlerMapping,将请求映射到处理器(返回一个 HandlerExecutionChain ,它包括一个处理器、多个HandlerInterceptor 拦截器);
3、通过 HandlerAdapter 支持多种类型的处理器(HandlerExecutionChain 中的处理器);
4、通过 ViewResolver 解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给 HandlerExceptionResolver 来解析。
1.spring MVC中的前段控制器就是DsipatcherServlet,它在spring MVC框架中的结构图如下:

2.DispatcherServlet其实就是一个Servlet,它继承了HttpServlet这个抽象类。

先来看下该类在的位置:
为了使用它,你需要在你的web应用程序中的web.xml中配置一下,配置如下:

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>
   
这样配置后,在你应用程序中所有请求中带/example的都会被DispatcherServlet拦截到。

对于3.0++的容器,还有另外一种配置方式,那就是用代码方式代替:

	public class MyWebApplicationInitialzer implements WebApplicationInitializer {

	    public void onStartup(ServletContext servletContext) throws ServletException {
		ServletRegistration.Dynamic regist = servletContext.addServlet("dispatcher", new DispatcherServlet());
		regist.setLoadOnStartup(1);
		regist.addMapping("/example/*");
	    }
	}
设置容器加载时就启动,设置映射的路径。

3.每一个DispatcherServlet都有自己的上下文环境(WebApplicationContext),它继承了些上下文环境中的bean,而且可以根据条件自己重写。

下面就是一个继承图解:
4.在web.xml中配置好DispatcherServlet后,容器启动时回去WEB-INF文件夹下去找(默认[servlet-name]-servlet.xml)dispatcherServlet-servlet.xml,解析文件初始化里面中的bean等。

5.在实际的应用中我们一般不使用这种默认的配置,你只需要在web.xml中配置下面的文件就可,下面给一个例子,把param-value换成你自定义就可:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
原文地址:http://www.cnblogs.com/haoke/p/4993273.html


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页