一、EL表達式簡介
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,而是空字符串)。
三、EL表達式中的隱式對象
EL表達式中包含11個隱式對象,使用這些隱含對象可以很方便地獲取web開發中的一些常見對象,并讀取這些對象的數據。
隱含對象名稱 | 描 述 |
---|---|
pageContext | 對應于JSP頁面中的pageContext對象(注意:取的是pageContext對象。) |
pageScope | 代表page域中用于保存屬性的Map對象 |
requestScope | 代表request域中用于保存屬性的Map對象 |
sessionScope | 代表session域中用于保存屬性的Map對象 |
applicationScope | 代表application域中用于保存屬性的Map對象 |
param | 表示一個保存了所有請求參數的Map對象 |
paramValues | 表示一個保存了所有請求參數的Map對象,它對于某個請求參數,返回的是一個string[] |
header | 表示一個保存了所有http請求頭字段的Map對象 |
headerValues | 同上,返回string[]數組。注意:如果頭里面有“-”,例Accept-Encoding,則要headerValues[“Accept-Encoding”] |
cookie | 表示一個保存了所有cookie的Map對象 |
initParam | 表示一個保存了所有web應用初始化參數的map對象 |
四、EL表達式中常用的fn函數
在頁面中使用JSTL定義的EL函數:<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
- fn:toLowerCase函數將一個字符串中包含的所有字符轉換為小寫形式,并返回轉換后的字符串,它接收一個字符串類型的參數
- fn:toUpperCase函數將一個字符串中包含的所有字符轉換為大寫形式,并返回轉換后的字符串,它接收一個字符串類型的參數
- fn:trim函數刪除一個字符串的首尾的空格,并返回刪除空格后的結果字符串,它接收一個字符串類型的參數。需要注意的是,fn:trim函數不能刪除字符串中間位置的空格
- fn:length函數返回一個集合或數組大小,或返回一個字符串中包含的字符的個數,返回值為int類型。fn:length函數接收一個參數,這個參數可以是<c:forEach>標簽的items屬性支持的任何類型,包括任意類型的數組、java.util.Collection、java.util.Iterator、java.util.Enumeration、java.util.Map等類的實例對象和字符串
- fn:split函數以指定字符串作為分隔符,將一個字符串分割成字符串數組并返回這個字符串數組。
- fn:split函數接收兩個字符串類型的參數,第一個參數表示要分割的字符串,第二個參數表示作為分隔符的字符串。
- fn:join函數以一個字符串作為分隔符,將一個字符串數組中的所有元素合并為一個字符串并返回合并后的結果字符串。fn:join函數接收兩個參數,第一個參數是要操作的字符串數組,第二個參數是作為分隔符的字符串。
- 如果fn:join函數的第二個參數是空字符串,則fn:join函數的返回值直接將元素連接起來
- fn:indexOf函數返回指定字符串在一個字符串中第一次出現的索引值,返回值為int類型。fn:indexOf函數接收兩個字符串類型的參數,如果第一個參數字符串中包含第二個參數字符串,那么,不管第二個參數字符串在第一個參數字符串中出現幾次,fn:indexOf函數總是返回第一次出現的索引值;如果第一個參數中不包含第二個參數,則fn:indexOf函數返回-1。如果第二個參數為空字符串,則fn:indexOf函數總是返回0
- fn:contains函數檢測一個字符串中是否包含指定的字符串,返回值為布爾類型。fn:contains函數在比較兩個字符串是否相等時是大小寫敏感的。
- fn:contains函數接收兩個字符串類型的參數,如果第一個參數字符串中包含第二個參數字符串,則fn:contains函數返回true,否則返回false。如果第二個參數的值為空字符串,則fn:contains函數總是返回true。實際上,fn:contains(string, substring)等價于fn:indexOf(string, substring) != -1
- fn:containsIgnoreCase函數忽略大小寫
- fn:startsWith函數用于檢測一個字符串是否是以指定字符串開始的,返回值為布爾類型。
- fn:startsWith函數接收兩個字符串類型的參數,如果第一個參數字符串以第二個參數字符串開始,則函數返回true,否則函數返回false。如果第二個參數為空字符串,則fn:startsWith函數總是返回true
- fn:endsWith函數與上述函數類似
- fn:replace函數將一個字符串中包含的指定子字符串替換為其它的指定字符串,并返回替換后的結果字符串。fn:replace方法接收三個字符串類型的參數,第一個參數表示要操作的源字符串,第二個參數表示源字符串中要被替換的子字符串,第三個參數表示要被替換成的字符串
- fn:substring函數用于截取一個字符串的子字符串并返回截取到的子字符串。fn:substring函數接收三個參數,第一個參數是用于指定要操作的源字符串,第二個參數是用于指定截取子字符串開始的索引值,第三個參數是用于指定截取子字符串結束的索引值,第二個參數和第三個參數都是int類型,其值都從0開始
- fn:substringAfter函數用于截取并返回一個字符串中的指定子字符串第一次出現之后的子字符串。fn:substringAfter函數接收兩個字符串類型的參數,第一個參數表示要操作的源字符串,第二個參數表示指定的子字符串