EL 全名為Expression Language。EL主要作用:
獲取數據:
EL表達式主要用於替換JSP頁面中的腳本表達式,以從各種類型的web域 中檢索java對象、獲取數據。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)
執行運算:
利用EL表達式可以在JSP頁面中執行一些基本的關系運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
獲取web開發常用對象
EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕松獲得對web常用對象的引用,從而獲得這些對象中的數據。
調用Java方法
EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
使用EL表達式獲取數據語法:“${標識符}”
EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回”” (注意,不是null,而是空字符串)。
示例:${user}
EL表達式也可以很輕松獲取JavaBean的屬性,或獲取數組、Collection、Map類型集合的數據,例如:
${user.address.city}
${user.list[0]}:訪問有序集合某個位置的元素
${map.key} : 獲得map集合中指定key的值
結合JSTL的foreach標簽,使用EL表達式也可以很輕松迭代各種類型的數組或集合,示例:
迭代數組
迭代collection類型集合
迭代map類型集合
語法:${運算表達式},EL表達式支持如下運算符:
empty運算符:檢查變量是否為null或“空”,很好用!!!
二元表達式:${user!=null?user.name : “”} ,很好用!!!
[ ] 和 . 號運算符
獲得web開發常用對象
EL表達式語言中定義了11個隱含對象,使用這些隱含對象可以很方便地獲取web開發中的一些常見對象,並讀取這些對象的數據。
語法:${隱式對象名稱} :獲得對象的引用
注意事項:
測試headerValues時,如果頭裡面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
測試cookie時,例${cookie.key}取的是cookie對象,如訪問cookie的名稱和值,須${cookie.key.name}或${cookie.key.value}
EL表達式語法允許開發人員開發自定義函數,以調用Java類的方法。
示例:${prefix:method(params)}
在EL表達式中調用的只能是Java類的靜態方法。
這個Java類的靜態方法需要在TLD文件中描述,才可以被EL表達式調用。
EL自定義函數用於擴展EL表達式的功能,可以讓EL表達式完成普通Java程序代碼所能完成的功能。
EL Function開發步驟:
一般來說, EL自定義函數開發與應用包括以下三個步驟:
編寫一個Java類的靜態方法
編寫標簽庫描述符(tld)文件,在tld文件中描述自定義函數。
在JSP頁面中導入和使用自定義函數
編寫完標簽庫描述文件後,需要將它放置到
TLD文件中的
EL表達式是JSP 2.0規范中的一門技術 。因此,若想正確解析EL表達式,需使用支持Servlet2.4/JSP2.0技術的WEB服務器。
注意:有些Tomcat服務器如不能使用EL表達式
(1)升級成tomcat6
(2)在JSP中加入<%@ page isELIgnored="false" %>
EL表達式保留關鍵字:
所謂保留字的意思是指變量在命名時,應該避開上述的名字,以免程序編譯時發生錯誤
JSTL中的常用EL函數:
由於在JSP頁面中顯示數據時,經常需要對顯示的字符串進行處理,SUN公司針對於一些常見處理定義了一套EL函數庫供開發者使用。
這些EL函數在JSTL開發包中進行描述,因此在JSP頁面中使用SUN公司的EL函數庫,需要導入JSTL開發包,並在頁面中導入EL函數庫,如下所示:
在頁面中使用JSTL定義的EL函數:
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
fn:toLowerCase函數將一個字符串中包含的所有字符轉換為小寫形式,並返回轉換後的字符串,它接收一個字符串類型的參數,例如
fn:toLowerCase("Www.IT315.org") 的返回值為字符串“www.it315.org”
fn:toLowerCase("")的返回值為空字符串
fn:toUpperCase函數將一個字符串中包含的所有字符轉換為大寫形式,並返回轉換後的字符串,它接收一個字符串類型的參數。例如:
fn:toUpperCase("Www.IT315.org") 的返回值為字符串“WWW.IT315.ORG”
fn:toUpperCase("")的返回值為空字符串
fn:trim函數刪除一個字符串的首尾的空格,並返回刪除空格後的結果字符串,它接收一個字符串類型的參數。需要注意的是,fn:trim函數不能刪除字符串中間位置的空格。
例如,fn:trim(" www.it315.org ") 的返回值為字符串“www.it 315.org”。
fn:length函數返回一個集合或數組大小,或返回一個字符串中包含的字符的個數,返回值為int類型。fn:length函數接收一個參數,這個參數可以是
如果fn:length函數的參數為null或者是元素個數為0的集合或數組對象,則函數返回0;如果參數是空字符串,則函數返回0。
fn:split函數以指定字符串作為分隔符,將一個字符串分割成字符串數組並返回這個字符串數組。
fn:split函數接收兩個字符串類型的參數,第一個參數表示要分割的字符串,第二個參數表示作為分隔符的字符串。
例如,fn:split("www.it315.org", ".")[1]的返回值為字符串“it315”。
fn:join函數以一個字符串作為分隔符,將一個字符串數組中的所有元素合並為一個字符串並返回合並後的結果字符串。fn:join函數接收兩個參數,第一個參數是要操作的字符串數組,第二個參數是作為分隔符的字符串。
如果fn:join函數的第二個參數是空字符串,則fn:join函數的返回值直接將元素連接起來。例如:
假設stringArray是保存在Web域中的一個屬性,它表示一個值為{"www","it315","org"}的字符串數組,則fn:join(stringArray, “.")返回字符串“www.it315.org”
fn:join(fn:split("www,it315,org", ","), ".") 的返回值為字符串“www.it315.org”
fn:indexOf函數返回指定字符串在一個字符串中第一次出現的索引值,返回值為int類型。fn:indexOf函數接收兩個字符串類型的參數,如果第一個參數字符串中包含第二個參數字符串,那麼,不管第二個參數字符串在第一個參數字符串中出現幾次,fn:indexOf函數總是返回第一次出現的索引值;如果第一個參數中不包含第二個參數,則fn:indexOf函數返回-1。如果第二個參數為空字符串,則fn:indexOf函數總是返回0。例如:
fn:indexOf("www.it315.org","t3") 的返回值為5
fn:contains函數檢測一個字符串中是否包含指定的字符串,返回值為布爾類型。fn:contains函數在比較兩個字符串是否相等時是大小寫敏感的。
fn:contains函數接收兩個字符串類型的參數,如果第一個參數字符串中包含第二個參數字符串,則fn:contains函數返回true,否則返回false。如果第二個參數的值為空字符串,則fn:contains函數總是返回true。實際上,fn:contains(string, substring)等價於fn:indexOf(string, substring) != -1。
忽略大小的EL函數:fn:containsIgnoreCase
fn:startsWith函數用於檢測一個字符串是否是以指定字符串開始的,返回值為布爾類型。
fn:startsWith函數接收兩個字符串類型的參數,如果第一個參數字符串以第二個參數字符串開始,則函數返回true,否則函數返回false。如果第二個參數為空字符串,則fn:startsWith函數總是返回true。例如:
fn:startsWith("www.it315.org","it315")的返回值為false
與之對應的EL函數:fn:endsWith
fn:replace函數將一個字符串中包含的指定子字符串替換為其它的指定字符串,並返回替換後的結果字符串。fn:replace方法接收三個字符串類型的參數,第一個參數表示要操作的源字符串,第二個參數表示源字符串中要被替換的子字符串,第三個參數表示要被替換成的字符串。例如:
fn:replace("www it315 org", " ", ".")的返回值為字符串“www.it315.org”
fn:substring函數用於截取一個字符串的子字符串並返回截取到的子字符串。fn:substring函數接收三個參數,第一個參數是用於指定要操作的源字符串,第二個參數是用於指定截取子字符串開始的索引值,第三個參數是用於指定截取子字符串結束的索引值,第二個參數和第三個參數都是int類型,其值都從0開始。例如:
fn:substring("www.it315.org", 4, 9) 的返回值為字符串“it315”
fn:substringAfter函數用於截取並返回一個字符串中的指定子字符串第一次出現之後的子字符串。fn:substringAfter函數接收兩個字符串類型的參數,第一個參數表示要操作的源字符串,第二個參數表示指定的子字符串,例如:
fn:substringAfter(“www.it315.org”, “.”)的返回值為字符串“it315.org”。
與之對應的EL函數為:fn:substringBefore