Comment désactiver la mise en cache tomcat? Je rencontre des problèmes de fichiers statiques étranges

26

Comment empêcher Tomcat de mettre en cache? J'ai des fichiers CSS et html de base que je charge et utilise via ajax, et à moins que je ne redémarre Tomcat, les changements ne semblent pas se refléter. Différentes machines, différents navigateurs et je ne reçois pas les fichiers mis à jour.

Pensées?

Stefan Kendall
la source

Réponses:

21

Vous devrez peut-être supprimer le dossier de cache d'application dans / work / Catalina / localhost après avoir modifié l'indicateur cachingAllowed.

La configuration peut être introduite dans server.xml comme

<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
la source
2
+1 J'ai complètement oublié de le mentionner dans ma réponse d'origine. Merci!
KPWINC
2
LOL ... où est l'amour?
KPWINC
4
Où dois-je changer la chachingAllowedbalise?
kajacx
1
Vous avez reçu un avertissement de Tomcat 8 au démarrage: définir la propriété cachingAllowedsur falsen'a pas trouvé de propriété correspondante.
naXa
4
Cette réponse est désormais super obsolète, pour tous ceux qui lisent, et n'est plus vraiment correcte (pour Tomcat 5+)
Amalgovinus
14

Pour Tomcat 8 / Tomcat 9, les propriétés doivent être ajoutées dans conf / context.xml comme suit

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

Vous devrez peut-être supprimer le dossier de cache d'application dans / work / Catalina / localhost après avoir changé l' cachingAllowedindicateur. Videz également le cache d'IntelliJ IDEA (si vous l'utilisez pour exécuter Tomcat):

Mac: / Utilisateurs / {: utilisateur} / Bibliothèque / Caches / IntelliJIdea {: version} / tomcat /  
Linux: /home/{:user}/.IntelliJIdea{:version}/system/tomcat/
Windows: C: \ Users \ {: user} \. IntelliJIdea {: version} \ system \ tomcat \

Voir Référence de configuration d'Apache Tomcat 9 pour d'autres paramètres.

naXa
la source
2
antiResourceLocking sur <Resources> -Tag est définitivement faux pour tomcat 8
pscheit
Ce n'est pas correct non plus pour Tomcat 7. "La définition de la propriété 'antiResourceLocking' sur 'false' n'a pas trouvé de propriété correspondante." ... "La définition de la propriété 'cachingAllowed' sur 'false' n'a pas trouvé de propriété correspondante."
Amalgovinus
@Amalgovinus pour Tomcat 7 voir la réponse de Zalumon .
naXa
@Amalgovinus avez-vous résolu votre problème? J'ai le même problème dans tomcat7, qu'avez-vous fait?
Aaron
Je n'ai jamais réussi à faire fonctionner la propriété .. mais je suis à peu près sûr que mon cache était un problème de déploiement non lié :( erreur utilisateur
Amalgovinus
13

J'ai eu ce problème dans Tomcat 7 et la raison en était que j'avais antiResourceLocking réglé sur true (cela sonnait comme une bonne idée ...).

Selon les documents ( http://tomcat.apache.org/tomcat-7.0-doc/config/context.html ):

Veuillez noter que la définition de ce paramètre sur true a certains effets secondaires, notamment la désactivation du rechargement JSP sur un serveur en cours d'exécution: voir Bugzilla 37668.

Dans mon cas, cela a même provoqué la mise en cache de fichiers de texte statique.

Donc, en résumé, au moins pour un développement rapide, j'ai dû utiliser:

antiResourceLocking="false"
cachingAllowed="false"
Reto Höhener
la source
Où dois-je ajouter cela exactement? Si je mets dans conf / context.xml cela me donne "n'a pas trouvé de propriété correspondante" pour chacun d'eux ...
Aaron
1
En tant qu'attributs de l'élément context.
Reto Höhener
4

Avez-vous vérifié cette documentation: Référence de configuration d'Apache Tomcat ?

cacheMaxSize- Taille maximale du cache de ressources statiques en kilo-octets. S'il n'est pas spécifié, la valeur par défaut est 10240 (10 mégaoctets).

cacheTTL- Durée en millisecondes entre la revalidation des entrées de cache. S'il n'est pas spécifié, la valeur par défaut est 5000 (5 secondes).

cachingAllowed- Si la valeur de cet indicateur est vraie, le cache des ressources statiques sera utilisé. S'il n'est pas spécifié, la valeur par défaut de l'indicateur est vraie.

Ces paramètres sont les mêmes pour Tomcat 5.5 et Tomcat 6.0.

KPWINC
la source
J'ai défini cachingAllowed sur false et cacheTTL sur 1000 dans mon appcontext.xml, et je ne peux toujours pas obtenir le fichier à ne pas mettre en cache. Pire encore, c'est la mise en cache lors des redémarrages de Tomcat.
Stefan Kendall le
Alors ça doit être du cache du navigateur
lisak