<%= foo%>之间的差异和$ {foo}

时间:2013-10-01 12:33:48

标签: jsp el scriptlet

首次在JSP中编码,我需要将变量的值呈现给HTML。看起来有很多方法可以做到这一点;这些之间有什么区别(假设我有一个名为foo的变量?)

<%= foo %>

${ foo }

1 个答案:

答案 0 :(得分:5)

这个,使用老式输出 scriptlet discouraged since a decade

<%= foo %>

与常规 scriptlet 中的以下内容基本相同:

<% out.println(foo); %>

反过来与普通Java servlet类中的以下内容基本相同(您可能已经知道,JSP最终会被编译并转换为servlet类):

response.getWriter().println(foo);

其中foo因此被声明为本地/实例变量。因此,它将本地/实例变量foo打印到完全声明的位置的HTTP响应。


这是使用expression language (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时不会打印文本字符串“null”,与 scriptlets 相反。