遇到的问题:图片修改之后显示的还是原图片,要手动刷新才显示修改之后的。
知道是缓存的原因,在网上找来一顿基本都是这段代码:
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
但是无效,有高人指点一下吧。
知道是缓存的原因,在网上找来一顿基本都是这段代码:
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
但是无效,有高人指点一下吧。
解决方案 »
- java web项目部署的困惑
- 音乐播放器无法播放中文路径的mp3,请教!
- 第一次用javabean 那个class 路径的问题?
- 用jbuilder和eclipse常见项目有什么不同之处?
- 中文处理问题Struts1.2+Hibernate3.1 + Eclipse3.3 +myeclipse6.0
- url传递参数 为乱码
- JSP怎么控制上传时IE弹出的"浏览"窗口的"文件类型"?
- <rich:dataTable>为什么显示不出来列表内容?
- java中如何实现与数据库的连接
- 查询数据库时遇到得问题
- Openlayers如何实现不同大小加载不同图层?
- 急急急jsp程序JSTL问题The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed
比如我的图片是 1.jpg
修改之后跳转到另一个页面
另一个页面引用这个图片 <img src="1.jpg">
可结果还是原图
然后刷新一下就是新图了
修改之后提交到修改的action
然后跳转到显示图片的action
显示图片的action才跳到jsp页面上
这个页面引用的<img src="1.jpg"> 服务器端还要什么代码?
调试的时候重启过服务器了
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
这段代码无效 但是也没人说明原因没有人知道吗 高手帮帮忙
还是不行
你说的是1.jpg?1234这样吗?
试过了 不好使
<style type="text/css">
<!--
#newPreview {FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)}
-->
</style>
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>之间
什么意思加上这句response.setHeader("Refresh",0);不就狂刷了吗
<input type="button" name="update" onclick="javascript:window.location.reload()" value="修改"/>
再试试
<% 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>
Random ran = new Random();
%>
<img src=" <%=request.getContextPath()+imgsrc + "?ran=" + ran.nextDouble()%>">
<%
Random ran = new Random();
%>
<img src=" <%=request.getContextPath()+imgsrc + "?ran=" + ran.nextDouble()%>">
改成下面的试试:
response.setDateHeader("Expires", 1);
要是好使的话给我加分啊,在线等。<%
/*
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control","no-store");
response.setDateHeader ("Expires", 0);
response.setHeader("Pragma","no-cache");
*/
%>
比如我的图片是 1.jpg
修改之后跳转到另一个页面
另一个页面引用这个图片 <img src="1.jpg">
可结果还是原图
然后刷新一下就是新图了当然你所说的修该应该是修改数据库中的所保存的数据,然后另一页面是引用数据库中的数据,
就是在你跳到那一张页面的时候你自动刷新一次。这样就OK了。(而自动刷新是说你跳到那一张要自动刷新一次就行了。)
但是放错地方了!你只是让 代理服务器以及浏览器 不缓存你的jsp页面,但是 没有告诉它们 不缓存你的 图片。
非常可惜的是,你的 图片修改之后又没有换名字。解决方法,对 图片访问也加上 上述 禁止缓存的代码。这个加,不是在jsp能做到的,因为 浏览器 解析 jsp 中 的 html代码之后,下载图片时,你的禁止 缓存的代码被绕开了。
所以 你需要用 servlet 来控制 图片的下载 ,告诉 链路上的各个代理服务器和最终的浏览器,这个图片不能缓存。
servlet 是可插拔的,你只要再写一个 class 就行了,在 web.xml 中部署一下就可了。原有代码不用修改。原有代码不用修改,所以,这是 非侵入式 设计。
具体信息,你就自己找 servlet 或者 filter 相关资料吧,我就不写代码了。
整个class不会超出20行代码。
用servlet显示图片
唉早应该想到的
结贴了 46楼50 其他平分
<img src="1.jpg?uu="+Math.random()>