0

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

显示.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 页面。我正在使用上面的代码,但我仍然只在下一页加载时获得缓存(旧)图像。我要去哪里错了。

请帮忙。

谢谢

4

1 回答 1

1

由于您使用的是 JSP,因此您可以使用System.currentTimeMillis().

替换这个:

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

有了这个:

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

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


您也可以使用 javascript 来执行此操作,但您的没有工作,因为它有一个错误。使用+而不是.连接字符串。

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

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

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


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

于 2013-07-05T01:23:11.047 回答