JSP表達式語言(EL)
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對象則返回一個字符串數組。
JSP表達式語言(EL)