遇到的问题:图片修改之后显示的还是原图片,要手动刷新才显示修改之后的。
知道是缓存的原因,在网上找来一顿基本都是这段代码:
response.setHeader("Pragma","No-cache"); 
response.setHeader("Cache-Control","no-cache"); 
response.setDateHeader("Expires", 0); 
但是无效,有高人指点一下吧。

解决方案 »

  1.   

    当然刷新了
    比如我的图片是 1.jpg
    修改之后跳转到另一个页面
    另一个页面引用这个图片 <img src="1.jpg">
    可结果还是原图
    然后刷新一下就是新图了
      

  2.   

    我用的是struts2
    修改之后提交到修改的action
    然后跳转到显示图片的action
    显示图片的action才跳到jsp页面上
    这个页面引用的<img src="1.jpg"> 服务器端还要什么代码?
      

  3.   

    tomcat
    调试的时候重启过服务器了
      

  4.   

    lz先关闭tomcat 然后 删除一下tomcat/work 下的所有文件,然后再启动tomcat反问一下怀疑是tomcat没有完全编译
      

  5.   

    我在网上查到很多人都说
    response.setHeader("Pragma","No-cache"); 
    response.setHeader("Cache-Control","no-cache"); 
    response.setDateHeader("Expires", 0);  
    这段代码无效 但是也没人说明原因没有人知道吗 高手帮帮忙
      

  6.   

    如果是页面跳转后发现更新的内容不能及时显示出来,可以试试用reponse.sendRedirct(),让页面重定向
      

  7.   

    是IE的缓存,在你显示图片的JS中写个随机数做参数试下.
      

  8.   

    reponse.sendRedirct()试过了
    还是不行
      

  9.   

    to12L
    你说的是1.jpg?1234这样吗?
    试过了 不好使
      

  10.   

    加上这个css试试
    <style type="text/css"> 
    <!-- 
    #newPreview {FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)} 
    --> 
    </style>
      

  11.   

    再试试这个
    response.setHeader("Expires","Mon, 26 Jul 1997 05:00:00 GMT");
    response.setHeader("Cache-Control","no-cache, must-revalidate");
    response.setHeader("Pragma","no-cache");
    如果再不行,可以让页面自动刷新,比如每1分钟刷新一次,这样总比手动刷新才更新的好
    <meta http-equiv="refresh" content="60" />这句是自动刷新,加在<head></head>之间
      

  12.   

    我在公司就是用这个方法去掉页面,但是由于公司业务需求,一般不去掉,因为缓存会提高效率,去掉有的页面就打不开了,ls的方法也不好啊,如果需要做按钮刷新,还不如直接按F5呢,其实图片的缓存时间本身就是要比文字长些,我在公司后台修改图片,前台也不是马上就会自动刷出来,我觉得不好实现,其实自动刷新是个很好的方法,lz何必让他停下来呢?lz可以去看看各大门户网站,凡是需要数据不断更新的页面,比如新浪NBA数据库页面,他也不可能做到后台改完数据,前台马上就刷出来,去掉缓存的方法如果用在大的页面上是不可取的,这会大大的降低效率,自动刷新是解决这个问题的一个不错的方法,我是这样认为的
      

  13.   

    response.setHeader("Refresh",0);再试试这个
      

  14.   

    ”去掉页面也加上“
    什么意思加上这句response.setHeader("Refresh",0);不就狂刷了吗 
      

  15.   

    搞错了...搞错了...
    <input type="button" name="update" onclick="javascript:window.location.reload()" value="修改"/>
    再试试
      

  16.   

    <%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%>
    <% String imgsrc = "";
    if(request.getAttribute("imgsrc")!=null){

    imgsrc = (String)request.getAttribute("imgsrc");
    }%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk">
    <%
    response.setHeader("Pragma","No-cache"); 
    response.setHeader("Cache-Control","no-cache"); 
    response.setDateHeader("Expires", 0); 
    %>
    <title>图像人工处理</title>
    <link href="<%=request.getContextPath() %>/css/drag.css" rel="stylesheet" type="text/css" /> <script src="<%=request.getContextPath() %>/js/drag.js" type="text/javascript"></script>
    <script type="text/javascript">

    function checksub(){

    if(getPointCount()==3){

    if(window.confirm('确定提交吗?'))
    {
    document.getElementById("keypoint").value = getPoint();
    return true;

    }else{

    return false;
    }

    }else{

    alert("需要打全3个点!");
    return false;
    }
    } </script>

    </head><body>
    <div align="center">
    <div id="model" ><img src="<%=request.getContextPath()+imgsrc%>"></div>
    <form action="<%=request.getContextPath() %>/manual/imgopkey.action" method="post" onsubmit="return checksub()">
    <input type="hidden" name="keypoint" id="keypoint" />
    <input type="button" onclick="javascript:document.location.reload()" value="刷新" />
    <input type="submit" value="提交" />
    </form>
    </div>
    <script type="text/javascript">
    var myDrag = new Dadian("model");
    myDrag.initial();
    myDrag.setLimit(3);

    function getPointCount(){

    return myDrag.getPointCount();

    function getPoint(){

    return myDrag.toString();
    } </script></body>
    </html>
      

  17.   

    那些头对IE好像没有用的。用随机数吧:<%
    Random ran = new Random();
    %>
    <img src=" <%=request.getContextPath()+imgsrc + "?ran=" + ran.nextDouble()%>">
      

  18.   

    我也遇到过这个问题 我用这种有是可以,有时不可以
    <%
    Random ran = new Random();
    %>
    <img src=" <%=request.getContextPath()+imgsrc + "?ran=" + ran.nextDouble()%>">
      

  19.   

    你用的是struts2.0在返回展现修改后的页面时用type="redirct"就可以
      

  20.   

    是不是与“工具”/“internet 选项”/“常规”/设置 里的配置有关??
      

  21.   

    response.setDateHeader("Expires", 0);  
    改成下面的试试:
    response.setDateHeader("Expires", 1);  
      

  22.   

    看看这个,我们做项目的时候是用的这个。
    要是好使的话给我加分啊,在线等。<%
    /*
    response.setHeader("Cache-Control","no-cache"); 
    response.setHeader("Cache-Control","no-store");
    response.setDateHeader ("Expires", 0);
    response.setHeader("Pragma","no-cache");
    */
    %>
      

  23.   

    当然刷新了 
    比如我的图片是 1.jpg 
    修改之后跳转到另一个页面 
    另一个页面引用这个图片  <img src="1.jpg"> 
    可结果还是原图 
    然后刷新一下就是新图了
    当然你所说的修该应该是修改数据库中的所保存的数据,然后另一页面是引用数据库中的数据,
    就是在你跳到那一张页面的时候你自动刷新一次。这样就OK了。(而自动刷新是说你跳到那一张要自动刷新一次就行了。)
      

  24.   

    不知道location.replace("****.action?params=" + mm);行不行搂主可以试试用这个来调用action
      

  25.   

    楼主找的 禁止代理服务器 和 浏览器 缓存的代码是正确的。
    但是放错地方了!你只是让 代理服务器以及浏览器 不缓存你的jsp页面,但是 没有告诉它们 不缓存你的 图片。
    非常可惜的是,你的 图片修改之后又没有换名字。解决方法,对 图片访问也加上 上述 禁止缓存的代码。这个加,不是在jsp能做到的,因为 浏览器 解析 jsp 中 的 html代码之后,下载图片时,你的禁止 缓存的代码被绕开了。
    所以 你需要用 servlet 来控制 图片的下载 ,告诉 链路上的各个代理服务器和最终的浏览器,这个图片不能缓存。
    servlet 是可插拔的,你只要再写一个 class 就行了,在 web.xml 中部署一下就可了。原有代码不用修改。原有代码不用修改,所以,这是 非侵入式 设计。
    具体信息,你就自己找 servlet 或者 filter 相关资料吧,我就不写代码了。
    整个class不会超出20行代码。
      

  26.   

    用楼上的方法解决了
    用servlet显示图片
    唉早应该想到的
    结贴了 46楼50 其他平分
      

  27.   

    有个更简单的
    <img src="1.jpg?uu="+Math.random()>