Многие советы в Интернете по хранению переменных, которые могут меняться в зависимости от условий env/other, - это помещать их в web.xml, но не является ли web.xml в военном файле? даже если вы найдете взорванную войну и измените ее, разве это не получится, если вы обновите военный файл? Или webcontainer предоставляет любой способ настройки web.xml без использования военного файла?Цель хранения переменных в web.xml?
ответ
Переменные web.xml имеют очень ограниченное применение, по моему опыту - единственное преимущество в том, что это стандартное место для поиска жестко запрограммированной «конфигурации».
Есть несколько общих решений, чтобы получить более разумный способ для настройки веб-приложений, ни один из которых является стандартным:
- Использование свойств системы (которая обычно включает в себя возиться со сценариями запуска, и это может быть трудно чтобы получить хороший обзор всей вашей конфигурации)
- Использовать переменные среды (те же недостатки, что и свойства системы)
- Прочитать конфигурационный файл из предопределенного местоположения; часто из пути к классам, используя
getResourceAsStream
(IIRC, что обычно означает, что ввод конфигурационных файлов вlib
каталоге Tomcat в)
Вы также можете использовать JNDI, который имеет тот недостаток, что довольно тяжелый вес, как настроить и читать (если вы используете ванильную Java, в любом случае - Spring, например, имеет неплохую поддержку для чтения из JNDI). Однако JNDI довольно хорош, потому что он предназначен для каждого приложения, а не для глобального процесса. Если вам нужно запустить несколько экземпляров одного и того же приложения на одном и том же сервере, JNDI - это почти единственный вариант (хотя вы можете использовать его, просто указывая где-нибудь в файле конфигурации, что упрощает работу).
Это может иметь отношение к вашим интересам: How can I store Java EE configuration parameters outside of an EAR or WAR?
Использование JNDI для поиска постоянного файла имеет смысл. Googling tomcat + jndi config показывает результаты, которые устанавливают jndi config внутри web.xml env-entry или META-INF/context.xml, я знаю, что это не единственный способ сделать это, но все же, The lolz. – Rnet
Преимущества определения значений параметров в web.xml
- Использование файла собственных настроек требует дополнительного кодирования и управления.
- Значения параметров жесткого кодирования непосредственно в коде приложения затрудняют их изменение в будущем и сложнее использовать разные настройки для разных развертываний (например, параметры JDBC, адрес почтового сервера).
- Другие разработчики, использующие ваш код, смогут легче находить любые соответствующие параметры, поскольку это стандартное расположение для таких параметров, которые будут установлены.
Смотрите также:
Все точки могут быть применены к файлу xyzConstants.java, который просто объявляет все константы как статические строки и т. Д., Как объявление в web.xml лучше, чем константы файл? – Rnet
@Rnet Вы можете наследовать и переопределять их. –
Насколько я знаю, web.xml
не предоставляет возможности хранения пользовательских переменных. Типичным способом настройки вашего веб-приложения является сохранение конфигурации в базе данных, отдельные свойства/xml/json/другой файл, получение конфигурации из отдельной веб-службы или предоставление ее через переменные среды.
Часто используется смесь всех этих веществ. Например, при запуске вашего контейнера вы можете добавить системную переменную, используя переключатель -D
. Эта переменная будет содержать путь к файлу или URL-адресу, где может быть найдена ваша конфигурация.
Вы можете указать параметры, используя среду ОС.
Вы должны зависеть от того, сколько параметров у вас есть, какое приложение вы разрабатываете и как настроить сервер приложений или компьютерную ОС. Например, если вы используете хостинг-приложение на сервере, вы не можете настроить эти способы, это не для вас, поэтому ваши DB или веб-службы являются вашими единственными способами.
Да, возможно, я не смогу получить доступ к переменным OS env при производстве, даже если бы это было так, его можно легко изменить любым другим приложением, скриптом и т. Д. DB/web-сервис - это роскошь, которой могут не обладать небольшие приложения. Системная переменная -D может работать, но не кажется чистой, она чувствует себя как принуждение к чему-то на всей инициативе запуска сервера вашего webapp, если на одном сервере есть много веб-приложений, и каждый из них указывает на множество переменных, которые быстро становятся беспорядочными. – Rnet
Люди, которые работают на контейнере Tomcat распознать иронию, что вы определили и реализован способ работы вокруг этого вопроса.
Решение, которое они внедрили для проблем, о которых вы упоминали, заключается в создании еще одного файла xml ... the context.xml file, который считывается сервером.
похоже, что вы можете отредактировать этот файл и получить новые значения, прочитанные Tomcat без перезагрузки ... до тех пор, пока вы не сохраните элементы из server.xml.
Я не использую Tomcat, так что я мог бы быть неправильно интерпретировать документы
Веб-контейнер GlassFish поддерживает аналогичную функцию, но делает это с помощью команды пара администратора (CLI asadmin):
Возможно, есть поддержка консоли веб-администратора, и вы можете настроить их, отредактировав файл domain.xml. Похоже, что он не такой гибкий, как реализация Tomcat ... но он делает его очень простым в использовании.
Необходимо, чтобы disable, а затем enable ваша заявка на изменение значений до «взятия». Не передислоцируйте приложение, поскольку оно удалит значение, которое вы только что установили.
- 1. Какова цель поддержки async в web.xml?
- 2. Какова цель переменных экземпляра?
- 3. Устранение статических переменных хранения
- 4. PHP хранения переменных
- 5. декларирование переменных классов хранения
- 6. короткий способ хранения входных переменных в списке
- 7. Цель web.xml и faces-config.xml в Java EE?
- 8. Какова цель использования переменных приложения?
- 9. Цель C: определение переменных в блоке
- 10. Какова цель переменных результата в Fortran?
- 11. Какова цель переменных условий в мониторах?
- 12. Какова цель табличных переменных в SQL
- 13. Какова цель создания символических переменных в Theano?
- 14. Не удалось выполнить цель org.apache.maven.plugins: Указанный файл web.xml 'D: \ WEB-INF \ web.xml' не существует
- 15. значения переменных для хранения массива
- 16. Способы хранения слабо типизированных переменных
- 17. анзибль для хранения переменных фактов
- 18. Спящий кэш против карты - Цель хранения
- 19. Azure virtual machine - Цель хранения учетной записи
- 20. JS - Элементы хранения DOM в переменных
- 21. VBA хранения значений базы данных в переменных
- 22. Лучшая практика хранения языковых переменных в asp.net
- 23. JavaScript - элементы хранения в глобальных переменных
- 24. Цель C: Какао: 2 набора переменных аргументов?
- 25. Цель C: Передача переменных между контроллерами
- 26. Как заблокировать цель для списка переменных?
- 27. Какова цель хранения содержимого в памяти перед его печатью?
- 28. Какова цель хранения объектов непосредственно в ValueStack/ActionContext?
- 29. Использование figaro для хранения переменных env
- 30. Установка переменных оболочки для хранения списков файлов
Ирония конфигурации предприятия: создайте сложную структуру для конфигурации, которая читается из XML-файла, потому что «она не должна быть жестко запрограммирована, так как, возможно, вы хотите ее изменить, не перестраивая все это», то вы ее специфицируете так, чтобы вы должны сделать новый артефакт, когда вам нужно перенастроить что-то. Лолз. – gustafc
@gustafc точно, нам кажется, что нам нужен всего один слой абстракции – Rnet