Wie deaktiviere ich das Tomcat-Caching? Ich habe seltsame Probleme mit statischen Dateien

26

Wie verhindere ich, dass Tomcat zwischengespeichert wird? Ich habe CSS- und grundlegende HTML-Dateien, die ich über Ajax lade und verwende. Wenn ich Tomcat nicht neu starte, scheinen die Änderungen nicht zu spiegeln. Unterschiedliche Computer, unterschiedliche Browser und ich erhalte die aktualisierten Dateien nicht.

Gedanken?

Stefan Kendall
quelle

Antworten:

21

Möglicherweise müssen Sie den Anwendungs-Cache-Ordner in / work / Catalina / localhost löschen, nachdem Sie das Flag cachingAllowed geändert haben.

Die Konfiguration kann in server.xml als eingeführt werden

<Context className="org.apache.catalina.core.StandardContext"
                 cachingAllowed="false"
                 charsetMapperClass="org.apache.catalina.util.CharsetMapper"
                 cookies="true" 
                 reloadable="false" 
                 wrapperClass="org.apache.catalina.core.StandardWrapper">
        </Context>
Adam Brand
quelle
2
+1 Ich habe völlig vergessen, das in meiner ursprünglichen Antwort zu erwähnen. Vielen Dank!
KPWINC
2
LOL ... wo ist die Liebe?
KPWINC
4
Wo ändere ich das chachingAllowedTag?
Kajacx
1
Beim Starten von Tomcat 8 wurde eine Warnung angezeigt: Beim Festlegen der Eigenschaft cachingAllowed, falsedass keine übereinstimmende Eigenschaft gefunden wurde.
NaXa
4
Diese Antwort ist jetzt für jeden, der sie liest, veraltet und nicht mehr richtig (für Tomcat 5+)
Amalgovinus
14

Für Tomcat 8 / Tomcat 9 sollten Eigenschaften in conf / context.xml wie folgt hinzugefügt werden

<Context>
  <Resources antiResourceLocking="false" cachingAllowed="false" />
  ...
</Context>

Möglicherweise müssen Sie den Anwendungs-Cache-Ordner in / work / Catalina / localhost löschen, nachdem Sie das cachingAllowedFlag geändert haben . Leeren Sie auch den Cache von IntelliJ IDEA (wenn Sie ihn zum Ausführen von Tomcat verwenden):

Mac: / Users / {: user} / Library / Caches / IntelliJIdea {: version} / tomcat /  
Linux: /home/{:user}/.IntelliJIdea{:version}/system/tomcat/
Windows: C: \ Benutzer \ {: Benutzer} \. IntelliJIdea {: Version} \ System \ Tomcat \

Weitere Parameter finden Sie in der Apache Tomcat 9-Konfigurationsreferenz .

naXa
quelle
2
AntiResourceLocking auf <Resources> -Tag ist definitiv falsch für Tomcat 8
1.
Dies ist auch für Tomcat 7 nicht korrekt. Msgstr "Das Setzen der Eigenschaft 'antiResourceLocking' auf 'false' hat keine passende Eigenschaft gefunden." ... "Beim Festlegen der Eigenschaft 'cachingAllowed' auf 'false' wurde keine übereinstimmende Eigenschaft gefunden."
Amalgovinus
@Amalgovinus für Tomcat 7 siehe Zalumons Antwort .
naXa
@Amalgovinus hast du dein Problem gelöst? Ich habe das gleiche Problem in Tomcat7, was hast du gemacht?
Aaron
Ich habe die Eigenschaft nie zum
Laufen gebracht,
13

Ich hatte dieses Problem in Tomcat 7 und der Grund war, dass ich antiResourceLocking auf true gesetzt hatte (es klang wie eine gute Idee ...).

Gemäß den Dokumenten ( http://tomcat.apache.org/tomcat-7.0-doc/config/context.html ):

Beachten Sie, dass das Setzen von true einige Nebenwirkungen hat, einschließlich des Deaktivierens des JSP-Neuladens auf einem laufenden Server: siehe Bugzilla 37668.

In meinem Fall wurden sogar statische Textdateien zwischengespeichert.

Zusammenfassend musste ich also, zumindest für eine schnelle Entwicklung, Folgendes verwenden:

antiResourceLocking="false"
cachingAllowed="false"
Reto Höhener
quelle
Wo füge ich das genau hinzu? Wenn ich conf / context.xml eingebe, erhalte ich für jeden von ihnen "keine passende Eigenschaft gefunden" ...
Aaron
1
Als Attribute des Context-Elements.
Reto Höhener
4

Haben Sie diese Dokumentation überprüft: Apache Tomcat-Konfigurationsreferenz ?

cacheMaxSize- Maximale Größe des statischen Ressourcencaches in Kilobyte. Wenn nicht angegeben, ist der Standardwert 10240 (10 Megabyte).

cacheTTL- Zeitspanne in Millisekunden zwischen der erneuten Validierung der Cache-Einträge. Wenn nicht angegeben, ist der Standardwert 5000 (5 Sekunden).

cachingAllowed- Wenn der Wert dieses Flags wahr ist, wird der Cache für statische Ressourcen verwendet. Wenn nicht angegeben, ist der Standardwert des Flags true.

Diese Parameter sind für Tomcat 5.5 und Tomcat 6.0 identisch.

KPWINC
quelle
Ich setze cachingAllowed auf false und cacheTTL auf 1000 in meiner appcontext.xml und ich kann die Datei immer noch nicht zwischenspeichern. Schlimmer noch, es wird bei jedem Neustart von Tomcat zwischengespeichert.
Stefan Kendall
Dann muss es aus dem Browser-Cache kommen
lisak