我使用以下代码在临时位置创建文件并将图像保存在该位置,当加载此页面时,如果删除旧图像或始终显示缓存图像,则总是看到红叉最新图片“。
String file_suffix=df.format(new Date());
File file= new File("/home/martini/Apache/tomcat/apache-tomcat-5.5.27/webapps/dashboard/tmp_imgs/tmp"+file_suffix +".jpeg");
if(!(file.exists())){
file.createNewFile();
}
p_resp.setContentType("image/jpeg");
chart = u.genarateLineChart(m_martiniInstance);
ChartUtilities.saveChartAsJPEG(file, chart, 625, 800);
HTMLHelper.writeHTMLHead(m_out);
m_out.println("<body bgcolor=\"#B4A383\"> "
+ " <center> "
+ " <img src=\"/dashboard/_imgs/sungard_martini.png\" alt=\"SunGard Martini\" border=\"0\" /> "
+ " <p><br><br></p>");
m_out.println(
" <div align=center>"
+ " <img src=\"/dashboard/tmp_imgs/tmp" + file_suffix + ".jpeg\" border=\"0\" /> "
+"</div>"
+ " <p><br><br></p>");
我希望每次都为图像创建一个新文件,并将新图像加载到临时文件中,而不管临时文件中是否存在先前的图像。 有没有办法实现这个,因为当我看到一个红十字或旧文件时,我刷新页面,然后我看到正在加载新图像。
谢谢,
Bhavya
答案 0 :(得分:1)
尝试在servlet的doPost()/ doGet()方法的开头调用response.setHeader("Cache-Control","no-cache");
。这应该可以防止缓存。
其他技巧是在URL的末尾添加某种虚拟参数。这可以在客户端使用javascript实现。例如,您的网址如下:
http://myserver/myapp/images/myimage.jpg
将其更改为
http://myserver/myapp/images/myimage.jpg?dummy=123456
伪参数的值可以是以毫秒为单位的时间戳或随机数等。
答案 1 :(得分:0)
另一种解决我猜测的方法是你的目标,即每次重新加载时保证的新图表,可能是以下方法:
图像servlet看起来应该或多或少像
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
PrintWriter out = response.getWriter();
chart = u.genarateLineChart(m_martiniInstance);
ChartUtilities.writeChartAsJPEG(out, chart, 625, 800);
out.close();
}
不是100%确定writeChartAsJPEG调用的参数......
当然,使用提议的url-pattern,将调用servlet来处理/dashboard/tmp_imgs/tmp/
中的所有内容。因此,如果您将该路径用于其他物理文件,则应更改它(在web.xml中和调用代码)到独特的东西。它不需要由现有文件支持。
优点?