springMvc里的mvc_resources与静态资源的访问

在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL。配置如下:

1
2
3
4
5
6
7
8
9
10
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

这表示名字为mvc-dispatcher的servlet会处理一切的url对应的请求,那么我们怎么让servlet来处理项目中的静态资源呢?这里有两种方法。

  1. 另外使用一个servlet来处理静态资源。若我们的资源放置在webapps文件夹下的resources文件夹中,那么我们可以用名字为default的servlet来处理静态资源。因此我们还需要在上述配置的基础上加上以下配置:
1
2
3
4
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>resources/* </url-pattern>
</servlet-mapping>

这表示default的servlet会处理url中为resources/*的对应的请求。这样,当你把你的image,css已经其他文件放在resources文件中时,spring就可以找到它啦。

  1. 采用spring自带mvc:resources方法。首先找到你定义的那个servlet的xml文件,如本例子中,servlet的名字叫mvc-dispatcher,因此需要找到mvc-dispatcher-servlet.xml文件,并在该文件中插入以下配置:
1
2
<mvc:annotation-driven/>
<mvc:resources mapping="/resources/**/" location="/resources/"/>

这样,就不必另外添加一个mvc来处理静态资源。而mvc知道静态资源所处的位置为resources文件夹。

两种方法都可以将spring mvc配置处理静态资源。

在SpringMVC3.0之后推荐使用一:

1
2
3

<!-- 静态资源访问 -->
<mvc:default-servlet-handler/>

以下两种在SpringMVC3.0之前可以使用

也可以使用二:

1
2
3
4
5
<!-- 静态资源访问
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
-->

也可以使用三:

web.xml里添加如下的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

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

</servlet-mapping>

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

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