目前我正在使用此处描述的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'并在这里注入,但似乎无法在我自己的包结构中执行此操作? (我认为受保护的构造函数)。
我有两个其他想法(我并不特别喜欢它的声音):
[另外,似乎我的过滤器每次调用都被调用两次...这是我将过滤器连接到条带servlet的方式的副作用吗?]
答案 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调用特别有用。 //