Wicket:正确缓存CSS资源

时间:2011-05-25 21:58:01

标签: java caching wicket cache-control

我们刚刚从GWT转移到Wicket 1.4。虽然总的来说非常开心,但我们仍然对GWT变得简单的某些事情有一点学习曲线。其中之一是资源缓存。

如何配置我们的应用资源(特别是CSS),以便每次页面请求都不会下载它们?

我们在某些页面元素上看到一些闪烁,因为样式没有立即应用,可能是因为每次都要下载样式表。我追踪了我们的日志,事实上,我几乎每个页面请求都会看到样式表的请求。

我们在HTML文件中直接引用CSS,如下所示:

    <link href="/css/ag.screen.css" rel="stylesheet" type="text/css">
    <link href="/css/ag.base.css" rel="stylesheet" type="text/css">

我不确定这是否重要,但我们所有的网页都安装了IndexedParamUrlCodingStrategy,因为我们需要它们都是可收藏的,并且具有特定的网址结构。

我尝试实现StefanFußenegger在他的blog中建议的内容(即通过标题贡献而不是直接在HTML中引用CSS),但这似乎没有帮助(我尝试检查标题“卷曲 - 我“)。

是否有标准方法为Wicket 1.4中的资源设置Cache-Control或Expiration标头?是否值得为此转向Wicket 1.5? (我很犹豫,因为它尚未正式发布)。

编辑:我刚给了1.5另一次尝试,但缺乏文档确实是一个障碍。 IndexedParamUrlCodingStrategy和相关的类已经不见了,迁移指南几乎无话可说。

编辑2:我刚注意到一些非常奇怪的事情 - 当我通过直接输入网址或点击BookmarkablePageLink(页面上引用的资源)到达我的某个页面时图像等)似乎被缓存(我在日志中看不到它们的请求)。但是,如果我通过表单提交到达同一页面,则会再次下载所有资源。为什么表单提交会导致页面上引用的资源被重新下载?

4 个答案:

答案 0 :(得分:1)

由于您要转移到Wicket,我建议您使用1.5RC4.2。看看关于这个RC的bug报告,我认为下一个可能是1.5.0Final。 关于缓存,请参阅此Wiki页面:https://cwiki.apache.org/WICKET/caching-in-wicket-15.html。 它大概是1.5,但它也说明了与1.4的区别。

答案 1 :(得分:1)

我和你有同样的需求,我需要更多地缓存资源客户端。

现在我被困在1.4.x之下,我找到了一个适合我的解决方案。 我使用StefanFußenegger写的伟大图书馆,并提供了here。实现非常简单,我在生产模式下使用StaticResourceVersionProvider。到目前为止我没有任何问题(现在我的客户坚如磐石)。

如果您需要有关我如何使用此解决方案的详细信息,请不要犹豫。

答案 2 :(得分:0)

您可以在开箱即用的资源上获得指纹。可以非常轻松地修改或更改创建缓存指纹的策略。

the Wicket wiki page about how resource caching works in 1.5有更多信息。

答案 3 :(得分:0)

要管理非Wicket资源的标头,您可以使用web.xml中WicketFilter之前列出的普通Servlet过滤器。只需检查请求Url,如果文件扩展名是.css / .js / ...那么只需在响应中设置缓存头。 关于** Wicket 1.5中的UrlCodingStrategies阅读http://wicketinaction.com/2011/07/wicket-1-5-request-mapper/和接下来的两篇文章。我希望你能更清楚。