在EL表達式出現之前,開發Java Web應用程序時,經常需要將大量的Java代碼片段嵌入JSP頁面中,這會使得頁面看起來很亂,而使用EL表達式則比較簡潔。
范例:
在頁面中顯示保存在session中的變量username,並將其輸出到頁面中,代碼如下:
<%
if(session.getAttribute(“username”) != null){
out.print(session.getAttribute(“username”).toString();
}
%>
如果使用EL,則只需一句代碼即可實現
${username}
因此,EL在Web開發中比較常用,通常與 JSTL一起使用。
EL表達式語法:以${開頭,以}結束,中間為合法的表達式,具體語法格式如下:
${expression}
參數說明:
Expression:指定要輸出的內容,可以是字符串,也可以是由EL運算符組成的表達式。
PS:
由於EL表達式的語法是以${開頭,所以如果在JSP頁面中要顯示字符串S{,則必須在前面加上。即”${” .或者寫成“${‘${’}” .
范例:
在頁面中輸出字符串“JSP學習”,代碼如下:
${‘JSP學習’}
EL除了具有語法簡單、使用方便的特點,還有以下特點:
A、EL可以與JSTL結合使用,也可以也JavaScript語句結合使用
B、EL中會自動進行類型轉換,如果想通過EL輸入兩個字符串數值(如n1和n2)的和,可以直接通過“+”進行連接(如${n1+n2})
C、EL不僅可以訪問一般變量,還可以訪問JavaBean中的屬性及嵌套屬性和集合對象
D、EL中可以執行算術運算、邏輯運算、關系運算和條件運算等操作
E、EL中可以獲取湖區命名空間(PageContext對象,他是頁面中所有其他內置對象的最大范圍的繼承對象,通過他可以訪問其他內置對象)
F、在EL中可以訪問JSP的作用域(request、session、application、page)
G、在使用EL進行除法運算的時候,如果0作為除數,則返回無窮大Infinity,而不是返回錯誤
H、擴展函數可以與Java類的靜態方法進行映射
只要安裝的Web服務器能支持Servlet2.4/JSP2.0,就可以在JSP頁面中使用EL。由於在JSP2.0之前的版本中沒有EL,所以JSP為了和以前的規范兼容,還提供了禁用EL的方法。JSP中提供3中方法禁用EL,分別介紹如下。
使用斜槓是一種比較簡單的禁用EL的方法。該方法只需要在EL的起始標記“${”前加上“”。具體語法格式如下:
${expression}
PS:
該語法格式只使用在禁用頁面中的一個或幾個EL表達式的情形
使用JSP的page指令可以禁用EL表達式,具體語法格式如下:
<%@page isELIgnored=“布爾值”%>
參數說明:
isELIgnored:用於指定是否禁用頁面的EL,如果屬性值為true,則忽略頁面中的EL,否則將解析頁面中的EL
范例:
<%@page isELIgnored=”true”%>
PS:
該方法適用於禁用一個JSP頁面中的EL
3、在web.xml中配置
在web.xml中配置
范例:
PS:
該方法使用於禁用Web應用中的所有的JSP頁面中的EL
同Java一樣,EL也有自己的保留關鍵字,在變量命名時,應避免這些關鍵字,包括使用EL輸出已經保存在作用域范圍內的變量,也不能使用關鍵字,如果已經定義了,那麼需要修改為其他的變量名。EL中的保留關鍵字如下:
and
eq
gt
instanceof
div
or
le
false
empty
not
lt
ge
如果EL中使用了保留的關鍵字,那麼在Eclipse中,將給出錯誤提示。如果忽略該提示,直接運行程序,將會出錯。
EL可以訪問數據運算符、算數運算符、關系運算符、條件運算符及empty運算符等。各運算符的優先級如下:
運算符的優先級決定了在多個運算符同時存在的時候,各個運算符的求職順序,對於同級別的運算符采用從左到右的順序進行計算。
PS:
使用()可以改變優先級。在復雜的表達式中,使用括號可以使得表達式更容易閱讀和避免出錯。
通過EL提供的“[]”和“,”運算符可以訪問數據。通常情況下,“[]”和“.”運算是等價的,可以相互代替。
范例:
訪問JavaBean中的userInfo的id屬性,可以寫成以下兩種形式:
${userInfo.id}
${userInfo[id]}
但是也不是所有的情況下都可以相互替代,例如,當對象的屬性名中包含一些特殊的符號(-或.)時,就只能使用“[]”運算符來訪問對象的屬性。例如:${userInfo[user-id]}是正確的,而${userInfo.user-name}則是錯誤的。另外,EL的“[]”運算符還有一個用途,就是用來獲取數組或List集合中的數據。
數組元素的獲取:
應用“[]”運算符可以獲取數組的指定元素,但是“.”不能
范例:
獲取request范圍中的數組arrBook中的第一個元素,可以使用下面的EL表達式:
${arrBook[0]}
范例:
編寫array.jsp,該文件中,首先包含一個3元素的以為數組,並賦值,然後通過for循環和EL輸出數組中的元素
<%@ page language=java import=java.util.* pageEncoding=UTF-8%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>
<%
String[] arr = {Java,JSP,MySQL};//定義一維數組
request.setAttribute(book,arr);//將數組保存在request對象中
%>
<%
String[] arr1 = (String [])request.getAttribute(book);//獲取保存在request范圍內的對象
//通過循環和EL輸出一維數組的內容
for(int i = 0 ; i < arr1.length ; i++){
request.setAttribute(requestI, i);//將循環變量i保存在request范圍內的變量中
%>
${requestI }:${book[requestI] }
<%
}
%>
List集合元素的獲取
應用“[]”運算符還可以獲取List集合中的指定元素,但是“.”不行
范例:
session中保存一個包含3個元素的List,並用EL輸出
<%@ page language=java import=java.util.* pageEncoding=UTF-8%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>
<%
List
list.add(餅干);
list.add(牛奶);
list.add(面包);
session.setAttribute(goodsList, list);//將List保存到session中
%>
<%
List
for(int i = 0 ; i < list1.size() ; i++){
session.setAttribute(sessionI, i);
%>
${sessionI } : ${goodsList[sessionI] }
<%
}
%>
在EL中,判斷對象是否為空,可以通過empty運算符實現,該運算符是一個前綴運算符,即empty運算符位於操作數的前方,用來確定一個對象是否為null或空。Empty運算符的格式如下:
${empty.expression}
范例:
定義兩個request范圍內的變量user,user1,分別數值為null和“”.
<%request.setAttribute(“user”,””);%>
<%request.setAttribute(“user1”,null);%>
然後通過empty運算符判斷user,user1是否為空
${empty user} //返回true
${empty user1} //返回true
另外,empty運算符也可以與not運算符結合使用,判斷一個對象或變量是否為空。
范例:
<%request.setAttribute(“user”,””);
${not empty user} //返回值為false
在EL中,通過邏輯運算符和關系運算符可以實現邏輯關系運算。關系運算符用於實現兩個表達式的比較,進行比較的表達式可以是數值型也可以是字符串。而邏輯運算符則常用於對Boolean類型的數據進行操作。邏輯運算符和關系運算符經常一起使用。
范例:
在判斷考試成績時,可以用下面的表達式判斷60到80分的成績
成績>60 and 成績<80
關系運算符
在EL中,提供了6中關系運算符。關系運算符的使用格式如下:
運算符
功能
示例
==或eq
等於
${10==10}/${10 eq 10}
!=或ne
不等於
${10!=10}/${“A” ne “A”}
<或lt
小於
${7<6}/${“A” lt “B”}
>或gt
大於
${7>6}/${“A” gt “B”}
<=或le
小於等於
${“A” <= “A”}
>=或ge
大於等於
${7>=6}/${7 ge 6}
邏輯運算符
在EL中進行條件運算
語法格式:
${條件表達式?表達式1:表達式2}
參數說明:
條件表達式:用於指定一個條件表達式,該表達式的值為Boolean型。可以由關系運算符、邏輯運算符和empty運算符組成
表達式1:用於指定當條件表達式的值為true時,將要返回的值
表達式2:用於指定當條件表達式的指為false時,將要返回的值
范例:應用條件運算符實現放變量cart的值為空時,輸出“cart車為空”,否則輸出cart的值。
${empty cart ? ”cart為空” : cart}
通常情況下,條件運算符可以用JSTL中的條件標簽