Доступ к файлу в папке WebContent из сервлета

Я пытаюсь создать PDF-документ с помощью FOP. Код генерации PDF хранится в сервлете, а xsl находится в определенной папке в папке WebContent.

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

Мне нужно динамически генерировать содержимое xml. Как я могу указать этот динамически сгенерированный xml в качестве источника вместо объекта File?

Пожалуйста, предоставьте свои предложения.


person jobinbasani    schedule 25.09.2009    source источник


Ответы (3)


Чтобы получить путь, вы можете просто сделать:

String path = s.getServletContext().getRealPath("/WEB-INF/somedir/hdfeeh");         

s — это класс, который реализует HTTPServlet. Вы также можете использовать this.getServletContext(), если это ваш класс сервлета.

Затем передайте это как параметр.

Что касается использования динамически сгенерированного XML, используемая вами библиотека должна поддерживать использование входного потока, писать свой XML, преобразовывать его в массив байтов, затем обернуть его в ByteArrayInputStream и использовать это.

person GBa    schedule 25.09.2009
comment
Не совсем понял. Я не знаю, что такое s? - person newbie; 24.08.2014
comment
@newbie s — это объект, реализующий ServletConfig. HttpServlet расширяет класс, реализующий ServletConfig. Это означает, что если ваш класс расширяет HttpServlet, вы можете сделать this.getServletContext(). - person Austin Moore; 11.03.2015
comment
это не работает для меня. если я проверю, что файл существует с таким путем, он вернет false. взгляните на мой вопрос: stackoverflow.com/questions/36598562/ - person Thang Do; 13.04.2016

Для прямой и независимой реализации контейнера вы можете получить доступ к ресурсу с помощью следующего метода getResource() внутри вашего сервлета:

/запустить сервлет/

public InputStream getResource(String resourcePath) {
  ServletContext servletContext = getServletContext();
  InputStream openStream = servletContext.getResourceAsStream( resourcePath );
  return openStream;
}

public void testConsume() {
  String path = "WEB-INF/teste.log";
  InputStream openStream = getResource( path );

  int c = -1;
  byte[] bb = new byte[1024];
  while ( -1 != ( c = openStream.read( bb ) ) ) {
    /* consume stream */
  }
  openStream.close();
}

/завершить сервлет/

person Andre Pastore    schedule 25.09.2009
comment
К сожалению, я не могу загрузить ресурс в поток. Я получаю исключение java.net.MalformedURLException. Я напечатал servletContext, и он отображается как com.ibm.ws.webcontainer.facade.ServletContextFacade@36c29971 Есть идеи? - person jobinbasani; 25.09.2009
comment
После использования servletContext.getRealPath(filePath); нормально работает :) - person jobinbasani; 26.09.2009
comment
Здесь код работает нормально. Я использую Tomcat 6.*. Теперь я вижу, что вы используете платформу IBM. Возможно, в этом разница между результатами. - person Andre Pastore; 26.09.2009

Я использовал следующий метод для чтения файла в веб-контенте.

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getSession().getServletContext().getResourceAsStream("/json/sampleJson.json")));

Теперь все содержимое файла доступно в объекте чтения.

person Rajan    schedule 20.05.2015