2013-10-01 109 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」的文字字符串。

相關問題