EL:如何打印静态变量?

hap*_*eal 2 java jsp el

我有以下JSP页面:

<%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
test #1: value of PI is <c:out value="${java.lang.Math.PI}" />.
test #2: value of PI is ${java.lang.Math.PI}.
test #3: value of PI is <%= java.lang.Math.PI %>.
Run Code Online (Sandbox Code Playgroud)

不知何故,只有测试#3有输出.为什么EL不打印出静态变量的值?

Rac*_*hel 5

对于您的每个示例,这都是正在发生的事情:

<c:out value="${java.lang.Math.PI}" />
Run Code Online (Sandbox Code Playgroud)

这是在寻找名为java的变量或bean,并尝试在其上执行一个名为lang的方法.您的JSP页面中可能没有名为Java的变量或bean,因此没有输出.

${java.lang.Math.PI}
Run Code Online (Sandbox Code Playgroud)

这与上面相同,仅使用EL编写.它是相同的,因为它正在寻找一个名为java的变量或bean.

<%= java.lang.Math.PI %>
Run Code Online (Sandbox Code Playgroud)

这是在JSP编译期间,正在计算java.lang.Math.PI并将其写入JSP.如果查看编译后的JSP,您将看到写入的值.

第三个示例是评估表达式,就像您在Java类中一样.前两个示例期望'java'是变量名.