Подробная информация о решении Павла:
public class ResponseCachingFilter extends WebContentInterceptor implements
Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
this.preHandle((HttpServletRequest) request,
(HttpServletResponse) response, chain);
} catch (Exception e) {
throw new ServletException(e);
}
chain.doFilter(request, response);
}
...
web.xml:
<filter>
<filter-name>responseCachingFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>responseCachingFilter</filter-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.gif</url-pattern>
<url-pattern>*.css</url-pattern>
</filter-mapping>
и в контексте приложения (верхний уровень, т.е. не mvc-servlet):
<bean id="responseCachingFilter" class="lala.ResponseCachingFilter">
<property name="cacheSeconds" value="0" />
<property name="useExpiresHeader" value="true" />
<property name="useCacheControlHeader" value="true" />
<property name="useCacheControlNoStore" value="true" />
<property name="cacheMappings">
<props>
<!-- cache for one month -->
<prop key="/**/*.html">2592000</prop>
<prop key="/**/*.htm">2592000</prop>
<prop key="/**/*.jpg">2592000</prop>
<prop key="/**/*.gif">2592000</prop>
<prop key="/**/*.css">2592000</prop>
<prop key="/**/*.js">2592000</prop>
</props>
</property>
</bean>