JSP / сервлет читать параметры из файла свойств? - PullRequest
7 голосов
/ 13 октября 2010

На моих страницах JSP должна отображаться различная информация в зависимости от среды, в которой они находятся (dev, production, sandbox и т. Д.). Я хочу иметь файл свойств для каждой из этих сред, который содержит все параметры, которые могут им понадобиться. Как я могу ссылаться на свойства из этого файла на странице JSP?

Мои мысли:

  • Пусть сервлет передает свойства в виде объекта модели всем страницам JSP, чтобы я мог ссылаться на них как $ {properties.propertyName}
  • Каким-то образом ссылаться на этот файл свойств в web.xml, тогда, возможно, я называю что-то вроде $ {context.properties.propertyName}?
  • Вместо файла свойств перечислите параметры в файле web.xml и укажите их на страницах JSP. Не знаю, как это сделать, но я бы предпочел более простой файл свойств.

ОБНОВЛЕНИЕ - я должен был упомянуть, что я использую Spring 3.0 и Spring webmvc. Так что, если есть какой-то лучший способ сделать это с помощью Spring, это идеально!

Ответы [ 4 ]

9 голосов
/ 13 октября 2010
  • Вы можете загрузить свойства, используя java.util.Properties (или commons-configuration ) в методе ServletContextListener s contextInitialized(..).

  • зарегистрировать слушателя с помощью <listener> в web.xml

  • Затем вы сохраняете Properties в ServletContext (вы можете получить его из события) (ctx.setAttribute("properties", properties)

  • , затем получите доступ к свойствам, используя ${applicationScope.properties.propName} (как отметил BalusC, applicationScope необязательно)

Обновление:

Первоначально я думал, что у Spring есть какое-то готовое средство для этого, но оказывается, что это не совсем так. У вас есть два варианта:

  • эта статья объясняет нечто похожее на мое предложение выше, но с использованием пружинного PropertyPlaceholderConfigurer

  • этот ответ и этот ответ позволяет вам выставить все ваши bean-компоненты, включая PropertyPlaceholderConfigurer, в контекст сервлета.

0 голосов
/ 19 июля 2013

У меня была такая же проблема.Я смог решить эту проблему, открыв файл конфигурации в моем файле webmvc-config.xml с помощью Resource Bundle:

<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource" p:basenames="classpath:META-INF/spring/config" p:fallbackToSystemLocale="false"/>

Затем я смог использовать его в моих JSP с помощью тег:

<spring:message code="reactor.appKey" var="reactorAppKey" />
<scrip data-app-key="${reactorAppKey}"></script>
0 голосов
/ 21 октября 2010
  1. Поместите файл свойств в известное место в вашем проекте. Например: /WEB-INF/config/environment.properties.
  2. Создайте простой класс Java-бина, в котором есть геттеры (если хотите, методы доступа), представляющие каждое из желаемых свойств (я буду называть это классом PropertyExposer). Например: PropertyExposer.getEnvironmentName ()
  3. В классе запуска (например, SessionContextListener или сервлете с низким значением ) загрузите свойства, создайте объект PropertyExposer и сохраните его в области сеанса (или приложения в зависимости от ваших потребностей).

После выполнения вышеизложенного ваши свойства будут доступны для ваших файлов JSP.

Если вы инициализируете с помощью SessionContextListener (это недопустимый код, но точка указана):


SessionContextListenser.contextInitialized(ServletContextEvent event)
{
    event.getServletContext().setAttribute();  // set application scope value.
}

Если вы инициализируете с помощью сервлета (при условии, что вы расширяете GenericServlet):


YourServletClass.init()
{
    getServletContext().setAttribute(); // set application scope value.
}

0 голосов
/ 13 октября 2010

Не вдаваясь в обсуждение того, где находится лучшее место для хранения данных, специфичных для окружающей среды (подсказка: конечно, не файлы свойств), я бы придерживался основ:

страницы JSP отображают данные; они не получают это. Если в какой-то момент позже вы в конечном итоге получите свойства не из файла свойств, а из вашего файла JSP, при условии, что ваше приложение хорошо спроектировано, - должно не измениться.

Следовательно, первый упомянутый вами подход имеет смысл (при условии, что вы хотели бы придерживаться информации, относящейся к среде, считываемой из файлов свойств).

...