Java - Установка атрибутов контекста (ServletContextListener) - PullRequest
0 голосов
/ 08 ноября 2008

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

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

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

Спасибо!

/ Adam

Ответы [ 5 ]

5 голосов
/ 10 ноября 2008

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

context.setAttribute("mySettings", settings);

подпись setAttribute:

public void setAttribute(String name, Object object)
1 голос
/ 04 января 2009

Я играю с идеей:

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

//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! Это также облегчит переименование атрибутов.

Что ты думаешь?

/ Adam

1 голос
/ 08 ноября 2008

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

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

String key = null;
Iterator<String> i = settings.keySet().iterator();
while (i.hasNext())
 context.setAttribute(key = i.next(), settings.get(key));
0 голосов
/ 10 ноября 2008

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

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

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

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

Мне придется искать JNDI.

0 голосов
/ 09 ноября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...