目前我正在使用此处描述的 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 构造函数)。
我的另外两个想法(听上去我不太喜欢)是:
- 在调用 ActionBean 的所有 JSP 上创建随机缓存键(从而使缓存控制无效 - 实际上)。
- 传入一个 HTTP 参数,然后我可以在 CacheControl 过滤器中检查是否添加缓存控制 header 。
- 我可以只将指令添加到我的 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/