JSP表示式語言(EL)使得訪問儲存在JavaBean中的資料變得非常簡單。JSP EL既可以用來建立算術表示式也可以用來建立邏輯表示式。在JSP EL表示式內可以使用整數型、浮點型、字串、常量true、false,還有null。一般的在JSP標籤中指定一個屬性值時,需要使用一大行程式碼:
<jsp:setProperty name="box" property="perimeter" value="100" />
JSP EL 允許指定一個表示式來表示一個屬性值:${expr} ,其中,expr指的是表示式。在JSP EL中通用的操作符是 . 和 {}。這兩個操作符允許通過內嵌的JSP物件訪問各種各樣的JavaBean屬性。例如上面的<jsp:setProperty>標籤可以使用表示式語言寫成下面形式:
<jsp:setProperty name="box" property="permeter" value="${box.width*2+box.height*2}" />
當JSP編譯器在屬性中見到"${}"格式後,它湖產生程式碼來計算這個表示式,並且產生一個替代品來代替表示式的值。
<jsp:text> Box Perimeter is:${box.width*2+box.height*} </jsp:text>
在EL表示式中可以使用圓括號來組織表示式,想要停用對EL表示式的評估,需要使用page指令的isELIgnored的屬性值設定為true :
<%@ page isELIgnored="true|false" %> //預設是false,即EL表示式有效
將isELIgnored屬性值設定為true,這樣在這個JSP頁面EL表示式就會失效。
EL中的基礎操作符
EL表示式支援大部分Java所提供的算術和邏輯操作符:
操作符 | 描述 |
. | 訪問物件的一個屬性或者一個對映條目 |
[] | 訪問物件的一個屬性或者一個陣列、連結串列的元素 |
() | 組織一個子表示式以改變優先順序 |
+ | 加 |
- | 減 |
* | 乘 |
/ or div | 除 |
% or mod | 取餘 |
== or eq | 測試是否相等 |
!= or ne | 測試是否不等 |
< or lt | 測試是否小於(less than) |
> or gt | 測試是否大於(greater than) |
<= or le | 測試是否小於等於 |
>= or ge | 測試是否大於等於 |
&& or and | 測試邏輯與 |
|| or or | 測試邏輯或 |
! or not | 測試邏輯非 |
empty | 測試是否空值 |
JSP EL中的函式
JSP EL允許在表示式中使用函式。這些函式必須被定義在自定義標籤庫中。
${fn:length("Get my length")}
fn:length函式在JSTL庫中定義,上面的語法可以獲取一個字串的長度,要使用任何標籤庫的函式,都需要將這些庫安裝在伺服器中,然後使用<taglib>標籤在JSP 檔案中引用這些庫。
JSP EL隱含物件
JSP EL支援下表中的隱含物件:
隱含物件 | 描述 |
pageScope | page作用域 |
requestScope | request作用域 |
sessionScope | session作用域 |
applicationScope | application作用域 |
param | request物件的引數,字串 |
paramValues | request物件的引數,字串集合 |
header | HTTP資訊頭,字串 |
headerValues | HTTP資訊頭,字串集合 |
initParam | 上下文初始化引數 |
cookie | Cookie值 |
pageContext | 當前頁面的pageContext |
pageContext物件
pageContext物件是JSP中pageContext物件的引用。通過pageContext物件可以訪問request物件。例如,訪問request物件傳入的查詢字串:
${pageContext.request.queryString}
scope物件
pageScope,requestScope,sessionScope,applicationScope變數用來訪問儲存在各個作用域層次的變數。如需要訪問session範圍域內的test變數,可以這樣用${sessionScope.tset}。
param和paramValues物件
param和paramValues物件用來訪問引數值,用來替換request.getParameter方法和request.getParameterValues方法。例如,訪問一個名為order的引數,可以用EL表示式:${param.order},或者${param[order]}。param物件返回單一的字串,而paramValues物件則返回一個字串陣列。