我正在使用JSF 2.1.7 + Prime Faces + Prime Faces Mobile。
我有一个引用图片的页面:
<img src="/charts/chart1.png"/>
有一个单独的后台进程,每2分钟运行一次以更新chart1.png。 (它从特定的在线网址获取图像)。这是我用来保存图像的代码:
public static String saveImage(final String strurl, final String imageFileName){
//assume the url for the image is valid
try {
URL url = new URL(strurl);
HttpURLConnection conn = (HttpURLConnection )url.openConnection();
conn.setConnectTimeout(1000); //1 sec timeout
conn.connect();
File file = new File(imageFileName);
BufferedImage image = ImageIO.read(conn.getInputStream());
ImageIO.write(image, "png", file);
return file.getAbsolutePath();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
ImageIO.write将删除现有的图像文件并写出新的文件。我相信上面会导致图像文件不可用的几毫秒,因此网络用户将无法看到图像。
我的问题是:
1)图像暂时不可用的时候是真的吗?
2)如果是这样,那么解决这个问题的可能解决办法是什么,以便用户始终拥有可用的图像?
提前致谢。 =)
答案 0 :(得分:0)
继承人我会做什么
1)首先不是替换图像,而是创建新图像chart2.png
2)然后我会将IMG标签中的url更改为指向Servlet,
说
并在那个将映射到/charts/showchart
的servlet中
,
在servlet中,我会检查最新的可用PNG,并将其作为响应流式传输。
这样您就可以自定义显示的图像或图像。