【问题标题】:How to enable browser caching of static content(images, css, js) with Tomcat?如何使用 Tomcat 启用静态内容(图像、css、js)的浏览器缓存?
【发布时间】:2011-05-06 14:49:20
【问题描述】:

如何使用 Tomcat 启用静态内容(图像、css、js)的浏览器缓存? 首选的解决方案是编辑spring MVC 配置文件或 web.xml

【问题讨论】:

    标签: java spring caching tomcat spring-mvc


    【解决方案1】:

    尝试(改变值)

    <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 docs

    【讨论】:

    • 一点修正,正确的标签是“mvc:mapping”而不是“mapping”,即正确的完整标签是:
    • 我应该使用哪个?我目前处于两种都有的情况,想知道是否需要两者。看来我应该选择其中之一。使用 mvc:resources 元素有什么好处吗?
    • 304的情况下,客户端也会向服务器发送一个HTTP请求,那么它是如何受益的
    • @Manish 客户端仍然会向服务器发送 HTTP 请求,但服务器会回复一个微小的 304 响应,而不是传输您可能很大的文件(例如图像、css、js...)返回 200 响应。换句话说,请求/响应的数量是相同的,但响应的大小可能要小得多。
    【解决方案2】:

    如果使用的是 Spring 3.0,&lt;mvc:resources&gt; 是实现静态资源缓存的一种方式。 This link 有一些文档。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-09-19
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2014-08-30
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多