2010-10-08 2 views
0

классам
В управлении веб-приложений в локальной котом, я пытаюсь загрузить папку /folder, которая находится в tomcat/webapps/myproject/WEB-INF/folder Чтобы сделать это:Проблема загрузки ресурсов из

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder"); 

который возвращает null. Этот кусок кода должен загружать ресурсы из пути к классам, то есть если я не ошибаюсь в пути, где находится моя папка.
В любом случае, я переместил папку на разные пути, например tomcat/webapps/myproject/WEB-INF/classes/folder или tomcat/webapps/myproject/WEB-INF/lib/folder с тем же результатом.
Я что-то пропустил? Заранее спасибо.

Относительно всех ваших ответов (спасибо), я редактирую свой вопрос со всем, что я пробовал, с тем же нулевым результатом.
)

String realSource = getServletContext().getRealPath("/folder"); 

B)

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder/fileInFolder"); 

C)

ServletContext servletContext = (ServletContext)context.getExternalContext().getContext(); 
String realSource = servletContext.getRealPath("/folder"); 

Я должен сказать, что мой folder путь tomcat/webapps/myproject/WEB-INF/classes/folder

ответ

3

Проблема заключается в том, что/WEB- INF не входит в CLAS SPATH файла WAR.

/WEB-INF/классы находятся в CLASSPATH; так и все JAR в/WEB-INF/lib.

Если вы поместите нужный вам файл в/WEB-INF/классы, то загрузчик класса WAR должен его найти.

Вы не можете прочитать каталог таким образом. Это должен быть файл.

UPDATE:

Во всяком случае, я переместил папку различных путей, таких как котом/WebApps/MyProject/WEB-INF/классы/папки или кот/WebApps/MyProject/WEB- INF/lib/folder с тем же результатом. Я пропустил что-то?

Да, вы пропустили две вещи:

  1. Ваша папка должна идти в одном месте - под/WEB-INF/классы
  2. Вы не можете получить доступ к папке с помощью getResourceAsStream() и читать все содержимое. Это не работает. Вы можете читать только один файл таким образом.
+0

YEP Я не видел этого ... – fasseg

+0

И как я мог прочитать каталог? Спасибо –

+0

Вы не можете, и не должны. – duffymo

0

Снимите ведущую косую черту и попробовать то

InputStream realPath = getClass().getClassLoader().getResourceAsStream("folder"); 
+0

Я тоже попробовал, с тем же результатом. Спасибо –

1

Если вы хотите полный путь к папке, в пределах вашего веб-приложение, так что вы можете использовать операции с файлами на нем, вот способ сделать это.

Примечание: моя_папка параллельно WEB-INF в моем веб-приложение

String relativeWebPath = "/myfolder"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 

Теперь распечатывания absoluteDiskPath дает мне

D:\apache-tomcat-6.0.20\webapps\mywebapp\myfolder 

Try список файлов в этой папке,

File dir = new File(absoluteDiskPath); 

String[] children = dir.list(); 
if (children != null) 
{ 

    for (int i=0; i<children.length; i++) { 
    // Get filename of file or directory 

    String filename = children[i]; 
    System.out.println("filename no " + i + filename); 
    } 
} 
+0

Спасибо, я пробовал до этого пути, но у меня были проблемы с началом сервлета, поэтому я решил изменить свой путь. Проблема у меня была в этом сервлете сервлета = (сервлет) context.getExternalContext(); –

+0

Можете ли вы сделать String absoluteDiskPath = getServletContext(). GetRealPath (relativeWebPath); без проблем ?? –

+1

@mujer esponja: да, если ваш код является правильным сервлетом (т. Е. Расширяет HTTPServlet), вы можете напрямую использовать getServletConfig() и getServletContext() в методе goGet() http://download.oracle.com/docs/cd /E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/http/HttpServlet.html – JoseK

Смежные вопросы