2
之间的区别第一次在JSP中进行编码时,我需要将变量的值呈现为HTML。看起来有很多种方法可以做到这一点;这些之间有什么区别(假设我有一个名为foo
的变量)?
<%= foo %>
和
${ foo }
之间的区别第一次在JSP中进行编码时,我需要将变量的值呈现为HTML。看起来有很多种方法可以做到这一点;这些之间有什么区别(假设我有一个名为foo
的变量)?
<%= foo %>
和
${ foo }
此,使用老式的输出的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
时不打印“null”的文字字符串。
请不要混淆JSTL和EL。我修复了标签。要了解其差异,请阅读http://stackoverflow.com/tags/jstl/info和http://stackoverflow.com/tags/el/info – BalusC