EL表達(dá)式

在MVC體系結(jié)構(gòu)中,JSP頁(yè)面只是用來(lái)顯示數(shù)據(jù),但JSP腳本中的表達(dá)式功能不夠強(qiáng)大,它不能直接對(duì)隱式對(duì)象中某對(duì)象的屬性進(jìn)行顯示,需要配合Scriptlet才能顯示數(shù)據(jù),很是麻煩,如果在JSP頁(yè)面中使用EL表達(dá)式將大大簡(jiǎn)化JSP頁(yè)面中的Java代碼,在配合JSP標(biāo)準(zhǔn)動(dòng)作,JSTL,可達(dá)到真正的JSP無(wú)腳本。


EL(Expression Language)表達(dá)式語(yǔ)言

語(yǔ)法:${表達(dá)式},例如:${"Beijing 2008"} 則在JSP頁(yè)面輸出Beijing 2008,相當(dāng)于JSP腳本中的<%="Beijing 2008"%>,在EL表達(dá)式中的“'”和“"”功能是一樣的,表示一個(gè)字符串;

在JSP頁(yè)面中我們可以禁用EL表達(dá)式,需要配置page指令的isELIgnored屬性,屬性值若為true則支持EL表達(dá)式,若為false則禁用表達(dá)式,默認(rèn)情況下是支持EL表達(dá)式的。

在EL表達(dá)式中我們可以使用運(yùn)算符以達(dá)到我們想要的結(jié)果,運(yùn)算符按作用分為以下幾種:

1.算術(shù)運(yùn)算符

注意:在EL表達(dá)式中的‘+’只有數(shù)學(xué)運(yùn)算的功能,沒(méi)有連接符的功能,它會(huì)試著把運(yùn)算符兩邊的操作數(shù)轉(zhuǎn)換為數(shù)值類(lèi)型,進(jìn)而進(jìn)行數(shù)學(xué)加法運(yùn)算,最后把結(jié)果輸出。若出現(xiàn)${'a'+'b'}則會(huì)出現(xiàn)異常。
+:${6+6} - : ${4-3} x:${4*3} /:${9/3}

2.關(guān)系運(yùn)算符

例如>:${8>9}
例如>=:${45>=9}
例如<:${4<9}
例如<=:${9<=8}
例如==:${4==4}
例如!=:${4!=3}

3.邏輯運(yùn)算符

&& 例如:${false && false}
|| 例如:${true ||false}
! 例如:${!true}相當(dāng)于${false}

4.三元運(yùn)算符

? : 例如:${3>2? '是':'不是'}

特殊運(yùn)算符:

empty 判斷EL表達(dá)式中的表達(dá)式是否為空,例如:${empty sessionScope.user}

通過(guò)獲得的參數(shù)進(jìn)行比較判斷時(shí),要這樣比較:${param.name1 == param.name2}

. 是我們最常用的,作用相當(dāng)于執(zhí)行Bean中的
get方法。 例如:${sessionScope.user.userName}意思是:在會(huì)話中得到名稱(chēng)為user的Bean對(duì)象,通過(guò)“.”運(yùn)算符執(zhí)行g(shù)etUserName();方法,返回存放在Bean中的用戶(hù)名屬性的值。

注意:${表達(dá)式} 表達(dá)式部分不需要加引號(hào),如果寫(xiě)成 ${"param.name"} ,那么頁(yè)面上顯示出來(lái)的就不是表單中name的值了,而是 "param.name" 這個(gè)字符串。表達(dá)式與開(kāi)始符和終結(jié)符之間的空格被忽略不計(jì)。如果表達(dá)式的值為null,那么頁(yè)面將顯示一個(gè)空格而不是null。

**[] **作用和“.”運(yùn)算符的一樣,只不過(guò)[]運(yùn)算符可以執(zhí)行一些不規(guī)則的標(biāo)識(shí)符。 例如:${requestScope.user["score-math"]},這個(gè)表達(dá)式中有不規(guī)則的標(biāo)識(shí)符,是不能使用“.”來(lái)訪問(wèn)的。

