我写了一个小的Java servlet,它会动态生成一个图像按钮,给出包括标签,高度,宽度等参数,并将每个新的一个添加到缓存中。它工作正常,但它需要一个servlet调用每次调用显示按钮或其突出显示的版本。我转储缓存并制作了应用程序中当前使用的所有按钮的PNG文件,将这些文件添加到应用程序中,以便“/images/button/xyz.png”引用它们,其中文件名是哈希值输入参数。
工作正常,但我希望在有人添加新按钮时调用我原来的servlet。我使用自定义标记来定义这些按钮,因此当JSP编译时会调用标记处理程序...所以我有一个点可以选择使用其中一个预生成的按钮,或者生成对servlet的引用所以它可以在显示时呈现按钮。
我的问题是:如何检测预渲染中的图像?我不确定调用基于完整路径创建URL对象然后调用getResource()是一个答案 - 我不希望它此时加载图像,我只需要知道它是否存在。
是否有某种方法可以创建一个File对象,该对象将采用相对URI并允许我测试是否存在?
答案 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;
}
这假设您的图像文件名是唯一的。