2013-07-05 13 views
0

我正在开发Web项目,在该项目中,我必须生成图像并在其加载时将其显示在JSP页面上。现在问题是我必须使用相同的图像名称,因此浏览器始终使用缓存图像,而不是新图像。在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页面上被再次加载。 我正在使用上面的代码,但仍然只在下一页加载时获得缓存(旧)图像。我哪里出错了。

请帮忙。

感谢

回答

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响应设置no-cache头,但我想这不是这个问题的要点。