第一次在 JSP 中编码,我需要将变量的值呈现到 HTML。看起来有多种方法可以做到这一点;这些有什么区别(假设我有一个名为 的变量foo
)?
<%= foo %>
和
${ foo }
这使用了一个自十年以来不鼓励使用的老式输出脚本,
<%= foo %>
与常规scriptlet中的以下内容基本相同:
<% out.println(foo); %>
这又与普通 Java servlet 类中的以下内容基本相同(您可能已经知道,JSP 最终会被编译并转换为 servlet 类):
response.getWriter().println(foo);
因此wherefoo
被声明为本地/实例变量。foo
因此,它在声明的位置将本地/实例变量打印到 HTTP 响应。
这使用表达式语言 (EL),这是自 2003 年 JSP 2.0 以来推荐的方法,
${ foo }
与常规scriptlet中的以下内容基本相同,其中PageContext#findAttribute()
:
<%
Object foo = pageContext.findAttribute("foo");
if (foo != null) out.println(foo);
%>
这又相当于:
<%
Object foo = pageContext.getAttribute("foo");
if (foo == null) foo = request.getAttribute("foo");
if (foo == null) foo = session.getAttribute("foo");
if (foo == null) foo = application.getAttribute("foo");
if (foo != null) out.println(foo);
%>
因此,它将页面/请求/会话/应用程序范围内属性的第一个非空出现打印到确切声明位置的响应中。如果没有,则不打印任何内容。请注意,当它是 时,它不会打印“null”的文字字符串,这与scriptletnull
的作用相反。