ServletContext getResource не работает

Я пытаюсь использовать ServletContext.getResource для получения ссылки java.net.url к файлу изображения (который затем я буду включать в библиотеку PDF с помощью iText).
Когда я использую ServletContext.getRealPath("picture.jpg"), я возвращаю строковый URL-адрес. Однако getResource всегда возвращает null.

Пример 1:

String picture = ServletContext.getRealPath("picture.jpg");
// picture contains a non-null String with the correct path
URL pictureURL = ServletContext.getResource(picture);
// pictureURL is always null

Пример 2:

URL pictureURL = ServletContext.getResource("picture.jpg");
// pictureURL is always null

Итак, каков правильный способ создания объекта java.net.URL, указывающего на файл в моей папке webapps/? Почему работает getRealPath, но не getResource?

В случае, если это вообще помогает, вот моя структура папок

webapps -> mySite -> picture.jpg

Должно ли мое изображение быть сохранено в WEB-INF или WEB-INF/classes для чтения с помощью getResource?

Ответ 1

Возвращает URL-адрес ресурса, который сопоставляется с указанным путем. Путь должен начинаться с "/" и интерпретируется как относительно текущего корня контекста.

Итак, вы должны предоставить контекстный относительный полный путь. Например:

URL pictureURL = servletContext.getResource("/images/picture.jpg");

(обратите внимание на нижнюю обтекаемую переменную servletContext)

Ответ 2

getRealPath() предоставляет конкретный абсолютный путь к ресурсу, а getResource() принимает путь относительно каталога контекста, а параметр должен начинаться с символа "/". Вместо этого попробуйте ServletContext.getResource ("/picture.jpg").

Doc: getResource