Image 在用户未注意到的情况下替换图像

Image 在用户未注意到的情况下替换图像,image,jakarta-ee,jsf-2,file-io,Image,Jakarta Ee,Jsf 2,File Io,我正在使用JSF2.1.7+Prime Faces+Prime Faces Mobile 我有一个参考图像的页面: <img src="/charts/chart1.png"/> ImageIO.write将删除现有图像文件并写出新的图像文件。我相信上述情况将导致几毫秒内图像文件不可用,因此web用户将无法看到图像 我的问题是: 1) 是否确实会有一段时间图像暂时不可用 2) 如果是这样的话,有什么可能的解决方案来解决这个问题,这样用户将始终拥有可用的图像 提前感谢。=) 下面是我

我正在使用JSF2.1.7+Prime Faces+Prime Faces Mobile

我有一个参考图像的页面:

<img src="/charts/chart1.png"/>
ImageIO.write将删除现有图像文件并写出新的图像文件。我相信上述情况将导致几毫秒内图像文件不可用,因此web用户将无法看到图像

我的问题是:

1) 是否确实会有一段时间图像暂时不可用

2) 如果是这样的话,有什么可能的解决方案来解决这个问题,这样用户将始终拥有可用的图像

提前感谢。=)

下面是我要做的

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

2) 然后我会更改IMG标记中的url以指向一个Servlet

说 在将映射到
/charts/showchart
, 在servlet中,我将检查最新可用的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;
}