无需用户注意即可替换图像

时间:2013-03-05 08:13:13

标签: image java-ee jsf-2 file-io

我正在使用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)如果是这样,那么解决这个问题的可能解决办法是什么,以便用户始终拥有可用的图像?

提前致谢。 =)

1 个答案:

答案 0 :(得分:0)

继承人我会做什么

1)首先不是替换图像,而是创建新图像chart2.png

2)然后我会将IMG标签中的url更改为指向Servlet,

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

这样您就可以自定义显示的图像或图像。