Javaweb之EL表達式

来源:https://www.cnblogs.com/naihuangbao/archive/2018/10/28/9839393.html
-Advertisement-
Play Games

1.EL表達式簡介 EL全名為Expression Language。EL的主要作用為: 獲取數據:EL表達式主要用於替換jsp頁面中的腳本表達式,以從各種類型的web域中檢索java對象,獲取數據。(某個web域中的對象,訪問JavaBean的屬性,訪問list集合,訪問map集合,訪問數組) 執 ...


1.EL表達式簡介

EL全名為Expression Language。EL的主要作用為:

  • 獲取數據:EL表達式主要用於替換jsp頁面中的腳本表達式,以從各種類型的web域中檢索java對象,獲取數據。(某個web域中的對象,訪問JavaBean的屬性,訪問list集合,訪問map集合,訪問數組)
  • 執行運算:利用EL表達式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
  • 獲取web開發常用對象:EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕鬆獲得對web常用對象的引用,從而獲得這些對象中的數據。
  • 調用java方法:EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。

1.1 獲取數據

使用EL表達式獲取數據的語法:"${標識符}"

EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回""(空字元串)。若沒有指定哪個屬性範圍,它的預設值會從page範圍找,假如找不到,再依序到request,session,application範圍找。假如全部的範圍都找不到時,就返回null值了。如下:${ }中沒有sessionScope屬性範圍,依舊可以讀到存儲的數據。

<body>
  <%
  Customer customer=new Customer();
  customer.setName("koala");
  customer.setAge(12);
  session.setAttribute("customer",customer);
   %>
   <br>
   name: ${customer.name}
   <br>
   age: ${customer.age}
</body>

EL表達式可以很輕鬆獲取JavaBean的屬性,或獲取數組、Collection、Map類型集合的數據。

獲取request域中的對象:

<body>
    <% request.setAttribute("name", "koala"); %>
    name: ${name}
</body>

 

獲取JavaBean的屬性:

<body>
<%
  Customer customer=new Customer();
  customer.setAge(21);
  request.setAttribute("customer",customer);
 %>
 customer's age: ${customer.age}
</body>

獲取list集合中指定位置的元素:

<body>
  <%
    Customer customer1=new Customer();
    customer1.setAge(21);
    Customer customer2=new Customer();
    customer2.setAge(23);
    List<Customer> list=new ArrayList<Customer>();
    list.add(customer1);
    list.add(customer2);
    request.setAttribute("list", list);
   %>
   customer2's age:${list[1].age}
 </body>

1.2 執行運算

語法:${運算表達式},EL表達式支持如下運算符:

1.2.1 關係運算符

1.2.2 邏輯運算符

1.2.3 empty運算符

檢查對象是否為null(空)

1.2.4 二元表達式

${username==null?"":user.name}

1.2.5 []和.號運算符

EL提供.和[]兩種運算符來存取數據,兩者所代表的意思是一樣的。

如下,當域對象的屬性名中有特殊字元“.”時使用[]會很方便:

<body>
  <%
  Customer customer=new Customer();
  customer.setName("koala");
  session.setAttribute("com.d.dsa",customer);
   %>
   <br>
   name: ${sessionScope["com.d.dsa"].name}
</body>

2.EL的隱含對象

EL中一共有11個隱含對象,可以將它分成三類:

  • 與範圍有關的隱含對象:pageScope, requestScope, sessionScope, applicationScope
  • 與輸入有關的隱含對象,獲取請求參數的:param(一個), paramValues(一組)
  • 其它請求對象:cookie, header, headerValues, initParam, pageContext

2.1 與範圍有關的隱含對象

<body>
  time:${applicationScope.time}
  <!-- 相當於
  <%=application.getAttribute("time") %>
  -->
  <%
  application.setAttribute("time",new Date());
   %>
</body>

2.2 與輸入有關的隱含對象

el.jsp中:

 <body>
  <a href="http://localhost:8080/MyWebProject/jspTest/el2.jsp?score=98&name=A&name=B">To EL2 page</a>
 </body>

 el2.jsp中:

<body>
    score:${param.score}
<!--相當於:
    <%= request.getAttribute("score")%>
      -->
    <br>
    names:${paramValues.name[0]} and ${paramValues.name[1]}
</body>

運行el.jsp:

點擊超鏈接:

註:

names:${paramValues.name[0].class.name} 

