Java 测试给定相对URI的资源是否存在

Java 测试给定相对URI的资源是否存在,java,uri,Java,Uri,我编写了一个小Javaservlet,它将根据给定的参数(包括标签、高度、宽度等)动态生成一个图像按钮,并将每个新按钮添加到缓存中。它工作得很好,但每次调用都需要一个servlet调用来显示按钮或其突出显示的版本。我转储了缓存并制作了应用程序中当前使用的所有按钮的PNG文件,将这些文件添加到应用程序中,以便它们可以被“/images/button/xyz.PNG”引用,其中文件名是输入参数的散列 这很好,但我希望在有人添加新按钮时调用我原来的servlet。我使用自定义标记来定义这些按钮,因此在

我编写了一个小Javaservlet,它将根据给定的参数(包括标签、高度、宽度等)动态生成一个图像按钮,并将每个新按钮添加到缓存中。它工作得很好,但每次调用都需要一个servlet调用来显示按钮或其突出显示的版本。我转储了缓存并制作了应用程序中当前使用的所有按钮的PNG文件,将这些文件添加到应用程序中,以便它们可以被“/images/button/xyz.PNG”引用,其中文件名是输入参数的散列

这很好,但我希望在有人添加新按钮时调用我原来的servlet。我使用自定义标记来定义这些按钮,因此在JSP编译时调用标记处理程序。。。因此,我可以选择使用一个预先生成的按钮,或者生成对servlet的引用,以便在显示按钮时呈现该按钮

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


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

我想您正在谈论
java.lang.Class
上的
getResource()
方法。这实际上非常适合这个问题,因为如果给定路径中不存在任何资源,它将返回
null
。在您使用
getResourceAsStream()
(或类似工具)之前,不会实际加载资源,因此这不是性能问题。

我想您谈论的是
java.lang.Class
上的
getResource()
方法。这实际上非常适合这个问题,因为如果给定路径中不存在任何资源,它将返回
null
。在使用
getResourceAsStream()
(或类似工具)之前,不会实际加载资源,因此这不是性能问题。

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

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;
    }

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

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

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;
    }

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

我认为问题在于图像文件不在标记库的类路径上。它们被部署到不同的jar文件中。图像是相对于web根目录的,但即使我将完全限定的URL传递给getResource(或文件),也找不到它。标记已应答。这是关于getResource的好信息;它没有解决我的问题,但我不确定它是否能以我希望的方式解决。我相信问题在于图像文件不在我的标记库的类路径上。它们被部署到不同的jar文件中。图像是相对于web根目录的,但即使我将完全限定的URL传递给getResource(或文件),也找不到它。标记已应答。这是关于getResource的好信息;它并没有解决我的问题,但我不确定它是否能以我希望的方式解决。目前,我已经复制了资源——一个在类中,可以检测到它,另一个在我们的webroot中。getResource只是无法找到它,除非我将它放在类路径中的某个位置——在这个论坛上已经多次指出了这一点。我只是希望能走出禁区一点。我知道我遗漏了一些东西,如果我能找到答案,我会修正这个问题。现在,我已经复制了资源——一个在类中,可以检测到它,另一个在我们的webroot中。getResource只是无法找到它,除非我将它放在类路径中的某个位置——在这个论坛上已经多次指出了这一点。我只是希望能走出禁区一点。我知道我遗漏了一些东西,如果我能找到答案,我会修正这个问题。