How to enable browser caching of static content(images, css, js) with Tomcat? Preferable solution will be editingspring MVC config files or web.xml
If Spring 3.0 is being used, <mvc:resources>
is one way to implement caching of static resources. This link has some documentation.
try (with changing the values)
<mvc:resources mapping="/static/**" location="/public-resources/"
cache-period="31556926"/>
<mvc:annotation-driven/>
You can also use an interceptor:
<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>
See the MVC docs
For those who use Java configuration, you can manage caching parameters using ResourceHandlerRegistry
, there is example how do I set up different caching preferences for different content types:
@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());
}
// ...
}