五、EL表達式
5.1 什麼是EL表達式
- EL表達式:是指(Expression Language)表達式語言,是一種在JSP頁面擷取資料的簡單方式(隻能擷取資料,不能設定資料),在JSP2.0開始引入。
- EL表達式的寫法(用美元符号“$”定界,内容包括在花括号“{}”中):
//JSP寫法: <%=session.getAttribute("name") %> //EL表達式寫法: ${sessionScope.name}
注意:
- EL表達式的代碼隻能寫在JSP的HTML代碼中,不能寫到<%與%>之間;
- EL表達式提供了擷取對象以及屬性的簡單方法,某些情況下EL表達式完全可以替代JSP腳本或者JSP的行為。
-
EL表達式的相容性設定(有三種方法)
在預設情況下,Sevlet2.3/JSP1.2是不支援EL表達式的,而Servlet2.4/JSP2.0支援。
- 修改web.xml檔案
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
- 設定某個JSP頁面使用EL表達式:需要在JSP頁面加上:
- web.xml檔案中加上下列代碼,每個JSP頁面都可以使用:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> </jsp-property-group> </jsp-config>
5.2 EL表達式的基本文法
EL提供“.”和“[]”兩種運算符來通路存取資料,主要使用EL擷取對象的屬性,包括JavaBean的屬性值、擷取數組中的元素以及擷取集合對象中的元素。
對于null值直接以空字元串顯示,而不是null,在運算時也不會發生錯誤或空指針異常,是以在使用EL通路對象的屬性時不需要判斷對象是否為null對象,這樣就為編寫程式提供了友善。
- 擷取JavaBean的屬性值
其中,點運算符前面為 JavaBean 的對象 user,後面為該對象的屬性 age,表示利用 user 對象的 getAge 方法取值并顯示在網頁上。//在JSP中 <%=user.getAge()%> //使用EL表達式(通常情況下這兩種寫法是通用的) ${use.age} ${user["age"]}
- 擷取數組的元素
//在servlet中存儲這樣一個數組 String dogs[] = {"lili","huahua","guoguo"}; request.setAtribute("array",dogs); //在對應視圖JSP中取出數組中的元素 ${array[0]} ${array[1]} ${array[2]}
- 擷取集合對象中的元素
//在servlet中定義一個數組對象 User user1 = new User("01","zhangsan",23,"男"); User user2 = new User("02","小李",18,"女"); ArrayList<User> user = new ArrayList<>(); user.add(user1); user.add(user2); request.setAttribute("array",user); //在JPS頁面中取出集合中User對象的屬性 ${array[0].id} ${array[0].name} ${array[0].age} ${array[1].id} ${array[1].name} ${array[1].age}
注意:
以下兩種情況必須使用“[]”:
1.包含特殊符号:
${user.first-name} 錯誤; ${user[“first-name”]} 正确
2. 通過動态變量取值:
${user[param]}
5.3 EL表達式的變量
EL存取變量資料的方法很簡單,即從4個作用域對象中,從小到大的去擷取,如果需要指定作用域擷取資料,可使用以下 EL 的内置對象來指定。
JSP内置對象 | EL名稱 |
---|---|
Page | PageScope |
Request | RequestScope |
Session | SessionScope |
Application | ApplicationScope |
<%
// 向頁面域中添加一個字元串
pageContext.setAttribute("name", "頁面域");
// 請求域
request.setAttribute("name", "請求域");
// 會話域
session.setAttribute("name", "會話域");
// 上下文域
application.setAttribute("name", "上下文域");
// 自動查找作用域擷取
${name}
%>
EL表達式的查找順序:
Page<Request<Session<Application
EL的隐式對象
5.4 EL表達式的運算符
類别 | 運算符 |
---|---|
算術運算符 | +、-、*、/或div、%或mod |
關系運算符 | ==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge |
邏輯運算符 | &&或and、 |
其他運算符 | Empty運算符、條件運算符、()運算符 |
5.5 EL表達式的自動類型轉換
要擷取文本框中的輸入,我們需要做類型轉換
//正常的java代碼
String str = request.getParameter("count");
int count = Integer.parseInt(str);
count = count + 20;
//用EL表達式時,EL表達式會進行自動類型轉換
${param.count + 20}