1

目前我正在使用此处描述的 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 过滤器中检查是否添加缓存控制标头。
  3. 我可以将指令添加到我的 JSP 吗?这样做的推荐方法是什么。

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

4

2 回答 2

2

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

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

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

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

于 2010-12-16T06:38:57.603 回答
2

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

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

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

于 2010-12-16T10:56:26.730 回答