Spring3 MVC DispatcherServlet 配置问题

1. Spring MVC 是通过servlet来进行转发的,一般在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>classpath:spring-mvc.xml</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>

如果url-pattern配置的是/* 则默认是会拦截所有的资源,包括html、css、jpg等静态资源,也包括jsp页面等。

由于这些资源在后台都没有给其配置相应的Controller去处理,所有会报错404. 

有两种方式解决:

1. url-pattern不直接连接所有资源,而是

<url-pattern>*.action</url-pattern>
这样就只拦截action结尾的请求,所以所有请求都要加上.action

2. 在spring的mvc配置文件中加上:

<mvc:default-servlet-handler/>

这样就将没有找到对应的控制器的请求(如一些静态资源等)交给默认的servlet去处理。

 

但如果采用第二种方式<mvc:default-servlet-handler/>,不处理的话,访问jsp等页面的时候,

会直接把其当作txt来处理,会把jsp的源码直接返回给浏览器。

所以在配置的时候可以把 /* 修改为 /

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</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>

 

 

posted on 2014-05-29 11:22  Ranger0526  阅读(268)  评论(0编辑  收藏  举报

导航