如何从JSP页面访问环境变量

时间:2014-05-16 21:27:08

标签: java jsp jstl el

如何从JSP页面访问环境变量?其中一个隐式对象是否允许访问它们?我无法找到解决此特定问题的示例。理想情况下,我正在寻找类似的东西:

<c:set var="where" value="${myEnvironment.machineName}">

1 个答案:

答案 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友好版本。标记很有用,因为它会评估表达式并使用结果来设置JavaBeanjava.util.Map对象的值。

<c:set>标记具有以下属性:

enter image description here

如果指定了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