${user.My-Name}應(yīng)當(dāng)改為${user["My-Name"] }
如果要?jiǎng)討B(tài)取值時(shí),就可以用[]來(lái)做,而.無(wú)法做到動(dòng)態(tài)取值。例如:
${sessionScope.user[data]}中data 是一個(gè)變量

在EL表達(dá)式中提供了許多內(nèi)置對(duì)象,使我們很方便的得到我們想要的數(shù)據(jù):

1.從隱式對(duì)象中得到數(shù)據(jù):

變量
 EL存取變量數(shù)據(jù)的方法很簡(jiǎn)單,例如:${username}。它的意思是取出某一范圍中名稱(chēng)為username的變量。
 因?yàn)槲覀儾](méi)有指定哪一個(gè)范圍的username,所以它會(huì)依序從Page、Request、Session、Application范圍查找。
 假如途中找到username,就直接回傳,不再繼續(xù)找下去,但是假如全部的范圍都沒(méi)有找到時(shí),就回傳null。

屬性范圍在EL中的名稱(chēng)
* Page PageScope
* Request RequestScope
* Session SessionScope
* Application ApplicationScope

pageScope 例如:${pageScope.user.userName} 相當(dāng)于<%=page.getAttribute(
"user").getUserName%>

requestScope 例如:${requestScope.books} 相當(dāng)于<%=request.getAttribute(
"books")%>

sessionScope 例如:${sessionScope.lastURL} 相當(dāng)于<%=session.getAttribute(

"lastURL")%>

applicationScope 例如:${applicationScope.provice} 相
當(dāng)于<%=application.getAttribute("provice")%>

輸入相關(guān)的隱含對(duì)象

與輸入有關(guān)的隱含對(duì)象有兩個(gè):param和paramValues,它們是EL中比較特別的隱含對(duì)象。
例如我們要取得用戶(hù)的請(qǐng)求參數(shù)時(shí),可以利用下列方法:
request.getParameter(String name)
request.getParameterValues(String name)
在EL中則可以使用param和paramValues兩者來(lái)取得數(shù)據(jù)。
${param.name}
${paramValues.name}

其他隱含對(duì)象

1)cookie
JSTL并沒(méi)有提供設(shè)定cookie的動(dòng)作,
例:要取得cookie中有一個(gè)設(shè)定名稱(chēng)為userCountry的值,可以使用${cookie.userCountry}來(lái)取得它。
2)header和headerValues
header 儲(chǔ)存用戶(hù)瀏覽器和服務(wù)端用來(lái)溝通的數(shù)據(jù)
例:要取得用戶(hù)瀏覽器的版本,可以使用${header["User-Agent"]}。
另外在鮮少機(jī)會(huì)下,有可能同一標(biāo)頭名稱(chēng)擁有不同的值,此時(shí)必須改為使用headerValues 來(lái)取得這些值。
3)initParam
initParam取得設(shè)定web站點(diǎn)的環(huán)境參數(shù)(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
可以使用 ${initParam.userid}來(lái)取得名稱(chēng)為userid
4)pageContext
pageContext取得其他有關(guān)用戶(hù)要求或頁(yè)面的詳細(xì)信息。
${pageContext.request.queryString} 取得請(qǐng)求的參數(shù)字符串
${pageContext.request.requestURL} 取得請(qǐng)求的URL,但不包括請(qǐng)求之參數(shù)字符串
${pageContext.request.contextPath} 服務(wù)的web application 的名稱(chēng)
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的協(xié)議(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用戶(hù)名稱(chēng)
${pageContext.request.remoteAddr } 取得用戶(hù)的IP 地址
${pageContext.session.new} 判斷session 是否為新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主機(jī)端的服務(wù)信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容