# Hat Tomcat einen Cache?



## anonym (8. Dez 2009)

Hallo, 

ich hab hier ein JSP in Tomcat, das anhand von Daten, die es von einem Webservice erhält, entscheidet, was es dem Nutzer zeigt. Wenn ich das Ding öffne, ist alles okay. Dann lösche ich die Datenbank auf die der Webservice zugreift (über einen Link im JSP). Benutze ich anschließend die Zurück- Taste meines Browsers ist alles wie vorher. So, als wären die Daten noch vorhanden. Ein manueller Blick in die Datenbank zeigt: Sie sind wirklich weg. 
Erst wenn ich aktualisiere, scheint Tomcat zu merken, dass sich die Daten geändert haben. Das Problem betrifft sowohl den Firefox als auch IE, das Log des Tomcat beweist, dass er keine erneute Anfrage an den Webservice gerichtet hat. Greift Tomcat da auf irgendeinen internen Cache zurück? Wenn ja: Kann ich ihm das verbieten? 

Vielen Dank schonmal, 
anonym


----------



## maki (8. Dez 2009)

Dein Problem ist der Browser Cache, also lokal.


----------



## anonym (8. Dez 2009)

Dachte ich auch erst, deshalb hab ich die HTTP- Headers so gesetzt, dass nicht gecacht werden dürfte. Also: 



> response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
> response.addHeader("Cache-Control", "post-check=0, pre-check=0");
> response.setHeader("Pragma", "no-cache");



Außerdem: Warum kann man dann nicht wenn man sich irgendwo ausloggt mit zurück auf die letzte Seite, auf der man war?


----------



## maki (8. Dez 2009)

> , deshalb hab ich die HTTP- Headers so gesetzt, dass nicht gecacht werden dürfte. Also:


Da hast du etwas missverstanden.
Die Header sagen nicht, dass die Seiten nicht gecacht werden dürfen, sondern dass sie nicht gecacht werden *sollen*, jedes Netzwerkgerät kann damit machen was es will, und einige Browser ignorieren das auch, speziell wenn der Back Button genutzt wird.



> Außerdem: Warum kann man dann nicht wenn man sich irgendwo ausloggt mit zurück auf die letzte Seite, auf der man war?


Kommt auf die Browser Einstellungen an


----------



## anonym (8. Dez 2009)

Okay, du hast Recht. Wenn ich nach dem Löschen der DB den Cache leere, bevor ich auf zurück gehe, ist das Problem behoben. 

Außerdem hat offenbar irgendwas, was ich im Servlet mache, meine Headers wieder überschrieben. Eine kleine Suche mit HTTP Live Headers ergab, dass sie nicht gesendet wurden. Wenn ich die Dinger über die HTML- Meta- Tags setze, ist das Problem behoben. Irgendwie hätte ich das selber merken können. 

Trotzdem danke.


----------



## maki (8. Dez 2009)

Je nach verwendetem Frmework gibt es dafür unterschiedliche Lösungen (JSF, struts, "nackte" Servlets+JSP etc. pp.)


----------

