我的JSP页面需要根据它们所处的环境(开发,生产,沙箱等)显示不同的信息。我希望每个环境都有一个属性文件,其中包含它们可能需要的所有参数。如何在JSP页面中引用此文件中的属性?
我的想法是:
更新 - 我应该提到我正在使用Spring 3.0和Spring webmvc。所以如果有一些最佳实践方法可以使用Spring来做到这一点,那就太理想了!
答案 0 :(得分:9)
您可以使用java.util.Properties
的{{1}}方法使用ServletContextListener
(或commons-configuration)加载属性。
在web.xml中使用contextInitialized(..)
注册侦听器
然后将<listener>
存储到Properties
(您可以从活动中获取)(ServletContext
然后使用ctx.setAttribute("properties", properties)
访问属性(正如BalusC所说,${applicationScope.properties.propName}
是可选的)
更新:
最初我认为春天有一些现成的设施,但事实证明并非如此。您有两种选择:
this article解释了与我上面的建议相似的内容,但使用了spring applicationScope
this answer和this answer允许您公开所有bean,包括PropertyPlaceholderConfigurer
到servlet上下文。
答案 1 :(得分:0)
不讨论哪里是存储特定环境数据的最佳位置(提示:当然不是属性文件),我会坚持基础:
JSP页面呈现数据;他们不接受它。如果在某个时候,稍后,您最终会从属性文件以外的其他位置获取属性 - 假设您的应用程序设计良好,您的JSP应该不更改。
因此,您提到的第一种方法是有道理的(再次假设您希望坚持从属性文件中读取特定于环境的信息)。
答案 2 :(得分:0)
完成上述操作后,您的属性将可用于您的JSP文件。
如果使用SessionContextListener进行初始化(这不是有效代码,但重点是:)
SessionContextListenser.contextInitialized(ServletContextEvent event)
{
event.getServletContext().setAttribute(); // set application scope value.
}
如果使用Servlet进行初始化(假设您扩展了GenericServlet):
YourServletClass.init()
{
getServletContext().setAttribute(); // set application scope value.
}
答案 3 :(得分:0)
我遇到了同样的问题。我能够通过使用资源包在我的webmvc-config.xml文件中公开配置文件来解决它:
<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource" p:basenames="classpath:META-INF/spring/config" p:fallbackToSystemLocale="false"/>
然后我可以使用&lt; spring:message /&gt;在我的JSP中使用它。 tag:
<spring:message code="reactor.appKey" var="reactorAppKey" />
<scrip data-app-key="${reactorAppKey}"></script>