刷新JSP/避免缓存中的图像

Refresh Image in JSP/ Avoiding cache

本文关键字:图像 缓存 JSP 刷新      更新时间:2023-09-26

我正在做一个web项目,在这个项目中,我必须生成图像,并在加载后将其显示在JSP页面上。现在的问题是,我必须使用相同的图像名称,因此浏览器总是使用缓存的图像,而不是新的图像。

Display.jsp

<html>
  <head>  
   <script type="text/javascript">
      updateImage(){
          var img1 = document.getElementById("text");
          img1.src="sun.png?time=".new Date().getTime();
      }   
   </script>
  </head> 
  <body onload="updateImage()">
          <form action="com.CheckName" method="get">
              <input type="button" value="submit" name="submit" /> 
              <img src="sun.png" id="text">
          </form>
  </body>
</html>

通过点击按钮,相同的jsp页面将再次加载。我正在使用上面的代码,但我仍然只在下一页加载时获得缓存的(旧)图像。我哪里错了。

请帮忙。

感谢

由于您使用的是JSP,因此可以使用System.currentTimeMillis()附加当前时间。

替换此:

<img src="sun.png" id="text">

这个:

<img src="sun.png?time=<%=System.currentTimeMillis()%>" id="text">

我不建议您避免总是缓存它。您可以附加当前版本号(或上次更改的版本号),而不是附加当前时间,这样用户每次打开此页面时就不必再次下载。


您也可以使用javascript来实现这一点,但您的javascript不起作用,因为它出现了错误。使用+而不是.来连接字符串。

img1.src="sun.png?time=".new Date().getTime(); //wrong

img1.src="sun.png?time=" + new Date().getTime(); //ok!

请注意,因为onload只有在加载了所有内容(包括图像)后才会执行。这意味着您将在打开页面时获得缓存版本(但非缓存版本将在一段时间后加载)。


还有其他方法,比如不为HTTP响应设置缓存头,但我想这不是问题的重点。