1

我正在使用 JSF 2.1.7 + Prime Faces + Prime Faces Mobile。

我有一个引用图像的页面:

<img src="/charts/chart1.png"/>

有一个单独的后台进程运行以每 2 分钟更新一次 chart1.png。(它从特定的在线 url 获取图像)。这是我用来保存图像的代码:

    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)如果是这种情况,有什么可能的解决方案来解决这个问题,以便用户始终拥有可用的图像?

提前致谢。=)

4

1 回答 1

0

继承人我会做什么

1)首先我没有替换图像,而是创建了一个新图像chart2.png

2)然后我会改变IMG标签中的url指向一个Servlet,

比如说 ,在那个将被映射到/charts/showchart 的 servlet 中,在 servlet 中我会检查最新的可用 PNG,并将其作为响应流式传输。

通过这种方式,您可以自定义显示图像的方式或内容。

于 2013-03-05T08:45:22.153 回答