如何从JSP页面访问环境变量?其中一个隐式对象是否允许访问它们?我无法找到解决此特定问题的示例。理想情况下,我正在寻找类似的东西:
<c:set var="where" value="${myEnvironment.machineName}">
答案 0 :(得分:4)
您可以使用ServletContextListener在服务器启动时阅读属性文件,并将其存储为应用程序作用域属性,以便从应用程序的任何位置访问它。
要遵循的步骤:
的.properties:
machineName=xyz
的web.xml:
<listener>
<listener-class>com.x.y.z.AppServletContextListener</listener-class>
</listener>
AppServletContextListener.java:
public class AppServletContextListener implements ServletContextListener {
private static Properties properties = new Properties();
static {
// load properties file
try {
// absolute path on server outside the war
// where properties files are stored
String absolutePath = ..;
File file = new File(absolutePath);
properties.load(new FileInputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
servletContextEvent.getServletContext().
setAttribute("myEnvironment", properties);
}
}
JSP:
然后你可以把它当作EL中的Map。
${myEnvironment['machineName']}
或
${myEnvironment.machineName}
详细了解 JSTL Core c:set
代码
<c:set>
标记是setProperty
操作的JSTL友好版本。标记很有用,因为它会评估表达式并使用结果来设置JavaBean
或java.util.Map
对象的值。
<c:set>
标记具有以下属性:
如果指定了target,则还必须指定property。
详细了解HERE
如果您正在寻找示例代码,请在此处找到它。请在以下帖子找到它。它可能会对你有帮助。
其他范围的更多样本。
<%-- Set scoped variables --%>
<c:set var="para" value="${41+1}" scope="page" />
<c:set var="para" value="${41+1}" scope="request" />
<c:set var="para" value="${41+1}" scope="session" />
<c:set var="para" value="${41+1}" scope="application" />
<%-- Print the values --%>
<c:out value="${pageScope.para}" />
<c:out value="${requestScope.para}" />
<c:out value="${sessionScope.para}" />
<c:out value="${applicationScope.para}" />
在您的情况下,您已在默认where
范围内设置了属性page
。