Jakarta ee 由浏览器缓存的servlet检索的图像

Jakarta ee 由浏览器缓存的servlet检索的图像,jakarta-ee,servlets,web-applications,browser-cache,Jakarta Ee,Servlets,Web Applications,Browser Cache,我有一个具有以下结构的JSP页面: <input type='file' id='logo' /> <iframe src='view?media=logo'></iframe> 因此,如果一切按计划进行,最近上传的图像应该显示在iframe中。 问题是ifram一直显示与我的请求相关联的旧图像,但当我右键单击图像并选择“在新窗口中打开”时,我会看到更正后的图像 我做了一些研究,发现这个问题在某种程度上与浏览器更改图像有关,建议的解决方案是在“src”属性

我有一个具有以下结构的JSP页面:

<input type='file' id='logo' />
<iframe src='view?media=logo'></iframe>
因此,如果一切按计划进行,最近上传的图像应该显示在iframe中。

问题是ifram一直显示与我的请求相关联的旧图像,但当我右键单击图像并选择“在新窗口中打开”时,我会看到更正后的图像

我做了一些研究,发现这个问题在某种程度上与浏览器更改图像有关,建议的解决方案是在“src”属性的末尾添加一个随机数:

<img src='logo.png?random=klafjeiej3qk213 />

虽然我无法将此修复应用于我的问题,因为图像存储在WEB-INF中,我使用servlet检索它们


是否可以解决此缓存问题(如果是缓存问题)

我认为您可以很好地应用上述修复。您添加的随机数只是一个永远不会被读取的HTTP属性。文件名保持不变,因此您应该可以

查看现有线程

另请参见同一链接中的第二个解决方案,其中提到

header("Pragma-directive: no-cache");
header("Cache-directive: no-cache");
header("Cache-control: no-cache");
header("Pragma: no-cache");
header("Expires: 0");
基于sashok_bg的建议,我再次尝试应用这个广泛建议的修复方法。正如我在原始问题中所说的,图像存储在WEB-INF目录中,无法通过带有“”标记的JSP页面访问。首先,我试图通过操纵请求调度器试图转发请求的位置,在servlet中应用修复程序。它不起作用

然后我在运行时查看了JSP页面源代码,发现如下:

<img style="-webkit-user-select: none" src="http://localhost:8084/simah/view?media=logo">

该标记与其他一些元素一起放置在元素内部。这导致我将修复程序应用于iframe源本身。经过仔细观察,似乎已经解决了问题

<iframe src="<%="view?media=logo&time="+Calendar.getInstance().getTimeInMillis()%>" ></iframe>

我无法应用修复程序,因为image元素不在jsp页面内,地址为“view”的servlet将向image转发传入请求。请求通过iframe元素发送,结果将显示在iframe中。至于第二种解决方案,我已经尝试在servlet中设置这些头,但它并没有解决问题。
<iframe src="<%="view?media=logo&time="+Calendar.getInstance().getTimeInMillis()%>" ></iframe>