你還記得JSP裏的表達式語言(EL)嗎?

1.表達式語言的語法

      EL表達式以 ${ 開頭,並以 } 結束。EL表達式的結構如下:
${expression}
例如,表達式x+y,可以寫成:
${x+y}
      它也常用來連接兩個表達式。對於一系列的表達式,它們的取值將是從左到右進行,計算結果的類型爲String,並且連接在一起。加入a+b等於8,c+d等於10,那麼這兩個表達式的計算結果將是810:
${a+b} ${ c+d}
表達式 ${a+b}and ${c+d}的取值結果則是8and10。
(2)[ ]和 . 運算符
      EL表達式可以返回任意類型的值。如果EL表達式的結果是一個帶有屬性的對象,則可以利用[ ]或者.運算符來訪問該屬性。“[ ]”和“ . ”運算符類似:“[ ]”是比較規範 的形式,“ . ”運算符則比較快捷。
      爲了訪問對象的屬性,可以使用以下任意一種形式:
${object[“propertyName”]}
${object.propertyName}
      但是,如果propertyName不是有效的Java變量名,只能使用[ ]運算符。例如,下面這個EL表達式就可以用來訪問隱式對象標題中的HTTP標題host:
${header[“host”]}
${header.host}
      但是,要想訪問accept-language標題,則只能使用“[ ]”運算符。因爲accept-language不是一個合法的Java變量名。如果用“.”運算符訪問它,將會導致異常。
      如果對象的屬性碰巧返回帶有屬性的另一個對象,則既可以用“[ ]”,也可以用“ . ”運算符來訪問第二個對象的屬性。
(3)訪問JavaBean
      利用“ . ”或“ [ ]”運算符,都可以訪問bean的屬性。其結構如下:
${beanName[“propertyName”]}
${beanName.propertyName}
例如,訪問myBean的secret屬性,使用以下表達式:
${myBean.secret}
      如果該屬性是一個帶屬性的對象,那麼同樣也可以利用“ . ”或“[ ]”運算符來訪問第二個對象的該屬性。假如該屬性是一個Map、List或者array,則可以利用和訪問Map值或List成員或array元素的同樣規則。

2.EL隱式對象

      在JSP頁面中,可以利用JSP腳本來訪問JSP隱式對象。但是,在免腳本的JSP頁面中,則不可能訪問這些隱式對象。EL允許通過一組它自己的隱式對象來訪問不同的對象。
(1)pageContext
      pageContext對象表示當前JSP頁面的javax.servlet.jsp.PageContext。它包含了所有其他的JSP隱式對象。如request、response、Out、session、application、config、PageContext、page、exception。例如,可以利用一下任意一個表達式來獲取當前的ServletRequest:
$[pageContext.request}
$[pageContext[“request”]
(2)initParam
      隱式對象initParam用於獲取上下文參數的值。例如,爲了獲取名爲password的上下文參數值,可以使用以下表達式:
${initParam.password}
或者
${initParam[“password”]}
(3)param
      隱式對象param用於獲取請求參數值。這個對象表示一個包含所有請求參數的Map。例如,要獲取userName參數,可以使用以下任意一種表達式:
${param.userName}
${param[“userName”]}
(4)paramValues
      利用隱式對象paramValues可以獲取一個請求參數的多個值。這個對象表示一個包含所有請求參數,並以參數名稱作爲key的Map。每個key的值是一個字符串數組,其中包含了指定參數名稱的所有值。即使該參數只有一個值,它也仍然返回一個帶有一個元素的數組。例如,爲了獲得selectedOptions參數的第一個值和第二個值,可以使用以下表達式:
$[paramValues.selectedOptions[0]}
${paramValues.selectedOptions[1]}
(5)cookie
      隱式對象cookie可以用來獲取一個cookie。這個對象表示當前HttpServletRequest中所有cookie的值。例如,爲了獲取名爲jsessionid的cookie值,要使用以下表達式:
${cookie.jsessionid.value}
爲了獲取jessionid cookie的路徑值,要使用以下表達式:
${cookie.jsessionid.path}
(6)header
      隱式對象header表示一個包含有所有請求標題的Map。爲了獲取header值,要利用header名稱作爲key。例如,爲了獲取accept-language這個header值,可以使用以下表達式:
${header[“accept-language”]}
      隱式對象headerValues表示一個包含所有請求head,並以header名稱作爲key的Map。但是,與head不同不同的是,隱式對象headerValues返回的Map返回的是一個字符串數組。例如,爲了獲取標題accept-language的第一個值,要使用以下表達式:

${headerValues["accept-language" ][0]}

(7)applicationScope、sessionScope、requestScope和pageScope
      隱式對象applicationScope用於獲取應用程序範圍級變量的值。加入有一個應用程序範圍級變量myVar,就可以利用以下表達式來獲取這個屬性:
${applicationScope.myVar}
      注意,在servlet/JSP編程中,有界對象是指在以下對象中作爲屬性的對象:PageContext、ServletRequest、HttpSession或者ServletContext。隱式對象sessionScope、requestScope和pageScope與applicationScope相似。但是其範圍分別爲session、request和page。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章