Stripes 1.5:在Tomcat上运行 - 控制HTTP(缓存控制)头的最佳方法?

时间:2010-12-15 23:52:07

标签: http caching tomcat servlets stripes

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

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

并将它连接到条带调度程序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 Filter中检查是否要添加缓存控件头。
  3. 我可以将指令添加到我的JSP中吗?建议的方法是什么。
  4. [另外,似乎我的过滤器每次调用都被调用两次...这是我将过滤器连接到条带servlet的方式的副作用吗?]

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

实际上 - 进一步挖掘发现条带1.5有一个用于控制HTTP缓存头的注释机制:

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

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