在给定其相对URI的情况下测试资源是否存在

时间:2010-08-10 21:14:26

标签: java uri

我写了一个小的Java servlet,它会动态生成一个图像按钮,给出包括标签,高度,宽度等参数,并将每个新的一个添加到缓存中。它工作正常,但它需要一个servlet调用每次调用显示按钮或其突出显示的版本。我转储缓存并制作了应用程序中当前使用的所有按钮的PNG文件,将这些文件添加到应用程序中,以便“/images/button/xyz.png”引用它们,其中文件名是哈希值输入参数。

工作正常,但我希望在有人添加新按钮时调用我原来的servlet。我使用自定义标记来定义这些按钮,因此当JSP编译时会调用标记处理程序...所以我有一个点可以选择使用其中一个预生成的按钮,或者生成对servlet的引用所以它可以在显示时呈现按钮。

我的问题是:如何检测预渲染中的图像?我不确定调用基于完整路径创建URL对象然后调用getResource()是一个答案 - 我不希望它此时加载图像,我只需要知道它是否存在。

是否有某种方法可以创建一个File对象,该对象将采用相对URI并允许我测试是否存在?

2 个答案:

答案 0 :(得分:5)

我想你在谈论getResource()上的java.lang.Class方法。这实际上非常适合by contract以后的问题,如果给定路径不存在资源,它将返回null。在您使用getResourceAsStream()(或类似)之前,资源实际上并未加载,因此这不是性能问题。

答案 1 :(得分:1)

您可以在实用程序类中尝试以下方法。

public static boolean imageExists(final String imageFileName) throws Exception{
        boolean status = false;
        HttpURLConnection  conn = null;
        URL url = new URL(imageFileName);
        conn = (HttpURLConnection )url.openConnection();
        conn.setRequestMethod("HEAD");
            String contentType = conn.getContentType();
        if(contentType.contains("image")){
            status = true;  
        }else{
            status = false; 
        }

        return status;
    }

这假设您的图像文件名是唯一的。