http - 条纹 1.5 : running on Tomcat - best way to control HTTP (cache-control) headers?

标签 http caching tomcat servlets stripes

目前我正在使用此处描述的 Servlet 过滤器的修改版本:

http://onjava.com/pub/a/onjava/2004/03/03/filters.html

并且像这样将它连接到 stripes dispatcher servlet:

 <filter-mapping>
        <filter-name>CacheControl</filter-name>
        <servlet-name>StripesDispatcher</servlet-name>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

哪个有效:但具有控制我所有内容的效果 - 我如何才能控制每个 JSP 和/或每个 actionBean 方法?

我打算尝试扩展“ForwardResolution”并在此处注入(inject),但似乎无法在我自己的包结构中执行此操作? (我认为是 protected 构造函数)。

我的另外两个想法(听上去我不太喜欢)是:

  1. 在调用 ActionBean 的所有 JSP 上创建随机缓存键(从而使缓存控制无效 - 实际上)。
  2. 传入一个 HTTP 参数,然后我可以在 CacheControl 过滤器中检查是否添加缓存控制 header 。
  3. 我可以只将指令添加到我的 JSP 中吗?推荐的做法是什么。

[顺便说一下,我的过滤器似乎每次调用都会被调用两次...这可能是我将过滤器连接到 stripes servlet 的方式的副作用吗?]

最佳答案

我将从后面开始 - 你的过滤器被调用了两次,可能是因为同一个页面请求了两个资源 - 例如页面和 css。或者进行 ajax 调用。

然后,如果你想控制每个请求资源的缓存,这里有两个 servlet-only 解决方案。我不知道条纹,所以那里可能有更好的条纹:

  • 创建实用程序类+方法,比如 CacheUtils.addCacheHeaders(response)。在此方法中,将所有缓存 header 添加到响应中。在任何你喜欢的地方调用它——一行用于添加缓存。这是一种程序化的方法

  • 在过滤器的 init-param 中定义一个(逗号分隔的)请求 url 列表。 init(..) 方法解析参数,将其存储在列表中,仅当当前请求 uri (request.getRequestURI()) 匹配时才应用缓存列表中的一个。这是一种声明式方法

关于http - 条纹 1.5 : running on Tomcat - best way to control HTTP (cache-control) headers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456189/

相关文章:

oracle - 如何启用功能结果缓存

eclipse - 如何防止 Eclipse Indigo 在 45 秒后关闭我的服务器?

Java .War文件编译

http - 我可以模拟来自一台客户端机器的重 http 负载吗

language-agnostic - 除了文件或数据库,还有哪些缓存方法可用?

c# - 抛开OO设计模式以在战略游戏中获得更好的性能?

spring - 创建名称为“PersistenceExceptionTranslationPostProcessor 的 bean 时出错嵌套异常 NoClassDefFoundError : org/apache/juli/logging/LogFactory

model-view-controller - MVC : add http header: controller or view?

http - 提供身份验证时,代理会缓存 HTTP 响应吗?

http - 我应该如何清理网址,以免人们在其中输入汉字或 á 或其他内容?