3

我正在将 Java 1.6 小程序迁移到 Java 1.7。我们的其中一个小程序会定期点击 URL 以检索动态状态值:

https://host/myapp/path/to/status

然后根据最新的状态值进行更新。自从升级到 Java 1.7 后,我的客户端没有检索到最新的状态值。我在 Java 控制台中看到这样的条目:

CacheEntry[https://host/myapp/path/to/status]: updateAvailable=true,lastModified=Wed Dec 31 17:00:00 MST 1969,length=82

看起来客户端对该 URL 有一些缓存值,实际上并没有从服务器检索最新的动态值。

这可以作为 1.6 小程序正常工作,也可以作为 1.7 独立 Java 应用程序正常工作。作为 1.7 小程序运行时,如何禁用或绕过此缓存行为?

4

5 回答 5

3

我已经通过在服务器响应中使用以下 HTTP 标头解决了这个问题:

Cache-Control: no-cache, no-store, no-transform

现在我的 Java 1.7 小程序每次都从服务器获取数据。显然,Oracle 在 Java 1.7 中改变了 applet 对这些标头的响应方式。以前(当我们使用 Java 1.6 小程序时),我们有以下标头:

Cache-Control: no-cache

这在 Java 1.6 中有效,但在 1.7 中无效。

于 2013-08-28T18:28:01.763 回答
2

Java小程序有类似的问题,这解决了它:

转到控制面板或系统偏好设置)> Java >常规>设置,然后取消选中“在我的计算机上保留临时文件”框。

于 2013-06-19T00:44:24.903 回答
0

对我来说,单独使用 setUseCaches(false) 是行不通的。但是调用以下两种方法确实有效:

connection.setUseCaches(false);
connection.setDefaultUseCaches(false);

我怀疑原因是我的原始网址重定向到另一个网址。上面的代码应该适用于所有情况。

于 2015-01-19T22:28:52.607 回答
0

我有同样的问题。我尝试使用URLConnection.setUsesCaches(false),但这绝对没有任何作用。

我必须将以下内容添加到 apache 的 http 配置文件中。然后它起作用了。

<Directory /foo>
    <FilesMatch "\.(xml)$">
        Header set Cache-Control "no-cache, no-store, no-transform"
    </FilesMatch>
</Directory>
于 2013-11-05T23:42:59.253 回答
0

我已经解决了这个也发生在我身上的问题。

我在 URL 的末尾添加了一些虚假参数,例如日期时间或每次调用 url 时会发生什么变化。

对于我自己的解决方案:

我生成一个日期字符串

SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssz" );  
String today = formatter.format( new java.util.Date() );

之后,当我调用 url 时,我将日期字符串放在 url 的末尾

new URL("http://url.to.something?fake_query_string=" + today);

使用这个解决方案,它将把 java 当作一个新的 url 来欺骗,所以这个 url 没有任何缓存,那么 java 总是会检索数据。

PS。这不是最好的解决方案,但它救了我。

于 2014-12-09T09:36:47.383 回答