¿Cómo deshabilito el almacenamiento en caché de tomcat? Tengo problemas de archivos estáticos extraños

26

¿Cómo evito que Tomcat se almacene en caché? Tengo css y archivos html básicos que cargo y uso a través de ajax, y a menos que reinicie tomcat, los cambios no parecen reflejarse. Diferentes máquinas, diferentes navegadores, y no recibo los archivos actualizados.

Pensamientos?

Stefan Kendall
fuente

Respuestas:

21

Es posible que deba eliminar la carpeta de caché de la aplicación en / work / Catalina / localhost después de cambiar el indicador cachedAllowed.

La configuración se puede introducir en server.xml como

<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
fuente
2
+1 Olvidé por completo mencionar eso en mi respuesta original. ¡Gracias!
KPWINC
2
LOL ... ¿dónde está el amor?
KPWINC
44
¿Dónde cambio la chachingAllowedetiqueta?
kajacx
1
Recibí una advertencia de Tomcat 8 al iniciar: Establecer la propiedad cachingAlloweden falseno encontró una propiedad coincidente.
naXa
44
Esta respuesta ahora está súper desactualizada, para cualquiera que esté leyendo, y ya no es realmente correcta (para Tomcat 5+)
Amalgovinus
14

Para Tomcat 8 / Tomcat 9, las propiedades deben agregarse en conf / context.xml de la siguiente manera

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

Es posible que deba eliminar la carpeta de caché de la aplicación en / work / Catalina / localhost después de cambiar el cachingAllowedindicador. También borre el caché de IntelliJ IDEA (si lo usa para ejecutar Tomcat):

Mac: / Users / {: user} / Library / Caches / IntelliJIdea {: version} / tomcat /  
Linux: /home/{:user}/.IntelliJIdea{:version}/system/tomcat/
Windows: C: \ Usuarios \ {: usuario} \. IntelliJIdea {: versión} \ system \ tomcat \

Consulte la Referencia de configuración de Apache Tomcat 9 para conocer otros parámetros.

naXa
fuente
2
antiResourceLocking en <Recursos> -La etiqueta es definitivamente incorrecta para tomcat 8
pscheit
Esto tampoco es correcto para tomcat 7. "Establecer la propiedad 'antiResourceLocking' en 'falso' no encontró una propiedad coincidente". ... "Al establecer la propiedad 'cachingAllowed' en 'false' no se encontró una propiedad coincidente".
Amalgovinus
@Amalgovinus para Tomcat 7 ver la respuesta de Zalumon .
naXa
@Amalgovinus, ¿resolvió su problema? Tengo el mismo problema en tomcat7, ¿qué hiciste?
Aaron
Nunca conseguí que la propiedad funcionara ... pero estoy bastante seguro de que mi caché fue un problema de implementación no relacionado :( error del usuario
Amalgovinus
13

Tuve este problema en Tomcat 7 y la razón fue que tenía antiResourceLocking establecido en verdadero (parecía una buena idea ...).

De acuerdo con los documentos ( http://tomcat.apache.org/tomcat-7.0-doc/config/context.html ):

Tenga en cuenta que establecer esto en verdadero tiene algunos efectos secundarios, incluida la desactivación de la recarga de JSP en un servidor en ejecución: consulte Bugzilla 37668.

En mi caso, incluso provocó el almacenamiento en caché de archivos de texto estático.

Entonces, en resumen, al menos para un desarrollo rápido tuve que usar:

antiResourceLocking="false"
cachingAllowed="false"
Reto Höhener
fuente
¿Dónde agrego esto exactamente? Si pongo en conf / context.xml me da "no encontré una propiedad coincidente" para cada uno de ellos ...
Aaron
1
Como atributos del elemento de contexto.
Reto Höhener
4

¿Ha verificado esta documentación: Referencia de configuración de Apache Tomcat ?

cacheMaxSize- Tamaño máximo de la caché de recursos estáticos en kilobytes. Si no se especifica, el valor predeterminado es 10240 (10 megabytes).

cacheTTL- Cantidad de tiempo en milisegundos entre la revalidación de entradas de caché. Si no se especifica, el valor predeterminado es 5000 (5 segundos).

cachingAllowed- Si el valor de este indicador es verdadero, se utilizará la memoria caché para recursos estáticos. Si no se especifica, el valor predeterminado de la bandera es verdadero.

Estos parámetros son los mismos para Tomcat 5.5 y Tomcat 6.0.

KPWINC
fuente
Configuré cachingAllowed en false y cacheTTL en 1000 en mi appcontext.xml, y TODAVÍA no puedo obtener el archivo que no está en caché. Peor aún, se está almacenando en caché en tomcat reinicia.
Stefan Kendall el
A continuación, como tiene que ser de la caché del navegador
Lisak