我有一个 Java/Wicket 页面,它生成一个 JNLP 文件来启动我公司的软件。此类将选择性地获取一些 url 参数并将它们作为参数嵌入到 JNLP 中。当用户启动此 JNLP 文件时,客户端应用程序将根据这些参数执行某些功能。如果客户端软件已经在机器上运行,点击 JNLP 页面将尝试通过远程调用向正在运行的客户端提供这些参数,而不是启动新页面。
这部分是我遇到问题的地方。在 IE、Firefox 和 Chrome 上,我可以打开一个新的客户端,但再次尝试访问相同的 URL 将返回一个 JNLP 文件。我发现清除浏览器缓存可以解决所有浏览器上的这个问题。此外,我似乎无法在 JNLP 类中遇到断点,这强化了我的直觉,即这更多是请求的问题,而不是 Wicket 的奇怪问题。
我将以下代码放在我的页面类中,它扩展了 org.apache.wicket.markup.html.WebPage:
@Override
protected void setHeaders(WebResponse response) {
getPageMap().remove(this);
HttpServletResponse httpServletResponse = response.getHttpServletResponse();
if (httpServletResponse != null) {
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.addHeader("Cache-Control", "no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0");
httpServletResponse.addHeader("Keep-Alive", "timeout=3, max=993");
}
}
这似乎不起作用,因为 Firefox 3.6 似乎仍然缓存了结果。 IE 7 将工作,但只有在尝试我创建的链接几次之后。我对 Web 开发和 Wicket 了解不多,这对我来说是新事物,所以我可能遗漏了一些简单的东西。
TL;DR:如何让 Wicket 页面不缓存在客户端浏览器上?
最佳答案
一些 Wicket 内部使用的 hack(例如参见 org.apache.wicket.markup.html.image.NonCachingImage
的源代码)是向 url 添加随机噪音。
基本上,如果您要生成浏览器调用的 url,您可以添加一个被 Web 应用程序忽略的参数,该参数随机变化并欺骗浏览器忽略其缓存。
关于Java/Wicket - 如何阻止浏览器缓存页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3496891/