相當於

<%= request.getParameterValues("name")[0].getClass().getName()%>

也就是只要返回值有get...方法,就可以使用EL方法調用。

2.3 其它請求對象

  • cookie:假如我們在cookie中設定一個名稱為userCountry的值,那麼可以使用${cookie.userCountry}來取得它。
  • header和headerValues:header存儲用戶瀏覽器和服務端用來溝通的數據,當用戶要求服務端的網頁時,會送出一個記載要求信息的標頭文件,例如,用戶瀏覽器的版本,用戶電腦所設定的區域等其他相關數據。若同一標頭名稱擁有不同的值,改用headerValues。
  • initParam:獲得當前web應用的初始化參數:在web.xml中進行配置,
<context-param>
    <param-name>initName</param-name>
    <param-value>koala</param-value>
</context-param>

在jsp文件中使用initParam:${initParam.initName}即可獲得當前web應用的初始化參數koala。

  • pageContext:pageContext即為PageContext類型,但只能讀取屬性。

contextPath:${pageContext.request.contextPath}

sessionId:${pageContext.session.id}

sessionAttributeNames:${pageContext.session.attributeNames}

3.EL的關係運算符

比較重要的是三目運算符:${param.score > 60 ? "及格" : "不及格"}

4.empty運算符

empty可以作用於一個集合,若集合不存在或集合中沒有元素,其結果都為true。

<body>
  <% 
  List<String> names=new ArrayList<String>();
  names.add("abc");
  request.setAttribute("names",names);
  %>
  names is empty:${empty requestScope.names}
</body>

運行jsp文件,

 

搜索微信公眾號“程式員考拉”歡迎關註!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ThinkPHP5+小程式商城 網盤視頻 有需要聯繫我 QQ:1844912514 ...
  • 近日,有朋友向我求助一件小事兒,他在一個短視頻app上看到一個好玩兒的段子,想下載下來,可死活找不到下載的方法。這忙我得幫,少不得就抓包分析了一下這個app,找到了視頻的下載鏈接,幫他解決了這個小問題。 因為這個事兒,勾起了我另一個念頭,這不最近一直想把python爬蟲方面的知識梳理梳理嗎,乾脆藉機 ...
  • Thymeleaf是用於Web和獨立環境的現代伺服器端Java模板引擎。Thymeleaf的主要目標是將優雅的自然模板帶到您的開發工作流程中—HTML能夠在瀏覽器中正確顯示,並且可以作為靜態原型,從而在開發團隊中實現更強大的協作。Thymeleaf能夠處理HTML,XML,JavaScript,CS... ...
  • 個人的一些認識,希望能對初學Java的你,或者困惑於方法參數傳遞的你祈禱一絲幫助! 下麵是一些作者的個人觀點,如果有錯,歡迎各位大牛指出錯誤,灰常感謝您的觀看與支持... 今天學習Java的時候,看見書中提及方法參數傳遞 有按值傳遞 和按地址傳遞; 上面的源代碼是Java中的按值傳遞: 那什麼是引用 ...
  • python學習—字元編碼 例如漢字“中” 十進位:20013 二進位:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8) 十六進位:u4e2d 八進位: ascii ASCII編碼是1個位元組 只能編碼純英文 節省空間 unico ...
  • list是C++標準模版庫(STL,Standard Template Library)中的部分內容。實際上,list容器就是一個雙向鏈表,可以高效地進行插入刪除元素。 使用list容器之前必須加上STL的list容器的頭文件:#include ...
  • 多線程 參數傳遞 1,值傳遞,拷貝一份新的給新的線程。線程1中有個int變數a,線上程1中啟動線程2,參數是a的值,這時就會拷貝a,線程1和線程2不共用a。 2,引用傳遞,不拷貝一份新的給新的線程。線程1中有個int變數a,線上程1中啟動線程2,參數是a的引用,這時就不會拷貝a,線程1和線程2共用a ...
  • T1 帽子戲法 問題描述 小 Y 有一個$n n n$的“帽子立方體” ,即一個$n$層的立方體,每層的帽子都 可以排成$n n$的矩陣。 “帽子立方體”中的每一個帽子都有一個顏色,顏色共 26 種,用 26 個大寫字母來表示。 現在,小 Y 邀請小 F 來表演她的帽子戲法。小 F 會 $2$ 種帽 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...