Я создаю веб-приложение (WAR) и разворачиваю его на Tomcat. В webapp есть страница с формой, в которую администратор может ввести некоторые конфигурационные данные. Я не хочу хранить эти данные в СУБД, а просто в XML-файле на файловой системе. Куда его поместить?
Я хотел бы поместить этот файл где-нибудь в дереве каталогов, где развернуто само приложение. Должен ли мой конфигурационный файл находиться в каталоге WEB-INF? Или поместить его в другое место?
И какой Java-код нужно использовать в сервлете, чтобы найти абсолютный путь к каталогу? Или к нему можно обращаться по относительному пути?
Что мы делаем, чтобы положить его в отдельный каталог на сервере (вы могли бы использовать что-то вроде /конфигурации /опт/config в файле /root/config в /Home/имя_пользователя/config или что угодно). Когда наши сервлеты запуска, они читать XML-файл, сделать несколько вещей из него (главное информационное подключение к БД), и что'с его.
Я спросил о том, почему мы сделали это один раз.
Было бы здорово хранить все в БД, но очевидно, что вы можете'т хранения информации, подключение к БД в БД.
Вы могли бы писать все в коде, но это'с некрасиво по многим причинам. Если информация никогда не должна меняться, вы должны перестроить код и перевести. Если кто-то получает копию вашего кода или файла война, то они бы вам эту информацию.
Поставив вещи в war-файл выглядит неплохо, но если вы хотите изменить положение вещей, сколько может быть плохой идеей. Проблема в том, что если вам нужно изменить информацию, то в следующий раз вы перевести этот файл будет перезаписан, так что вы не'т помните, изменения в версии построят в войну не забывается.
Файл в специальном месте на файла всего система работает достаточно хорошо для нас. Это вовсе'т иметь каких-либо больших недостатков. Вы знаете, где это, Это'ов, хранящихся отдельно, делает внедрение на нескольких машинах легко, если все они должны иметь разные значения в конфиге (поскольку она's не часть войны).
Единственное другое решение, я могу думать, что будет хорошо работать, будет держать все в БД, за исключением БД, логин и пароль. Что придет из системных свойств Java, которые извлекаются с помощью виртуальной машины. Этот привилегированный API, упомянутых Ганса доги выше. Я не'т думаю, что это было вокруг, когда наше приложение был разработан, если это было'т использовать.
Что касается пути для доступа к файл конфигурации, он's просто файл в файловой системе. Вы Don'т нужно беспокоиться о веб-путь. Поэтому, когда ваш сервлет запускается он просто открывает файл в "/конфигурации/приложение myapp/config файл.XML-код и" (или как там) и он будет найти нужную вещь. Просто hardcodeing путь для этого один, кажется довольно безобидным.
Веб-INF-это хорошее место, чтобы положить свой файл config. Здесь's некоторые код, чтобы получить абсолютный путь к каталогу, из сервлета.
public void init(ServletConfig servletConfig) throws ServletException{
super.init(servletConfig);
String path = servletConfig.getServletContext().getRealPath("/WEB-INF")
Я бы не стал хранить его в папке приложения, поскольку это приведет к отмене конфигурации при новом развертывании приложения.
Я предлагаю вам взглянуть на Preferences API или написать что-нибудь в папке users (пользователя, под которым запущен Tomcat).
Ответ на этот вопрос зависит от того, как вы собираетесь читать и записывать этот конфигурационный файл.
Например, фреймворк Spring предоставляет возможность использовать XML-файлы конфигурации (или файлы свойств Java); они могут храниться в пути классов (например, в каталоге WEB-INF), в любом другом месте файловой системы или даже в памяти. Если для этого используется Spring, то проще всего хранить конфигурационный файл в каталоге WEB-INF, а затем использовать класс Spring ClassPathXmlApplicationContext для доступа к конфигурационному файлу.
Но, опять же, все зависит от того, как вы планируете обращаться к этому файлу.