javaweb回顧第九篇EL表達式

来源:http://www.cnblogs.com/LipeiNet/archive/2016/08/07/5746182.html
-Advertisement-
Play Games

前言:關於EL表示式開發用的非常多,現在我們回顧一下關於如果去操作EL表達式 1:EL表達式語法 所有EL表達式都是由{開始}結束,表達式中用.和[]操作符來訪問數據比喻${user.userName}、${user["userName"]}是等效的。 2:幾個重要的操作符 算術,邏輯,關係操作符和 ...


 前言:關於EL表示式開發用的非常多,現在我們回顧一下關於如果去操作EL表達式

1:EL表達式語法

所有EL表達式都是由{開始}結束,表達式中用.和[]操作符來訪問數據比喻${user.userName}、${user["userName"]}是等效的。

2:幾個重要的操作符

算術,邏輯,關係操作符和我們java語法操作的一樣。

2.1:Empty操作符

Empty操作是判斷一個值是否為null或者"",寫法如${!empty user}

2.2:三目運算符

EL表達式同時也是支持三目運算符${A?結果1:結果2}比如:${1+1>2?1:2}輸出的結果是2

3:隱含對象

在EL表達式中有11中隱含對象下麵我一一列舉下來

3.1:pageContext

pageContext是javax.servlet.jsp.PageContext的實例,可以通過pageContext訪問ServletContext,Request,Response,Session等對象。

3.2:pageScope

我們以前看過Jsp的作用域,這個和Jsp作用域一樣,從意思我們可以看出這個主要是獲取頁面範圍內屬性的。我們看個例子我們先創建一個jsp文件

<%
UserBean user1=new UserBean();
user1.setAge(12);
user1.setEmail("[email protected]");
user1.setUserName("李四");
pageContext.setAttribute("user1", user1);
%>

然後我們開始訪問${pageScope.user1.userName} 我也順便把第一個pageContext的應用加上${pageContext.request.requestURI}

<body>
${pageContext.request.requestURI}
${pageScope.user1.userName}
</body>

3.3:requestScope

主要獲取請求範圍內的屬性的值,在上面的代碼修改為以下代碼

<%
UserBean user1=new UserBean();
user1.setAge(12);
user1.setEmail("[email protected]");
user1.setUserName("李四");
request.setAttribute("user", user1);
%>

jsp中的el為${requestScope.user1.userName}

3.4:sessionScope

 這個主要獲取會話範圍中屬性的值。 我們先建立一個Servlet類然後給Session賦值

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        UserBean user=new UserBean();
        user.setAge(19);
        user.setEmail("[email protected]");
        user.setUserName("張三");
        HttpSession session=request.getSession();
        session.setAttribute("user", user);
    }

然後在el.jsp中來獲取Session屬性的值${sessionScope.user.userName},記得先運行Servlet類然後在運行el.jsp效果如下

3.5:applicationScope

這個是獲取全局範圍內對象的值,這個不過多的說和上面都一樣。

3.6:param

如果我們想獲取URL(http://localhost:8080/taglib-test/el.jsp?userName=趙四)請求的參數值,我們就可以使用${param.userName}來獲取

3.7:paramValues

這個主要來獲取參數請求參數的相關信息是一個數組,用的不是很多

3.8:header

用來獲取請求的頭信息,如${header["User-Agent"]}來獲取頭信息中參數的值

3.9:headerValues

主要用來獲取請求頭信息所有的值。

3.10:cookie

不用說太多

3.11:initParam

主要獲取web應用程式初始化參數的值

4:命名變數

在EL表達式中對於命名變數值是通過pageContext.findAttribute()方法來查找完成的,比喻上面如果我們不寫他們的範圍,那麼就會按照page,Request,Session,application來進行查找,所以我們儘量去寫,這樣可以達到優化程式的目的。

5:EL表達式使用函數

這個和自定義標簽很像,我們也可以使用函數

首先我們先定義一個類(我創建了一個很簡單的)

public class ElFun {
    public static String getHelloWorld(String str)
    {
        return str;
    }
}

然後我們在創建一個tld文件

<?xml version="1.0" encoding="GBK"?>  
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"       
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"       
    version="2.0">     
    <!-- 定 義函數版本 -->  
    <tlib-version>1.0</tlib-version>  
    <!-- 定 義函數名稱 -->  
    <short-name>el</short-name>  
    <!-- 定 義第一個函數 -->  
    <function>  
        <!-- 定 義一個函數 -->  
        <name>hello</name>  
        <!-- 定 義函數處理類 -->  
        <function-class>com.lp.els.ElFun</function-class>  
        <!-- 定 義函數的對應方法 -->  
        <function-signature>  
            java.lang.String getHelloWorld(java.lang.String)  
        </function-signature>  
    </function>    
</taglib> 

大家註意一個事項:就是這個定義的函數名是你jsp中el表達式要引用的不要弄錯了

然後我們就可以在jsp頁面引用

<body>
<%@ taglib uri="/WEB-INF/tlds/el.tld" prefix="el"%>
${el:hello("Hello World")}
</body>

從這裡我們看到el後面的hello並不是我們在類中getHelloWorld。還有就是不要習慣性的在el表達式後面加入;號,會帶來 錯誤。

 


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

-Advertisement-
Play Games
更多相關文章
  • 初識python #以下的代碼都是在PyCharm 4.5的編輯工具下執行的,並且python的版本是3.4 python的第一程式 print("Hello Word") #Hello Word 一、變數名 一)作用:一是用來存儲,二是用來調用 二)定義規則: 1)變數名只能是字母、數字、下劃線的 ...
  • volatile 的特性 當我們聲明共用變數為 volatile 後,對這個變數的讀/寫將會很特別。理解 volatile 特性的一個好方法是:把對 volatile 變數的單個讀/寫,看成是使用同一個鎖對這些單個讀/寫操作做了同步。下麵我們通過具體的示例來說明,請看下麵的示例代碼: 假設有多個線程 ...
  • 1.開通語音識別(預設關閉) 2.語音識別 請註意,開通語音識別後,用戶每次發送語音給公眾號時,微信會在推送的語音消息XML數據包中,增加一個Recognition欄位(註:由於客戶端緩存,開發者開啟或者關閉語音識別功能,對新關註者立刻生效,對已關註用戶需要24小時生效。開發者可以重新關註此帳號進行 ...
  • 學習Hibernate ,我們首先要知道為什麼要學習它?它有什麼好處?也就是我們為什麼要學習框架技術? 還要知道 什麼是Hibernate? 為什麼要使用Hibernate? Hibernate的配置文件的作用是什麼? Hibernate映射文件的作用是什麼? Hibernate持久化對象的狀態有哪 ...
  • nodejs windows下的調用方法: C:\Users\owen>node helloworld.jsHello WorldHello: 25 C:\Users\owen>node getmodule.jsHello BYVoid C:\Users\owen>node app.jsHTTP S ...
  • 在Eclipse 創建動態WEB 工程,在src 下 創建 config.xml: 提示Error: Content is not allowed in prolog 查看為DOM 解析xml error, 查看網上加入 dom4j.jar,refrensh並無效果; // 解決辦法: 用記事本創建 ...
  • 實例運行結果如下 實例運行結果如下 ...
  • 今天寫了個java類連接oracle,拋出了這個問題 java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@127.0.0.1:1521:orcl; 很顯然是URL錯誤,以前碰到過類似的問題,故一起總結一下。 以前 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...