2013-10-01 67 views
2

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

<%= foo %> 

${ foo } 
+0

请不要混淆JSTL和EL。我修复了标签。要了解其差异,请阅读http://stackoverflow.com/tags/jstl/info和http://stackoverflow.com/tags/el/info – BalusC

回答

3

此,使用老式的输出的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”的文字字符串。

相关问题