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