2013-03-25 5 views
0

Когда я хотел бы получить реальный путь в Java EE, с помощью этой инструкции:я не могу получить реальный путь от сервлета (Java EE)

String rootPath = getServletConfig().getServletContext().getRealPath("/"); 
System.out.println(rootPath); 

В результате получается: C: \ Users \ Саад \ Desktop \ pds.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ wtpwebapps \ Metier \

И нормально, я должен получить этот результат:

C: \ Users \ saad \ Desktop \ pds \ Metier \

Может ли кто-нибудь мне помочь, пожалуйста?

ответ

2

Это отличный пример того, почему концепция «пути файловой системы относительно приложения» действительно не имеет смысла в сервлете. Когда сервлет развертывается в контейнер, нет никакой гарантии, что он находится в реальном местоположении файловой системы. Контейнер сервлета может выбрать выполнение его непосредственно из файла .war без его расширения, или он может читать код приложения из URL-адреса, который вообще не поддерживается традиционной файловой системой.

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

Как правило, невозможно переносить путь к любому пути к файлу относительно вашего приложения, поскольку путь может не существовать.

0

Путь к Tomcat директории (кот/бен):

File inputFile = new File("file.xml"); // tomcat_dir/bin/file.xml 

Путь к другим Tomcat каталогов "WebApps", например:

File inputFile = new File("../webapps/file.xml"); // tomcat_dir/webapps/file.xml 

Хороший способ избавиться от абсолютных путей:)