JSP/ сервлет читать параметры из файла свойств?

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

Мои мысли:

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

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

4 ответа

Решение
  • Вы можете загрузить свойства, используя java.util.Properties (или общая конфигурация) в ServletContextListener"s contextInitialized(..) метод.

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

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

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

Обновить:

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

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

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

  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.
}

У меня такая же проблема. Я смог решить эту проблему, открыв файл конфигурации в моем файле 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>

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

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

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

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