在我的项目中,我们使用了一些img标签
<img src="url to java servlet?parameters">而servlet会立即响应bytesteam,例如
response.getOutputStream().write(imageBytes);这一切都很好,但是有没有办法在浏览器中缓存图像,因为它不会像常规的url图像那样自动缓存它。
发布于 2011-11-14 22:18:03
您至少需要在响应上设置ETag、Last-Modified和Expires标头。ETag报头应基于文件名、文件大小和上次修改时间戳的组合来表示文件的唯一标识符。Last-Modified标头应表示文件的最后修改时间戳。Expires标头应该通知客户端允许它在缓存中保留文件多长时间。
如果客户端的缓存已经过期,并且ETag或Last-Modified可用,则客户端将发送HEAD请求,以检查文件是否需要续订。如果不是,那么Expires将被再次相应地推迟。
您可以在这里找到一个servlet示例,它可以处理所有这些(以及下载简历和自动GZIP):FileServlet supporting resume and GZIP。
但是,如果您的文件已经在磁盘文件系统上可用(而不是在数据库中),那么您应该考虑将作业委托给servlet容器的内置缺省servlet。另请参见Reliable data serving。
发布于 2011-11-14 22:05:13
请参阅Caching Tutorial for Web Authors and Webmasters。
您希望输出合适的缓存控制标头和/或处理If-Modified- ETag和/或ETag请求。
发布于 2011-11-14 20:51:44
servlet应该为if-modified-since提供逻辑,expired逻辑。请参见getLastModified方法。
https://stackoverflow.com/questions/8121812
复制相似问题