SpringMVC中静态资源的处理

  在SpringMVC中,关于静态资源处理的问题,遇到了一点问题,在此记录一下。

  主要就是关于图片的处理。基本配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

由于在路径映射的配置下,“/”已经匹配了所有的资源请求,所有的请求都会流入控制器,若是请求以*.jpg或者*.png结尾,则没有可以处理这样请求的处理器,那么对于这样的请求便没有响应,也就是讲请求不到图片资源。如此,SpringMVC处理图片便有了三种思路

1.default。在web.xml下配置

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

这样的意思就是使用tomcat默认的静态资源处理器,当请求流入MVC中,没有处理,则会继续匹配下一个处理器,于是就流入到了default中,default是tomcat的默认的servlet,各个服务器都不尽相同。由于执行顺序,所以将default写在dispatcher前面,则请求就会直接处理,效率也最高。

2.在3.0.4版本中,MVC提供了一种新的方式,在MVC的配置文件中,<mvc:resources mapping="" location="" />使用这样的配置,必须要提供<mvc:annotation-driven />。

3.<mvc:default-servlet-handler />

在2、3两种方式内,都是将静态资源的请求交给mvc处理,故而影响性能。不建议使用

posted on 2016-09-03 14:38  拾贝的海盗  阅读(67)  评论(0)    收藏  举报