Ищете изображение на HDD, а не в контексте - PullRequest
0 голосов
/ 21 октября 2011

У меня есть многомодульный проект

Project
  |--src
      |-JavaFile.java

Web-Project
  |-Web-Content
    |-images
    |   |-logo.PNG
    |-pages
    |-WEB-INF
  1. обычный Java-модуль - содержит SRC со всеми Java-файлами
  2. модуль динамического веб-проекта - содержит все, что связано с вебом

со временем обычный java-модуль отправляется в виде jar-файла в динамический веб-модуль в папке lib

Задача

Java-файл после компиляции ищет файл изображения в c: \ ibm \ sdp \ server completepath \ logo.png, а не в контексте Файл определен в Java-файле, как показано ниже для iText:

Image logo = Image.getInstance("/images/logo.PNG");

Пожалуйста, предложите, как я могу изменить свой Java-файл, чтобы он ссылался на изображение. Мне не разрешено менять структуру моего проекта.

1 Ответ

1 голос
/ 21 октября 2011

Вам нужно использовать ServletContext#getResource() или, что лучше, getResourceAsStream() для этого.Возвращает URL соответственно InputStream ресурса в веб-контенте.

InputStream input = getServletContext().getResourceAsStream("/images/logo.PNG");
// ...

Таким образом, вы не зависите от того, где (и как!) веб-приложение было развернуто.Использование абсолютных путей к файловой системе диска может привести к головной боли переносимости.

См. Также:


Обновление : согласно комментариям, вы, кажется, используете iText (вы должны были пояснить, что немного больше в вопросе, я его редактировал).Затем вы можете использовать метод Image#getInstance(), который принимает URL:

URL url = getServletContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...

Обновление 2 : согласно комментариям, вы, оказывается, сидите вJSF-контекст (вы должны были это уточнить и в вопросе).Вы должны использовать ExternalContext#getResource() вместо этого, чтобы получить URL:

URL url = FacesContext.getCurrentInstance().getExternalContext().getResource("/images/logo.PNG");
Image image = Image.getInstance(url);
// ...
...