Estoy publicando imágenes de mi servlet. El tipo de contenido de respuesta es image/jpeg. Encuentro que las imágenes solicitadas desde mi servlet no están en la memoria caché. ¿Cómo puedo hacer que se almacenen en caché, como suelen ser las solicitudes de imágenes de archivo? Intenté configurar Cache-Control: public, pero fue en vano.almacenamiento en caché de imágenes servidas por servlet
Respuesta
Ok .. Parece que los campos de cabecera por defecto debería permitir el almacenamiento en caché. Encontré una solución en otro foro. Aparentemente, debe establecer explícitamente una longitud de contenido en la respuesta. Me pregunto por qué sin embargo. Pensé que HttpServletResponse haría eso por nosotros. De todos modos, funcionó como un amuleto y la imagen se almacena en caché muy bien.
Por ejemplo, si desea almacenar en caché ellas durante 1 mes:
Calendar inOneMonth = Calendar.getInstance();
inOneMonth.add(Calendar.MONTH, 1);
response.setDateHeader("Expires", inOneMonth.getTimeInMillis());
(esto es en un Filter
que maneja el patrón *.jpg
, por ejemplo)
Pero las imágenes deben almacenarse en caché de forma predeterminada - verifique sus filtros y configuraciones para ver si algo no está configurando los parámetros de la memoria caché incorrectamente.
Debe enviar los encabezados ETag
, Last-Modified
y Expires
a lo largo de la respuesta. El ETag
representa el identificador único del archivo (generalmente compuesto en base a una combinación de nombre de archivo, tamaño de archivo y sello de tiempo modificado por última vez). El Last-Modified
representa la última marca de tiempo modificada del archivo. El encabezado Expires
indica cuánto tiempo se le permite al cliente mantener el archivo en caché. Si la memoria caché ha caducado y están disponibles ETag
o Last-Modified
, el cliente enviará una solicitud HEAD
para verificar si el archivo necesita ser renovado. Si no es así, entonces el Expires
se pospondrá de nuevo en consecuencia.
Usted puede encontrar aquí un ejemplo de servlet que se ocupa de todo esto (y reanuda la descarga y GZIP automática): FileServlet supporting resume and GZIP
El servlet por defecto servir contenido estático en contenedores como Tomcat no establece encabezados de control de caché. No necesita escribir un servlet solo para eso. Basta con crear un filtro de este tipo,
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
long expiry = new Date().getTime() + cacheAge*1000;
HttpServletResponse httpResponse = (HttpServletResponse)response;
httpResponse.setDateHeader("Expires", expiry);
httpResponse.setHeader("Cache-Control", "max-age="+ cacheAge);
chain.doFilter(request, response);
}
Cada vez que desee agregar control de caché, sólo tiene que añadir el filtro a los recursos en web.xml. Por ejemplo,
<filter>
<filter-name>CacheControl</filter-name>
<filter-class>filters.CacheControlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheControl</filter-name>
<url-pattern>/images/*</url-pattern>
</filter-mapping>
Los encabezados funcionan en milisegundos, por lo que 'cacheAge' es el número de segundos que desea que las cosas se guarden en caché. –
¿Se puede usar este filtro para los archivos css y javascript también? – Shadow
- 1. Almacenamiento en caché de imágenes en Memcached
- 2. ¿Filtro de servlet para el almacenamiento en caché del navegador?
- 3. Almacenamiento en caché de imágenes de Android: ¿cómo?
- 4. ¿Qué biblioteca de almacenamiento en caché de imágenes para iOS?
- 5. Almacenamiento de imágenes en caché con HJCacheClasses error
- 6. Forzar el almacenamiento en caché de imágenes con javascript
- 7. Almacenamiento en caché IEnumerable
- 8. Almacenamiento en caché distribuido
- 9. Almacenamiento en caché Viewstate?
- 10. ¿Almacenamiento en caché de Hibernate?
- 11. Servlet de Java cómo deshabilitar el almacenamiento en caché de la página
- 12. Almacenamiento de imágenes en PostgreSQL
- 13. Almacenamiento en caché en urllib2?
- 14. Almacenamiento en caché en JDBC
- 15. asp.net mvc - almacenamiento en caché
- 16. ¿UIImageView imágenes de caché?
- 17. Teoría del almacenamiento en caché
- 18. Optimizar APC almacenamiento en caché
- 19. jQuery Ajax almacenamiento en caché
- 20. ASP.Net Almacenamiento en memoria caché
- 21. Almacenamiento en caché gss css
- 22. Colecciones de almacenamiento en caché en backbone.js?
- 23. Patrones de almacenamiento en caché en ASP.NET
- 24. Pre-almacenamiento en caché de imágenes generadas dinámicamente para ubicaciones Edge múltiples en Amazon Cloudfront
- 25. ¿Cuál es el mejor enfoque para el almacenamiento en caché de imágenes asíncronas en el iPhone?
- 26. Estrategia de almacenamiento en caché, ¿cuándo el almacenamiento en caché se vuelve inútil?
- 27. Datos de almacenamiento en caché en grails
- 28. MemCache vs Almacenamiento en caché de Azure
- 29. Escenario de almacenamiento en caché ASP.NET MVC
- 30. Estrategias de almacenamiento en caché con Memcached?
¿Tal vez podría proporcionar un enlace al foro donde encontró la respuesta? – Stewart