如何在Spring MVC 4中缓存控制多个资源位置

时间:2016-03-15 16:06:50

标签: java spring spring-mvc caching

我们正在使用WebContentInterceptor来阻止对动态资源的缓存,但是无法将缓存标头添加到多个位置的静态资源中。

主要问题是来自依赖jars(bootstrap)的静态内容(glyphicons)被赋予no-cache标头,如果浏览器(IE 11 ..公司环境)被刷新,则字形图消失。

// servlet-context.xml

<mvc:annotation-driven ... />
<mvc:resources mapping="/resources/**" location="/resources/" cache-period="3600" />
<mvc:default-servlet-handler />

... 

<mvc:interceptor>
    <mvc:mapping path="/**"/>
    <mvc:exclude-mapping path="/resources/**" />
    <bean id="noCacheWebContentInterceptor"
        class="org.springframework.web.servlet.mvc.WebContentInterceptor">
            <property name="cacheSeconds" value="0"/>
            <property name="useExpiresHeader" value="true"/>
            <property name="useCacheControlHeader" value="true"/>
            <property name="useCacheControlNoStore" value="true"/>
    </bean>
</mvc:interceptor>

这可以将缓存周期添加到/ resources /和no-cache中的静态资源,其他一切,我只需要在jar依赖项中添加一个缓存周期。我尝试了不同的资源映射,例如:

<mvc:resources mapping="/resources/**" location="/resources/, /webjars/" cache-period="3600" />
<mvc:resources mapping="/resources/**" location="/resources/, classpath:/META-INF/resources/" cache-period="3600" />

还尝试创建其他单独的资源映射,并为拦截器添加另一个mvc:exclude-mapping路径,但没有成功。我不确定我是否没有获得这些依赖关系罐的正确路径,或者是否可以映射这些位置,或者我是否只是做了其他错误。

0 个答案:

没有答案