3 Stimmen

Java 1.7 Applet CacheEntry verhindert dynamische Aktualisierungen

Ich migriere Java 1.6-Applets auf Java 1.7. Eines unserer Applets ruft periodisch eine URL auf, um einen dynamischen Statuswert abzurufen:

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

Und dann aktualisiert es sich entsprechend dem neuesten Statuswert. Seit dem Upgrade auf Java 1.7 ruft mein Client den neuesten Statuswert nicht ab. Ich sehe Einträge wie diese in der Java-Konsole:

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

Es scheint, dass der Client einen zwischengespeicherten Wert für diese URL hat und tatsächlich nicht den neuesten dynamischen Wert vom Server abruft.

Dies hat als 1.6-Applet gut funktioniert und funktioniert auch als eigenständige Java-Anwendung in Version 1.7 einwandfrei. Wie kann ich dieses Zwischenspeicherverhalten deaktivieren oder umgehen, wenn ich als 1.7-Applet ausgeführt werde?

3voto

Jeff Punkte 227

Ich habe dieses Problem gelöst, indem ich den folgenden HTTP-Header in der Serverantwort verwendet habe:

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

Jetzt ruft mein Java 1.7 Applet die Daten jedes Mal vom Server ab. Angeblich hat Oracle geändert, wie Applets auf diese Header in Java 1.7 reagieren. Früher (als wir Java 1.6 Applets verwendet haben) hatten wir den folgenden Header:

Cache-Control: no-cache

und das hat in Java 1.6 funktioniert, aber nicht in 1.7.

2voto

vmarche Punkte 65

Hatte ein ähnliches Problem mit einem Java-Applet und das hat es behoben:

Gehen Sie zu Systemsteuerung (oder Systemeinstellungen) > Java > Allgemein > Einstellungen und dann deaktivieren Sie das Kästchen, das besagt "Temporäre Dateien auf meinem Computer behalten".

0voto

Judd Punkte 111

Ich habe das gleiche Problem. Ich habe versucht, URLConnection.setUsesCaches(false) zu verwenden, aber das bringt absolut nichts.

Ich musste folgendes zu einer http-Konfigurationsdatei für Apache hinzufügen. Dann hat es funktioniert.

        Header set Cache-Control "no-cache, no-store, no-transform"

0voto

Jessada Dissopa Punkte 37

Ich habe bereits dieses Problem gelöst, das mir auch passiert ist.

Ich füge einige falsche Argumente am Ende der URL hinzu, wie z.B. Datum Zeit oder was auch immer, das sich jedes Mal ändert, wenn ich die URL aufrufe.

für meine eigene Lösung:

Ich generiere einen Datumsstring

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

und danach, wenn ich die URL aufrufe, setze ich den Datumsstring ans Ende der URL

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

Mit dieser Lösung täuscht es Java als eine neue URL, so dass es keinen Cache für diese URL gibt und Java die Daten immer abrufen würde.

PS. Es wäre nicht die beste Lösung, aber es hilft mir.

0voto

Saeid Nourian Punkte 1497

Für mich hat alleiniges Verwenden von setUseCaches(false) nicht funktioniert. Aber das Aufrufen beider folgende Methoden hat funktioniert:

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

Ich vermute, der Grund dafür ist, dass meine originale URL zu einer anderen URL weiterleitet. Der obige Code sollte für alle Fälle funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X