2010-04-28 6 views
1

Я использую struts 2, и я хотел бы прочитать некоторые настраиваемые параметры (глобальные переменные), предпочтительно из web.xml или какого-то пользовательского файла .properties (т. Е. Не жестко закодированного в источниках Java). Эта проблема сводила меня с ума в течение последних полчаса, так как я не могу решить какое-либо разумное решение.struts 2 - где установить глобальные переменные приложения?

Каков наилучший способ для этого? Я нахожу это странным, что это так сложно ...

все лучшее

Nicola Montecchio

ответ

0

Спросите себя первым: те константы действительно, имеющие отношение к Struts2 или просто в приложении ?

Если позже это на самом деле не вопрос Struts2, и вы не хотите привязывать вас к «константам» для управления Struts2 (или web.xml), они должны быть доступны из вашего кода приложения за пределами webapp (например, из некоторого кода тестирования).

Я понимаю, что вы чувствуете себя плохо «harcoding» констант в некоторых (скажем) Константы класса (со статическими конечными полями), но имейте в виду, что это может быть не так плохая практика -если они на самом деле постоянные, вряд ли для изменения независимо от вашего java-кода. Стоит подумать.

Если нет, то вам может понадобиться ConstantsManager класс, который может быть одноэлементно без гражданства объект (или какой-то объект «Service»), который знает, как загрузить константы, например, из некоторого файла свойств в CLASSPATH. Как объекты вашего приложения (в том числе, возможно, некоторые действия Struts2) получают ссылку на экземпляр ConstantsManager? В простейшей (и самой грязной) реализации у вас будет реализация шаблона Singleton со статическим методом getInstance(). Более гибким и модным является способ DI/IOC, возможно, с контейнером для бобов, как Весна; и Struts2 хорошо подходит для игры с that. И если вы не знакомы с этими понятиями, они наверняка появятся в ближайшее время, поскольку проблемы похожи (но менее тривиальны), которые обращаются к некоторым константам.

+0

Вы поднимаете интересные моменты. В моем приложении есть две категории параметров (демо для программного обеспечения идентификации музыки на основе контента): параметры алгоритма (математический материал) и веб-демо-параметры (например,какой каталог использовать для обработки загруженных файлов). Я закончил тем, что сохранил последний файл .properties, который я загружаю InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); У меня все еще есть ощущение, что это довольно неэлегантно. Я рассмотрю ваши предложения, спасибо за ваш ответ –

1

Есть несколько способов сделать это.

  • Константы могут быть установлены в struts.xml (http://struts.apache.org/2.x/docs/constant-configuration.html).
  • Если вы используете Spring вместе с Struts 2, вы должны быть в состоянии установить некоторые параметры в вашем applicationContext.xml.
  • Вы могли бы также рассмотреть возможность использования JNDI свойств, в файле конфигурации специфичны для каждого сервера приложений развертывания (http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html)
+0

спасибо за ваш ответ - я посмотрел ссылку constant-configuration.html, однако как мне получить доступ к парам ключ/значение из Java? –

Смежные вопросы