EL表達式
學習總結
一、 El表達式概念
- EL表達式簡介
1)Expression Language表達式語言
2)是一種在JSP頁面獲取數據的簡單方式(只能獲取數據,不能設置數據)
3) 在JSP2.0開始引入概念
4)EL表達式存取值(例子如下)
servlet | JSP頁面 |
---|---|
request.setAttribute(“key”, value) | ${key} |
注意:EL表達式取值時,該值存儲的作用域要存在,作用域被銷毀了,值也就沒了
-
EL表達式語法
1)${ 變量名或表達式} -
EL表達式作用
1)用於輸出作用域中變量值
2)用於各種運算:算術、邏輯、關系、三元運算等 -
EL表達式與JSP腳本表達式的區別
區別 | JSP腳本表達式 | EL |
---|---|---|
語法 | <%=m %> | ${m} |
輸出哪里的值 | 輸出的是腳本變量 <% int m=5; %> |
輸出的是作用域中的值 <% request.setAttribute(“m”, 5); %> |
注意事項:JavaBean的屬性名或map的鍵名中如果有特殊字符的寫法
變量名[“鍵名”] | 可以使用雙引號,如:${map[“no3-no4”]} |
---|
二、 El中的表達式
1. 算術表達式
算術運算符 | 說明 | 范例 | 結果 |
---|---|---|---|
+ | 加 | ${1+1} | 2 |
- | 減 | ${2-1} | 1 |
* | 乘 | ${1*1} | 1 |
/ 或 div | 除 | ${5 div 2} 或 ${5 / 2} | 2.5 |
% 或 mod | 取余 | ${5 mod 2} 或 ${5 % 2} | 1 |
輸出哪里的值 | 輸出的是腳本變量 <% int m=5; %> |
輸出的是作用域中的值 <% request.setAttribute(“m”, 5); %> |
2. 比較表達式
關系運算符 | 說明 | 范例 | 結果 |
---|---|---|---|
== 或 eq | 等於(equal) | ${1 eq 1} | true |
!= 或 ne | 不等於(not equal) | ${1 != 1} | false |
< 或 lt | 小於(Less than) | ${1 lt 2} | true |
<= 或 le | 小於等於(Less than or equal) | ${1 <= 1} | true |
> 或 gt | 大於(Greater than) | ${1 > 2} | false |
>= 或 ge | 大於等於(Greater than or equal) | ${1 >= 1} | true |
3. 邏輯表達式
邏輯運算符 | 說明 | 范例 | 結果 |
---|---|---|---|
&& 或 and | 交集(與) | ${true and false} | false |
|| 或 or | 並集(或) | ${true || false} | true |
! 或 not | 非 | ${not true} | false |
4. 三元表達式
${ 邏輯判斷 ? 真的值 : 假的值 } |
---|
5. 判空表達式
${ empty 變量名 } 變量一定要放在作用域中 |
---|
1)如果變量名在作用域中為空,不存在,返回 true |
2)如果變量名為空串,返回 true |
3)變量名是一個集合,如果集合中沒有元素,返回 true |
三、EL 從四個作用域中取值
1. 概念
EL 獲取數據的方式是從4個作用域對象中,從小到大的去獲取,如果需要指定作用域獲取數據,可使用以下 EL 的內置對象來指定。
2. pageContext 對象
- JSP本質是 Servlet,但比 Servlet 多了一個作用域:頁面域,在 JSP 中有四大作用域;
- 什么是頁面域:只在一個 JSP 頁面中起作用,不同的 JSP 之間不能實現數據的共享,比請求域范圍還要小;
- 頁面域對象名:pageContext,是 JSP 其中一個內置對象名。
pageContext 操作有關的方法 | 說明 |
---|---|
void setAttribute(String key, Object value) | 向頁面域中添加鍵和值 |
Object getAttribute(String key) | 從頁面域中得到值 |
void removeAttribute(String key) | 刪除四個作用域中同名的鍵 |
Object findAttribute(String key) | 自動從四個作用域中去查某個鍵,從小到大的范圍來查找,如果找到就停止;如果沒有找到,返回 null; |
- 實例代碼(當不同作用域存儲鍵值對中的 key 相同時,使用 EL 表達式 ${key} 獲取數據順序為:從小到大(pageContext -> request -> session -> application));
// 向頁面域中添加一個字符串
pageContext.setAttribute("name", "頁面域");
// 請求域
request.setAttribute("name", "請求域");
// 會話域
session.setAttribute("name", "會話域");
// 上下文域
application.setAttribute("name", "上下文域");
// 自動查找作用域獲取
${name}
- 作用域獲取(當不同作用域存儲鍵值對中的 key 相同時,想要直接獲取該域對象的值可以通過 EL 表達式的方式)
<%-- EL 表達式的方式 --%>
<%-- 在作用域范圍我們的名字取成一樣了,怎么去找到特定的一個作用域中的值呢?? --%>
${pageScope.name}
${requstScope.name}
<%-- session比較特別,因為session是存在瀏覽器中的,只有關閉瀏覽器之后才可以拿到后面作用域中的值 --%>
${sessionScope.name}
${applicationScope.name}
注意:從下到大注釋作用域設置數據代碼,可看到 EL 表達式在往下獲取數據
總結
以上就是對 EL 表達式取值的詳細介紹了,代碼僅供參考,歡迎討論交流。