Spring MVC学习笔记(一) DispatcherServlet分析

来源:互联网 发布:node v6.9.4 x64.msi 编辑:程序博客网 时间:2024/05/17 03:21

        要想使用SpringMVC,必须得了解DispatcherServlet,配置DispatcherServlet是使用SpringMVC的第一步。

        DispatcherServlet类位于spring的spring-webmvc-3.2.0.RC1.jar包中,完整的类路径为org.springframework.web.servlet.DispatcherServlet

        DispatcherServlet是一个servlet,作为一个前端控制器,负责接收请求,并且根据规则分发请求到后端的controller。因为它是一个servlet,所以我们在web.xml中可以作如下配置: 

 <servlet>     <servlet-name>springMVC</servlet-name>     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     <init-param>classpath*:/springMVC.xml</init-param>     <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>     <servlet-name>springMVC</servlet-name>     <url-pattern>/</url-pattern> </servlet-mapping>

        一个应用中可以有多个DispathcherServlet,不同的DispathcherServlet之间通过各自的servlet名称来区分,每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中。

        <init-param>配置项中指定配置文件的位置和名称,如果此处没有配置,则在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean。同时此处还有多种其他配置方式:

    (1)<param-value>classpath*:springMVC-mvc.xml</param-value>

    (2)<param-value>/WEB-INF/classes/springMVC.xml</param-value>

    (3)多个配置文件可以用逗号隔开

关于该配置文件的内容在以后的文章中会给出展开的详细说明,此处不再进一步分析。

        <load-on-startup>是启动时间,此处配置的1指的是让该servlet随着容器的启动而启动。

        <url-pattern>是定义拦截的匹配规则,注意此处不能是/*。为了实现REST风格,此处使用了/,一旦使用/,就会拦截了包括静态文件(*.js,*.png)在内的所有请求,这显然是不行的,现有以下方式来处理该问题:

    (1)使用<mvc:default-servlet-handler/>来解决该问题。即在springMVC配置文件中加上这句话就ok了。该句话会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回。
DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet。

    (2)使用各个容器自己默认的Servlet容器来解决该问题。Tomcat, Jetty, JBoss,  GlassFish 自带的默认Servlet的名字 -- "default",我们在DispatcherServlet之前添加以下配置,让默认的容器先拦截请求,这样静态文件就不被进入DispatcherServlet中。

 <servlet-mapping>     <servlet-name>default</servlet-name>     <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping>     <servlet-name>default</servlet-name>     <url-pattern>*.png</url-pattern> </servlet-mapping>

        至此DispatcherServlet配置及分析完成。

0 0
原创粉丝点击