Тестирование на наличие ресурса с учетом его относительного URI - PullRequest
0 голосов
/ 11 августа 2010

Я написал небольшой Java-сервлет, который будет динамически генерировать кнопку изображения с заданными параметрами, включая метку, высоту, ширину и т. Д., И он будет добавлять каждый новый в кеш.Это работало нормально, НО требовал вызова сервлета для каждого вызова, чтобы отобразить кнопку или ее выделенную версию.Я сбросил кэш и сделал PNG-файлы всех кнопок, используемых в данный момент в приложении, добавил эти файлы в приложение, чтобы на них можно было ссылаться в «/images/button/xyz.png», где имя файла является хешемвходные параметры.

Это прекрасно работает, но я хочу, чтобы мой оригинальный сервлет вызывался в случае, когда кто-то добавил новую кнопку.Я использую пользовательский тег для определения этих кнопок, поэтому обработчик тега вызывается при компиляции JSP ... поэтому у меня есть точка, где я могу выбрать использование одной из предварительно сгенерированных кнопок, ИЛИ сгенерировать ссылку на сервлет, чтобыон может визуализировать кнопку, когда она отображается.

Мой вопрос: как я могу определить, доступно ли изображение в предварительно обработанном для?Я не уверен, что ответ на вызов для создания объекта URL, основанного на полном пути, а затем на вызов getResource () - я не хочу, чтобы он загружал изображение в данный момент, мне просто нужнознать, существует ли он.

Есть ли какой-нибудь способ создать объект File, который бы взял относительный URI и позволил бы мне проверить существование?

Ответы [ 2 ]

5 голосов
/ 11 августа 2010

Полагаю, вы говорите о методе getResource() на java.lang.Class. Это на самом деле хорошо подходит для проблемы, так как по контракту , она вернет null, если не существует ресурса с данным путем. Ресурс фактически не загружается до тех пор, пока вы не используете getResourceAsStream() (или аналогичный), поэтому это не влияет на производительность.

1 голос
/ 19 марта 2012

Вы можете попробовать следующий подход в служебном классе.

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

Это предполагает, что имена файлов изображений являются уникальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...