Абсолютные пути Java Servlet вне веб-папки [ Windows & Linux ]

Отказ от ответственности: В настоящее время из-за отсутствия сервера разработки / тестирования Linux, я в настоящее время не могу проверить это самостоятельно. Поэтому я задаю вопрос здесь. В конце концов у меня будет Linux-коробка, но в настоящее время я ограничен использованием Windows.

Я разрабатываю веб-приложение, которое будет работать в Tomcat 7 для Windows и Linux.

Предположим, что в обеих системах WAR развернута в следующих местах (соответственно)

/opt/Tomcat/webapps/MyApp

C:/opt/Tomcat/webapps/MyApp

В веб-приложении есть сервлет, который должен обрабатывать файлы из файловой системы ОС в следующих местах.

/work/logs/<logfiles>

C:/work/logs/<logfiles>

В Windows я могу указать C:/work/logs, и сервлет знает, как подобрать этот абсолютный путь, и он отлично работает. Я подозреваю, потому что C: в начале. Я знаю это, потому что я проверил это.

Мой настоящий вопрос...

В Linux, при отсутствии буквы диска, если я попрошу его посмотреть в /work/logs он попытается взглянуть на относительный путь:

/opt/Tomcat/webapps/MyApp/work/logs

или это будет выглядеть в файловой системе (/work/logs) как бы я этого хотел?

Я спрашиваю об этом сейчас, потому что это в конечном итоге повлияет на общий дизайн.

2 ответа

Решение

Начальная косая черта в Linux означает "абсолютный путь", так что вы можете быть уверены, что если вы используете путь как /work/logs/<something> он поймет это как абсолютный путь.

Кстати, если вы используете тот же путь в Windows, он будет работать и использовать текущий диск, т.е. если рабочий каталог tomcat включен C: это будет использовать C: диск, однако, если tomcat работает на D: этот диск будет использоваться.

Я могу порекомендовать использовать переменную среды CATALINA_HOME, чтобы найти папку, в которую вы помещаете свой конфиг. Для моих проектов у меня есть следующая структура:

$CATALINA_HOME/appconfig/   <-- config
$CATALINA_HOME/webapps/somewar.war     <-- your webapps  

Внутри appconfig я размещу файл somewar.properties, который функционирует как конфигурация для этого сервера. (Я также помещаю log4j.properties и любые специальные сертификаты / другие вещи, которые являются специфическими для экземпляра сервера, на котором вы работаете, но я стараюсь свести его к минимуму) Поскольку всегда будет набор CATALINA_HOME для вашего проекта, его можно использовать повторно,

внутри somewar.properties я бы тогда перечислил

work.path=/work/logs

Использование /work/logs будет работать как в Linux, так и в Windows, как упоминает @AlexR (в его гораздо более содержательном ответе), но вы можете столкнуться с проблемами, так как в Linux вам понадобится root-доступ для создания папки / work. Это зависит от того, кто управляет сервером и насколько они строги. Я предпочитаю конфигурационное решение, так что если вы в конечном итоге работаете на машине, которая не позволяет использовать определенное местоположение, вы можете переключиться. Конечно, вам нужно разрешить писать внутри CATALINA_HOME;)

Другие вопросы по тегам