程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP詳細篇——EL表達式(一)

JSP詳細篇——EL表達式(一)

編輯:關於JSP

JSP詳細篇——EL表達式(一)


EL表達式

EL表達式概述

在EL表達式出現之前,開發Java Web應用程序時,經常需要將大量的Java代碼片段嵌入JSP頁面中,這會使得頁面看起來很亂,而使用EL表達式則比較簡潔。

范例:

在頁面中顯示保存在session中的變量username,並將其輸出到頁面中,代碼如下:

<%

if(session.getAttribute(“username”) != null){

out.print(session.getAttribute(“username”).toString();

}

%>

如果使用EL,則只需一句代碼即可實現

${username}

 

因此,EL在Web開發中比較常用,通常與 JSTL一起使用。

1、EL的基本語法

EL表達式語法:以${開頭,以}結束,中間為合法的表達式,具體語法格式如下:

${expression}

參數說明:

Expression:指定要輸出的內容,可以是字符串,也可以是由EL運算符組成的表達式。

 

PS:

由於EL表達式的語法是以${開頭,所以如果在JSP頁面中要顯示字符串S{,則必須在前面加上。即”${” .或者寫成“${‘${’}” .

范例:

在頁面中輸出字符串“JSP學習”,代碼如下:

${‘JSP學習’}

 

 

2、EL的特點

 

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類的靜態方法進行映射

 

與低版本環境兼容—禁用EL

只要安裝的Web服務器能支持Servlet2.4/JSP2.0,就可以在JSP頁面中使用EL。由於在JSP2.0之前的版本中沒有EL,所以JSP為了和以前的規范兼容,還提供了禁用EL的方法。JSP中提供3中方法禁用EL,分別介紹如下。

 

1、使用斜槓“”

 

使用斜槓是一種比較簡單的禁用EL的方法。該方法只需要在EL的起始標記“${”前加上“”。具體語法格式如下:

${expression}

PS:

該語法格式只使用在禁用頁面中的一個或幾個EL表達式的情形

2、使用page 指令

使用JSP的page指令可以禁用EL表達式,具體語法格式如下:

<%@page isELIgnored=“布爾值”%>

參數說明:

isELIgnored:用於指定是否禁用頁面的EL,如果屬性值為true,則忽略頁面中的EL,否則將解析頁面中的EL

范例:

<%@page isELIgnored=”true”%>

 

PS:

該方法適用於禁用一個JSP頁面中的EL

 

3、在web.xml中配置元素

 

在web.xml中配置元素可以實現禁用服務器中的EL。

范例:

*.jsp

true

 

 

 

PS:

該方法使用於禁用Web應用中的所有的JSP頁面中的EL

 

保留的關鍵字

同Java一樣,EL也有自己的保留關鍵字,在變量命名時,應避免這些關鍵字,包括使用EL輸出已經保存在作用域范圍內的變量,也不能使用關鍵字,如果已經定義了,那麼需要修改為其他的變量名。EL中的保留關鍵字如下:

and

eq

gt

instanceof

div

or

le

false

empty

not

lt

ge

如果EL中使用了保留的關鍵字,那麼在Eclipse中,將給出錯誤提示。如果忽略該提示,直接運行程序,將會出錯。

 

EL的運算符和優先級

EL可以訪問數據運算符、算數運算符、關系運算符、條件運算符及empty運算符等。各運算符的優先級如下:

 

運算符的優先級決定了在多個運算符同時存在的時候,各個運算符的求職順序,對於同級別的運算符采用從左到右的順序進行計算。

PS:

使用()可以改變優先級。在復雜的表達式中,使用括號可以使得表達式更容易閱讀和避免出錯。

1.通過EL訪問數據

 

通過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 = new ArrayList();//聲明一個List集合對象

list.add(餅干);

list.add(牛奶);

list.add(面包);

session.setAttribute(goodsList, list);//將List保存到session中

%>

<%

List list1 = (List)session.getAttribute(goodsList);//獲取保存在session中的對象

for(int i = 0 ; i < list1.size() ; i++){

session.setAttribute(sessionI, i);

%>

${sessionI } : ${goodsList[sessionI] }

<%

}

%>

 

 

 

 

2.在EL中判斷對象是否為空

 

在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

 

3.EL中的邏輯關系運算

 

在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中的條件標簽代替

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved