【问题标题】:images retrieved by a servlet cached by browser由浏览器缓存的 servlet 检索到的图像
【发布时间】:2013-07-23 15:59:03
【问题描述】:

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

<input type='file' id='logo' />
<iframe src='view?media=logo'></iframe>

我在这里要做的是让用户选择一个图像,然后我会将它上传到服务器上“WEB-INF”内的一个目录。我已经成功实现了服务器端这意味着我可以看到复制到目标文件夹的新图像。但是我需要能够向客户显示图像。由于图像位于“WEB-INF”文件夹中,我无法通过使用“img”元素并操作它的“src”属性来实现。所以我实现了另一个带有 URL 模式“视图”的 servlet。此 servlet 接收客户端请求的媒体(在本例中为“徽标”)并使用以下代码将页面转发到请求的资源:

String media = request.getParameter("media");    
String location = FileManager.getView(media);
getServletContext().getRequestDispatcher(location).forward(request, response);

因此,如果一切按计划进行,则最近上传的图片应显示在 iframe 中。

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

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

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

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

是否有可能解决这个缓存问题(如果是缓存问题)?

【问题讨论】:

    标签: jakarta-ee servlets web-applications browser-cache


    【解决方案1】:

    基于 sashok_bg 建议我尝试再次应用这个广泛建议的修复。正如我在原始问题中所说,图像存储在 WEB-INF 目录中,无法通过带有 '' 标记的 JSP 页面访问。首先,我尝试通过操作请求 Dispatcher 尝试转发请求的位置来在 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>
    

    【讨论】:

      【解决方案2】:

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

      查看现有线程Disable cache for some images

      另请参阅同一链接中的第二个解决方案,提及

      header("Pragma-directive: no-cache");
      header("Cache-directive: no-cache");
      header("Cache-control: no-cache");
      header("Pragma: no-cache");
      header("Expires: 0");
      

      【讨论】:

      • 我无法应用修复,因为图像元素不在 jsp 页面内,地址为“view”的 servlet 会将传入请求转发到图像。请求通过 iframe 元素发送,结果将显示在 iframe 中。至于你的第二个解决方案,我已经尝试在我的 servlet 中设置这些标头,但它没有解决问题。
      猜你喜欢
      • 2021-01-27
      • 2015-12-07
      • 1970-01-01
      • 2011-03-23
      • 2023-04-05
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多