【发布时间】:2011-05-06 14:49:20
【问题描述】:
如何使用 Tomcat 启用静态内容(图像、css、js)的浏览器缓存? 首选的解决方案是编辑spring MVC 配置文件或 web.xml
【问题讨论】:
标签: java spring caching tomcat spring-mvc
如何使用 Tomcat 启用静态内容(图像、css、js)的浏览器缓存? 首选的解决方案是编辑spring MVC 配置文件或 web.xml
【问题讨论】:
标签: java spring caching tomcat spring-mvc
尝试(改变值)
<mvc:resources mapping="/static/**" location="/public-resources/"
cache-period="31556926"/>
<mvc:annotation-driven/>
你也可以使用拦截器:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/static/*"/>
<bean id="webContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="31556926"/>
<property name="useExpiresHeader" value="true"/>
<property name="useCacheControlHeader" value="true"/>
<property name="useCacheControlNoStore" value="true"/>
</bean>
</mvc:interceptor>
</mvc:interceptors>
【讨论】:
304的情况下,客户端也会向服务器发送一个HTTP请求,那么它是如何受益的
如果使用的是 Spring 3.0,<mvc:resources> 是实现静态资源缓存的一种方式。 This link 有一些文档。
【讨论】:
对于那些使用Java配置的人,您可以使用ResourceHandlerRegistry管理缓存参数,有一个示例如何为不同的内容类型设置不同的缓存首选项:
@Configuration
@EnableWebMvc
// ...
public class WebConfiguration extends WebMvcConfigurerAdapter {
// ...
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/ui/css/**")
.addResourceLocations("classpath:/WEB-INF/css/")
.setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS));
registry.addResourceHandler("/ui/js/**")
.addResourceLocations("classpath:/WEB-INF/js/")
.setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS));
registry.addResourceHandler("/ui/**")
.addResourceLocations("classpath:/WEB-INF/")
.setCacheControl(CacheControl.noCache());
}
// ...
}
【讨论】: