Java - Установка атрибутов контекста (ServletContextListener)

Я прочитал файл свойств на этапе запуска веб-приложения (contextInitialized ()) и начал думать о том, как сделать эти настройки «видимыми» для сервлетов. Нужно ли мне перебирать ключи и добавлять все до единого в контекст, как это

Iterator i = settings.keySet().iterator();
while (i.hasNext()) {
    key = (String) i.next();
    value = (String) settings.get(key);
    context.setAttribute(key, value);
}

или есть методы получше?

Спасибо!

/Адам

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
3 430
5

Ответы 5

Вы рассматривали возможность определения настроек в web.xml?

Кроме того, если это невозможно, по возможности используйте дженерики:

String key = null;
Iterator<String> i = settings.keySet().iterator();
while (i.hasNext())
 context.setAttribute(key = i.next(), settings.get(key));

Я подумал, но решил сохранить конфигурацию в отдельном файле. Не знаю, но думаю, так удобнее.

Adam Asham 08.11.2008 22:46

Хм. Ну, для одного я бы использовал дженерики, предполагая, что у вас 1.5+ (или это 1.4+, я забыл). Поскольку реализация ServletContextListener предназначена для каждого поставщика сервера, я думаю, что у вас все в порядке.

Josh 08.11.2008 23:09

А как насчет использования контекста JNDI. JNDI - более распространенный способ передачи свойств в веб-приложение.

Любые свойства могут быть указаны в файле META-INF / context.xml для tomcat или любой настройки конкретного приложения.

почему бы не сохранить все содержимое в контексте вашего сервлета?

context.setAttribute("mySettings", settings);

Подпись setAttribute:

public void setAttribute(String name, Object object)

Это то, что я задумал, установив весь объект свойств в качестве атрибута контекста.

Если я не пойду по этому пути, есть ли какие-нибудь рекомендации, как назвать эти атрибуты, или вам кажется, что это «application.settings» или «myBlog.settings»? Как группировать ключи ты? Было бы хорошо:

application.module1.color=black
application.module1.font=arial

Мне кажется, что поддержка такого приложения, в котором ключи свойств распределены по всему коду, может стать обузой? Если другой разработчик переименует свойство в файле свойств, мы узнаем, только когда Бег приложение (если / когда / что ссылалось на старый ключ). Верно?

Мне нужно будет найти JNDI.

Я раздумывал над идеей:

В методе, инициализированном контекстом, я планировал создать только один глобальный объект для настроек. Очень похоже на предложенный инструментарий. Но вместо того, чтобы устанавливать атрибуты контекста для каждого ключа / атрибута / параметра, было бы ужасной идеей добавить объект-контейнер / оболочку настроек? Я думаю, этот класс будет отвечать за хранение (статических?) Классов настроек модуля. Таким образом, я могу получить такие типизированные ссылки

//ExampleServlet.java
Settings settings = (Settings)context.getAttribute("application.settings");

String color = settings.getModule1().getColor();
String font = settings.getModule1().getFont();

int blogs = settings.getModule2().getActiveBlogCount();

На протяжении всего кода мне нужно будет помнить только ключ атрибута один, который предназначен для всего контейнера настроек. Снижение риска опечаток, которые могут вызвать исключения из режима Rumtime! Это также упростит переименование атрибутов.

Что вы думаете?

/Адам

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