Java/Wicket - 如何阻止浏览器缓存页面?

标签 java wicket

我有一个 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/

相关文章:

java - 如何从 Wicket 提供动态 JavaScript 文件?

java - CSS 文件不使用 Wicket 刷新(通过 Start.java 在 Intellij 中启动)

Java Swing 集合不行吗?

Java arraylist问题(捕获?)

java - 为什么这段代码会进入无限循环?

java - 找不到页面 404 Apache Tomcat

java - Apache Wicket 中一个类的多个路径

forms - Java Wicket - 发生异常时防止表单创建新选项卡

javascript - Wicket 口和 JavaScript : any way for Wicket to get notified of an updated text?

java - 通过传递一个字符串并将该字符串放在最后一个索引来对 Java List<String> 进行排序