次のスキームを持つようにSpring MVCを構成しようとしています:
- 「{context}/resources」で始まるすべての URL はキャッシュ可能である必要があります
- 他の URL はキャッシュ可能であってはなりません (私の場合、「リソース」によるものはすべて動的ページです)。
最初の部分は、 mvc:resource を使用して非常に簡単です:
<mvc:resources mapping="/resources/**" location="..." cache-period="3600"/>
私は第二部のためにちょっと迷っています。デフォルトでは、「動的リソース」にはキャッシュ関連の情報がないようです(キャッシュ制御ヘッダー、プラグマなどはありません...)。一部のブラウザーは物事をキャッシュする場合があり (FF)、一部のブラウザーはキャッシュしない場合があります (Chrome)。これは理解できます。
と WebContentInterceptor の組み合わせを使用して一部のページをキャッシュ可能にする方法については、多くの投稿があります。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/foobar/**"/>
<bean id="webContentInterceptor" 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>
</mvc:interceptors>
ただし、私の場合、一致するパス式がないため、これはそのままでは使用できません (除外は不可能であることが知られています)。
これを表現できる方法はありますか: * mvc:resources がリソースに対して行うこと * 他のすべてのページに対して「何か」を行う ?
私が見ることができる唯一の代替手段は、何かがリソースであるかどうかをチェックするカスタム Interceptor を作成することですが、キャッシュ プロパティをグローバルに定義できないのは少し奇妙に思えます。
ありがとう