程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> javaweb回顧第九篇EL表達式,javaweb第九篇el

javaweb回顧第九篇EL表達式,javaweb第九篇el

編輯:JAVA綜合教程

javaweb回顧第九篇EL表達式,javaweb第九篇el


 前言:關於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表達式後面加入;號,會帶來 錯誤。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved