ClientBundle
, представленный в GWT 2.0, позволяет объединять изображения и другие ресурсы в один файл, этот файл кэшируется навсегда , что приводит к меньшему количеству запросов к серверу.
При этом GWTвводит концепцию, которую они называют идеальным кэшированием.Он работает, разбивая ваше приложение на несколько файлов с именем что-то вроде .cache.html, и часть md5 всегда меняется, когда меняется код вашего приложения или ресурсы.Затем есть скрипт начальной загрузки, который содержит логику для поиска правильного файла <md5>.cache.html
и его загрузки.Начальная загрузка никогда не должна кэшироваться.
На вашем сервере приложений вам необходимо настроить его примерно так (в данном случае Apache)
<Files *.nocache.*>
ExpiresDefault "access"
</Files>
<Files *.cache.*>
ExpiresDefault "now plus 1 year"
</Files>
В этом случае он настроен на кеширование для одногогод.Насколько я знаю, нет никакого параметра для кэширования навсегда, это означает только очень большое время истечения срока действия.
Кэширование Tomcat
В случае с Tomcat, насколько я знаю, контроль кэша отсутствуетпоэтому это должно быть сделано вручную путем установки правильных заголовков HTTP.Это можно автоматизировать с помощью фильтров.
/*Please don't use this in production!*/
public class CacheFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//cache everything for one year
response.addHeader("Cache-Control", "max-age=31556926");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) {
this.fc = filterConfig;
}
public void destroy() {
this.fc = null;
}
}
Затем сопоставьте фильтр в tomcat или производных (например, glassfish) в web.xml:
<filter>
<filter-name>cachingFilter</filter-name>
<filter-class>CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cachingFilter</filter-name>
<url-pattern>*.cache.*</url-pattern>
</filter-mapping>