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 表達式取值的詳細介紹了,代碼僅供參考,歡迎討論交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM