как получить рабочий каталог для веб-приложения в Tomcat? - PullRequest
2 голосов
/ 07 декабря 2011

Мне нужно поместить некоторые файлы настроек в «рабочий каталог», чтобы настроить мое приложение.

Я пытался вставить его в ./WEB-INF/, но не сработало, есть идеи, где находится «рабочий каталог»? И есть ли способ получить его программно?

спасибо.

Ответы [ 5 ]

4 голосов
/ 07 декабря 2011

Хотя я понимаю, что вы не задавали этот вопрос специально, возможно, это решит вашу реальную проблему ...

Рассматривали ли вы размещение ваших конфигурационных файлов в WEB-INF / classes? Многие файлы конфигурации в веб-приложении загружаются как ресурсы, а не как «файловые» объекты. Если вы поместите свои файлы конфигурации в WEB-INF / classes, они будут доступны как ресурсы через ClassLoader.

РЕДАКТИРОВАТЬ: Как примечание, есть небольшая опасность в том, чтобы поместить ваши файлы конфигурации непосредственно под WEB-INF, так как они могут быть доступными для конечных пользователей, просто введя правильный URL. Это зависит от других настроек в вашем веб-контейнере, но это реальная возможность и случалось не раз. Надеюсь, вы не делаете что-то вроде хранения информации о подключении к БД ...

3 голосов
/ 27 марта 2015

Спецификация Servlet предоставляет вашему веб-приложению специальный ServletContext -конкретный рабочий каталог, который имеет разрешения на чтение, запись и удаление в соответствии со стандартной политикой безопасности Tomcat:

File workingDir = (File)servletContext.getAttribute(ServletContext.TEMPDIR);

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

3 голосов
/ 07 декабря 2011

Не думаю, что есть способ получить рабочий каталог в веб-приложении. Однако вы можете использовать метод ServletContext.getRealPath(), чтобы получить реальный путь, соответствующий данному виртуальному пути.

2 голосов
/ 07 декабря 2011

Если вы считаете, что вам это нужно, подумайте еще раз.

Что делать, если корнем вашего приложения является WAR-файл, а не «каталог»?это для.Возможно, есть лучшее решение вашей проблемы, чем получение абсолютного пути к каталогу.

Я пропустил немного о файлах конфигурации.Ответ ниже правильный: поместите их в WEB-INF / классы;getResourceAsStream() - ваш друг для чтения содержимого.

Это будет работать с файлами WAR, разобранными или нет.Это делает ваше веб-приложение красивым и портативным.

0 голосов
/ 11 декабря 2017

Чтобы сохранить некоторые настройки конфигурации без добавления javax.servlet в свой проект, я построил строку в каталоге config и мой файл конфигурации с:

import java.io.file;

String webAppRoot = System.getProperty( "catalina.base" );
String s = File.separator;
String configDir = webAppRoot + s + "webapps" + s + "myApp" + s + "WEB-INF" + s + "config";
String configFile = configDir + s + "myApp.config";

Использование File.separator гарантирует, что это решение работает в обеих Windows& Linux.

...