<%= foo %> 和 ${ foo } 之间的区别

2024-04-29

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

<%= foo %>

and

${ foo }

这,使用老式的输出小脚本这是十年来一直灰心丧气 https://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files/,

<%= foo %>

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

<% out.println(foo); %>

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

response.getWriter().println(foo);

where foo因此被声明为本地/实例变量。因此它打印本地/实例变量foo到确切声明位置的 HTTP 响应。


这个,使用表达语言(EL) https://stackoverflow.com/tags/el/info,这是自 2003 年 JSP 2.0 以来推荐的方法,

${ foo }

与常规中的以下内容基本相同小脚本, with PageContext#findAttribute() http://docs.oracle.com/javaee/6/api/javax/servlet/jsp/JspContext.html#findAttribute%28java.lang.String%29:

<% 
    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,相反小脚本 do.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

<%= foo %> 和 ${ foo } 之间的区别 的相关文章

随机推荐