Как установить HTTP-заголовок Expires для одного JS-файла в Apache Tomcat? - PullRequest
6 голосов
/ 22 августа 2010

У меня есть файл js, который кэшируется между 5-10 минутами, в зависимости от того, использую ли я tomcat из затмения (через плагин GWT) или запускаю tomcat как автономный.
Это странно, как яЯ использую GWT в качестве моей платформы, и этот файл вообще не должен кэшироваться (это файл nocache.js для тех из вас, кто знает GWT).Я прочитал в ветке группы Google GWT , что это проблема конфигурации контейнера, а где-то еще, что это то, что мне нужно определить в содержащем HTML-файле.
По сути, я сейчас сбит с толкукак я понятия не имею, как получить этот файл, чтобы не кешировать.Обратите внимание, что этот js генерируется GWT, и я не могу его изменить.

Спасибо за любую помощь, Иттай alt text alt text

Ответы [ 2 ]

15 голосов
/ 22 августа 2010

Использование javax.servlet.Filter

Одним из способов сделать это в переносном режиме (на разных серверах приложений) является использование фильтров. В вашем web.xml добавьте следующее:

  <filter>
    <filter-name>headersFilter</filter-name>
    <filter-class>MyHeadersFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>headersFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

Затем реализуйте свой MyHeadersFilter как:

public class MyHeadersFilter implements Filter {

  @Override
  public void doFilter(final ServletRequest request,
         final ServletResponse response, final FilterChain chain)
         throws IOException, ServletException {

      final HttpServletRequest httpRequest = (HttpServletRequest) request;
      final String requestUri = httpRequest.getRequestURI();

      final HttpServletResponse httpResponse = (HttpServletResponse) response;


      if (requestUri.contains(".nocache.")) {
        httpResponse.addHeader("Cache-Control", "no-cache");
        ...

      } else if (...) {
        ...
      }

      chain.doFilter(request, response);
  }
}

Дополнительно: настраиваемые фильтры

Вы также можете настроить свой фильтр из файла web.xml, используя <init-param> s:

  <filter>
    <filter-name>headersFilter</filter-name>
    <filter-class>MyHeadersFilter</filter-class>
    <init-param>
        <param-name>myParam</param-name>
        <param-value>myValue</param-value>
    </init-param>
  </filter>

Добавьте в MyHeadersFilter следующее:

    private FilterConfig filterConfig;

    @Override
    public void init(final FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy() {
        this.filterConfig = null;
    }

Это позволяет получить доступ к вашим init-param (s), используя:

filterConfig.getInitParameter("myParam")
0 голосов
/ 07 января 2015

Существует фильтр, доступный в tomcat 7

<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType image</param-name>
<param-value>access plus 10 days</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

Более подробную информацию вы можете найти здесь

https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/ExpiresFilter.html

...