tomcat - 如何在 Apache Tomcat 中的单个 JS 文件上设置 Expires HTTP header ?

标签 tomcat caching gwt http-headers

我有一个 js 文件,缓存时间为 5-10 分钟,具体取决于我是使用 eclipse 中的 tomcat(通过 GWT 插件)还是独立启动 tomcat。
这很奇怪,因为我使用 GWT 作为我的框架并且根本不应该缓存这个文件(对于那些了解 GWT 的人来说,它是一个 nocache.js 文件)。 我读过 GWT Google group thread这是一个容器配置问题,在其他地方我需要在包含的 HTML 文件中定义它。
基本上,我现在很困惑,因为我不知道如何让这个文件不被缓存。 请注意,此 js 是由 GWT 生成的,我无法修改它。

感谢您的帮助, 一泰 alt text alt text

最佳答案

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

可选:可配置过滤器

您还可以通过使用 <init-param> 从 web.xml 中配置您的过滤器。小号:

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

这使得使用以下方式访问您的初始参数成为可能:

filterConfig.getInitParameter("myParam")

关于tomcat - 如何在 Apache Tomcat 中的单个 JS 文件上设置 Expires HTTP header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540786/

相关文章:

java - maven如何解决javax.servlet.servlet-api和javax.servlet.javax.servlet-api的冲突

java - 使用SyncProxy测试服务: "IOException while receiving RPC response"

android - 查看 Android 键盘缓存

node.js - nodejs 集群 - 在一个工作人员上保持客户端 session

css - 如何将嵌套的 css 类设置为 CssResources

java - 如何使用 TextCell 对象作为 CellList<String> 构造函数的参数来实例化 CellList<String> 对象?

tomcat - RollingFileAppender 没有创建日志文件

java - setenv.sh 不工作

tomcat - Apache CXF + Spring Java 配置 + 替换 beans.xml

java - Google App Engine 上的 Datanucleus/JDO 二级缓存