【问题标题】:Stripes 1.5 : running on Tomcat - best way to control HTTP (cache-control) headers?Stripes 1.5:在 Tomcat 上运行 - 控制 HTTP(缓存控制)标头的最佳方式?
【发布时间】:2010-12-15 23:52:06
【问题描述】:

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

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

并像这样将它连接到 stripes 调度程序 servlet:

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

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

我打算尝试扩展“ForwardResolution”并在这里注入,但似乎无法在我自己的包结构中做到这一点? (我认为是受保护的构造函数)。

我的另外两个想法(我不太喜欢它的声音)是:

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

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

【问题讨论】:

    标签: http caching tomcat servlets stripes


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢 (+1) - 两个听起来不错的解决方案。事实上,我已经了解到 Stripes 的更高版本具有一些缓存控制功能:我将用这些信息回答我自己的问题。
    【解决方案2】:

    实际上 - 进一步挖掘发现,stripes 1.5 具有用于控制 HTTP 缓存标头的注释机制:

    http://www.stripesframework.org/display/stripes/News
    

    // 客户端缓存控制。新的 @HttpCache 注释可以应用于 ActionBean 类和/或事件处理程序方法,以控制客户端如何缓存响应。方法上的注释会覆盖类上的注释,并且注释是从超类继承的。这对于来自 IE 的 AJAX 调用特别有用。 //

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2011-01-13
      • 2013-04-01
      • 2010-09-09
      相关资源
      最近更新 更多