首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Apache Tomcat中对单个JS文件设置Expires HTTP头?

如何在Apache Tomcat中对单个JS文件设置Expires HTTP头?
EN

Stack Overflow用户
提问于 2010-08-22 16:48:03
回答 2查看 9.9K关注 0票数 6

我有一个js文件,它被缓存了5-10分钟,这取决于我是在eclipse中使用tomcat (通过GWT插件)还是作为独立的tomcat启动。

这很奇怪,因为我使用GWT作为框架,而这个文件根本不应该被缓存(对于那些了解GWT的人来说,它是一个nocache.js文件)。我在GWT Google group thread上读到它是一个容器配置问题,而在其他地方,它是我需要在包含的HTML文件中定义的东西。

基本上,我现在很困惑,因为我不知道如何让这个文件不缓存。请注意,此js是由GWT生成的,我无法对其进行修改。

谢谢你的帮助,伊泰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-22 18:43:51

使用javax.servlet.Filter

以一种可移植的方式(跨不同的应用服务器)实现这一点的一种方法是使用过滤器。在您的web.xml中添加以下内容:

代码语言:javascript
复制
  <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:

代码语言:javascript
复制
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);
  }
}

可选:可配置筛选器

您还可以通过使用<init-param>s从web.xml配置筛选器:

代码语言:javascript
复制
  <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:

代码语言:javascript
复制
    private FilterConfig filterConfig;

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

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

这使得使用以下命令访问init-param成为可能:

代码语言:javascript
复制
filterConfig.getInitParameter("myParam")
票数 15
EN

Stack Overflow用户

发布于 2015-01-07 22:39:28

tomcat 7中有一个可用的过滤器

代码语言:javascript
复制
<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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3540786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档