Вы можете написать свой собственный фильтр кэша и настроить его в своем веб-XML.
Здесь вы найдете простой, но отличный пример того, как его реализовать.
в вашем web.xml
вы объявляете свой фильтр:
<filter>
<description>Set HTTP headers for a mapping.</description>
<filter-name>CacheFilter</filter-name>
<filter-class>your.package.CacheFilter</filter-class>
<init-param>
<description>Adds an expires header to the response</description>
<param-name>header</param-name>
<param-value>Expires: Thu, 26 Apr 2012 20:00:00 GMT</param-value>
</init-param>
</filter>
затем сопоставьте его (примените к ответам):
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.js</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.css</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Возможно, вы также захотите использовать фильтр сжатия (таким же образом), чтобы уменьшить загрузку данных, отправляемых с сервера. Эта реализация gzip-фильтра работает у меня уже много лет (вместе с фильтром кеша), и с ними никогда не было проблем.