如何使用Tomcat启用浏览器缓存静态内容(图片,CSS,JS)?

19

如何使用Tomcat启用浏览器缓存静态内容(图片、CSS、JS)?最好的解决方案是编辑Spring MVC配置文件或web.xml。

3个回答

23
尝试(通过更改值)
<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>

查看MVC文档


1
一个微小的更正,正确的标签是“mvc:mapping”,而不是“mapping”,即正确的完整标签是:<mvc:mapping path="/static/*"/>。 - dillip
我应该使用哪个?我目前处于这样一种情况,我有两个,想知道是否都需要。似乎我应该选择其中一个。使用mvc:resources元素是否有任何好处? - Peter Perháč
1
304的情况下,客户端向服务器发送HTTP请求,这有什么好处? - Manish Kumar
@Manish 客户端仍将向服务器发送HTTP请求,但服务器将以微小的304响应回复,而不是通过200响应返回您的潜在大文件(例如图像,CSS,JS...)。换句话说,请求/响应的数量相同,但响应的大小可能会显着减小。 - Nils Schmidt

1
如果正在使用Spring 3.0,则<mvc:resources>是实现静态资源缓存的一种方法。此链接有一些文档。

0

对于使用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());
    }

    // ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接