代码之家  ›  专栏  ›  技术社区  ›  Ittai

如何在ApacheTomcat中为单个JS文件设置ExpiresHTTP头?

  •  6
  • Ittai  · 技术社区  · 16 年前

    我有一个 js 缓存在5-10分钟之间的文件,这取决于我是使用eclipse中的tomcat(通过GWT插件)还是以独立方式启动tomcat。
    我用这个很奇怪 GWT 因为我的框架和这个文件根本不应该被缓存(这是一个nocache.js公司向你们中了解GWT的人归档)。 我读过一本书 GWT Google group thread 这是一个容器配置问题,在其他地方,我需要在包含的HTML文件中定义它。
    基本上,我现在很困惑,因为我不知道如何让这个文件不缓存。 请注意,这个js是由 GWT公司 我不能修改它。

    谢谢你的帮助, alt text alt text

    2 回复  |  直到 12 年前
        1
  •  15
  •   Chris Lercher    16 年前

    使用javax.servlet.Filter文件

      <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>
    

    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);
      }
    }
    

    可选:可配置过滤器

    您还可以从网站.xml,通过使用 <init-param> 学生:

      <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参数:

    filterConfig.getInitParameter("myParam")
    
        2
  •  0
  •   Saurabh    11 年前

    tomcat7中有一个可用的过滤器

    <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