2011-01-11 10 views
6

私は私のWebアプリケーションのルートに春3 MVCディスパッチャサーブレットを構成して、MVCを使用してきました:ドキュメントで説明したように静的なコンテンツを提供するためのリソース: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-static-resourcesは春のMVCのMVCでのキャッシングを許可:リソースタグ

GoogleのChromeブラウザの監査では、リソースが明示的にキャッシュ不可能であることがわかります。同じブラウザが応答と共に送信されるヘッダは以下の通りです:

Cache-Control:max-age=31556926, must-revalidate 
Content-Length:1022 
Content-Type:image/png 
Date:Tue, 11 Jan 2011 00:20:07 GMT 
Expires:Wed, 11 Jan 2012 06:08:53 GMT 
Last-Modified:Mon, 29 Nov 2010 19:53:48 GMT 

リソースをキャッシュ可能にするためには何が必要ですか?

+0

あなたはMVCのキャッシュ期間の属性を設定しなかった:

"must-revalidate"

は、デフォルトでは無効になって、あなたもこのような何かを書くことができますか? – DwB

+0

yepであり、Cache-Controlのmax-ageに設定された値を見ることができます。今夜私はSpringのETagフィルタをセットアップし、それがこの問題を解決するかどうかを見ていきます。 – digitaljoel

+0

ETagフィルタは問題を修正しましたか?私は同じ問題を抱えています。 – les2

答えて

1

多分、org.springframework.web.servlet.mvc.WebContentInterceptorはあなたを助けることができますか?インターセプタのリストに追加してください:

<mvc:interceptors> 
    <bean class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
     <property name="cacheMappings"> 
      <props> 
       <prop key="/ajax/promoCodes">300</prop> 
       <prop key="/ajax/options">0</prop> 
      </props> 
     </property> 
    </bean> 
</mvc:interceptors> 
+0

そのクラスのjavadocは、私が探しているように見えません。 – digitaljoel

3

Spring Framework 4.2以降では、this is now fixed with more flexible Cache-Control header valuesです。アプリケーションの設定ファイルにリソースエントリ:

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**") 
       .addResourceLocations("/static/") 
       .setCacheControl(CacheControl.maxAge(30, TimeUnit.DAYS).cachePublic()); 
    } 

} 
+0

4.2より前のバージョンで同じことをする方法はありますか? –

+0

私が知っているわけではありませんが、現時点では、Spring 3.xが数日でEOLになり、4.3が新しいLTSバージョンであるため、4.3にアップグレードするのが最良の選択です。 –

+0

返信ありがとう、私は春をアップグレードしています:) –