1、EL表達式概述
為了使JSP中表達式寫起來更方便
2、EL表達式的作用
2.1、獲取數據
EL表達式主要用於替換JSP頁面中的腳本表達式<%= 變量或表達式 %>,以從各種類型的web域 中檢索java對象、獲取數據。
——(訪問某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)
2.1.1、語法——
"${標識符}"
原理:會調用pageContext.findAttribute方法,用標識符為關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回””空字符串。
2.1.2、實踐——
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="domain.User" %> <%@page import="java.util.*" %> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <title>在此處插入標題</title> </head> <body> <% request.setAttribute("name","張馨藝"); %> <%--${name}等同於pageContext.findAttribute("name") --%> 使用EL表達式獲取數據:${name} <hr> <!-- 在jsp頁面中,使用el表達式可以獲取bean的屬性 --> <% User u = new User(); u.setName("張叉叉"); request.setAttribute("user",u); %> 使用el表達式可以獲取bean的屬性:${user.name} <hr> <!-- 在jsp頁面中,使用el表達式獲取list集合中指定位置的數據 --> <% User p1 = new User(); p1.setName("嘻嘻嘻"); User p2 = new User(); p2.setName("哈哈哈"); List<User> list = new ArrayList<User>(); list.add(p1); list.add(p2); request.setAttribute("list",list); %> <!-- 取list指定位置的數據 --> ${list[1].name} <!-- 迭代List集合 --> <c:forEach var="person" items="${list}"> ${person.name} </c:forEach> <hr> <!-- 在jsp頁面中,使用el表達式獲取map集合的數據 --> <% Map<String,String> map = new LinkedHashMap<String,String>(); map.put("a","aaaaxxx"); map.put("b","bbbb"); map.put("c","cccc"); map.put("1","aaaa1111"); request.setAttribute("map",map); %> <!-- 根據關鍵字取map集合的數據 --> ${map.c} ${map["1"]} <hr> <!-- 迭代Map集合 --> <c:forEach var="me" items="${map}"> ${me.key}=${me.value}<br/> </c:forEach> <hr> </body> </html>
2.2、執行運算
利用EL表達式可以在JSP頁面中執行一些基本的關系運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。
2.2.1、語法——
${運算表達式}
2.2.2、運算符——
關系運算符
邏輯運算符
empty()運算符
${user == null}和 ${user eq null}
${empty(emptyList)}
三元表達式
[]和.號運算
2.2.3、實踐——
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="domain.User" %> <%@page import="java.util.*" %> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>在此處插入標題</title> </head> <body> <h3>el表達式進行四則運算:</h3> 加法運算:${365+24}<br/> 減法運算:${365-24}<br/> 乘法運算:${365*24}<br/> 除法運算:${365/24}<br/> <h3>el表達式進行關系運算:</h3> <%--${user == null}和 ${user eq null}兩種寫法等價--%> ${user == null}<br/> ${user eq null}<br/> <h3>el表達式使用empty運算符檢查對象是否為null(空)</h3> <% List<String> list = new ArrayList<String>(); list.add("ZXY"); list.add("ZCC"); request.setAttribute("list",list); %> <%--使用empty運算符檢查對象是否為null(空) --%> <c:if test="${!empty(list)}"> <c:forEach var="str" items="${list}"> ${str}<br/> </c:forEach> </c:if> <br/> <% List<String> emptyList = null; %> <%--使用empty運算符檢查對象是否為null(空) --%> <c:if test="${empty(emptyList)}"> 對不起,沒有您想看的數據 </c:if> <br/> <h3>EL表達式中使用二元表達式</h3> <% session.setAttribute("user",new User("張馨藝")); %> ${user==null? "對不起,您沒有登陸 " : user.name} <br/> <h3>EL表達式數據回顯</h3> <% User user = new User(); user.setGender("male"); //數據回顯 request.setAttribute("user",user); %> <input type="radio" name="gender" value="male" ${user.gender=='male'?'checked':''}>男 <input type="radio" name="gender" value="female" ${user.gender=='female'?'checked':''}>女 <br/>65 </body> </html>
2.3、獲取web開發常用對象
EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕松獲得對web常用對象的引用,從而獲得這些對象中的數據。
2.3.1、EL表達式中定義的11個隱式對象——
序號 | 隱含對象名稱 | 描 述 |
1 | pageContext | 對應於JSP頁面中的pageContext對象(注意:取的是pageContext對象。) |
2 | pageScope | 代表page域中用於保存屬性的Map對象 |
3 | requestScope | 代表request域中用於保存屬性的Map對象 |
4 | sessionScope | 代表session域中用於保存屬性的Map對象 |
5 | applicationScope | 代表application域中用於保存屬性的Map對象 |
6 | param | 表示一個保存了所有請求參數的Map對象 |
7 | paramValues | 表示一個保存了所有請求參數的Map對象,它對於某個請求參數,返回的是一個string[] |
8 | header | 表示一個保存了所有http請求頭字段的Map對象,注意:如果頭里面有“-” ,例Accept-Encoding,則要header[“Accept-Encoding”] |
9 | headerValues | 表示一個保存了所有http請求頭字段的Map對象,它對於某個請求參數,返回的是一個string[]數組。注意:如果頭里面有“-” ,則使用駝峰命名法 |
10 | cookie | 表示一個保存了所有cookie的Map對象 |
11 | initParam | 表示一個保存了所有web應用初始化參數的map對象 |
2.3.2、實踐——
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>在此處插入標題</title> </head> <body> <br/>---------------1、pageContext對象------------------------<br/> ${pageContext} <br/>---------------2、page域(pageScope)------------------------<br/> <% pageContext.setAttribute("name","張馨藝"); %> ${pageScope.name} <br/>---------------3、request域(requestScope)------------------------<br/> <% request.setAttribute("name","張叉叉"); %> ${requestScope.name} <br/>---------------4、session域(sessionScope)------------------------<br/> <% session.setAttribute("user","zxy"); %> ${sessionScope.user} <br/>---------------5、application域(applicationScope)------------------------<br/> <% application.setAttribute("user","zcc"); %> ${applicationScope.user} </body> </html>
2.4、調用Java方法
EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@page import="java.util.Arrays"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@page import="domain.User" %> <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> <html> <head> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>在此處插入標題</title> </head> <body> fn:toLowerCase("Www.CNBLIGS.COM")的結果:${fn:toLowerCase("Www.CNBLIGS.COM") } <hr/> fn:toUpperCase("Www.cnblogs.com")的結果:${fn:toUpperCase("Www.cnblogs.com") } <hr/> fn:trim(" cnblogs.com ")的結果是:${fn:trim(" cnblogs.com ") } <hr/> <% List<String> list = Arrays.asList("1","2","3","4"); request.setAttribute("list", list); %> fn:length(list)計算集合list的size的值是:${fn:length(list) } <hr/> fn:length("cnblogs.com")計算字符串的長度是:${fn:length("cnblogs.com") } <hr/> fn:split("www.baidu.com",".")[0]的結果是:${fn:split("www.baidu.com", ".")[0] } <hr/> <% String[] StringArray= {"www","baidu","com"}; pageContext.setAttribute("StringArray", StringArray); %> fn:join(StringArray,".")的結果是:${fn:join(StringArray, ".") } <hr/> fn:join(fn:split("www,iteye,com",","),".")的字符串: ${fn:join(fn:split("www,baidu,com", ","),".") } <hr/> fn:indexOf("www.iteye.com","eye")的返回值為:${fn:indexOf("www.iteye.com","eye") } <hr/> <% User user = new User(); String likes[] = {"sing", "dance"}; user.setLikes(likes); request.setAttribute("user", user); %> <%--使用el函數回顯數據 --%> <input type="checkbox" name="like" value="sing" ${fn:contains(fn:join(user.getLikes(),","),"sing")?'checked':''}/>唱歌 <input type="checkbox" name="like" value="dance" ${fn:contains(fn:join(user.getLikes(),","),"dance")?'checked':''}/>跳舞 <input type="checkbox" name="like" value="basketball" ${fn:contains(fn:join(user.getLikes(),","),"basketball")?'checked':''}/>藍球 <input type="checkbox" name="like" value="football" ${fn:contains(fn:join(user.getLikes(),","),"football")?'checked':''}/>足球 <hr/> fn:replace("www baidu com ", " ", ".")的返回值為字符串: ${fn:replace("www baidu com", " ", ".") } <hr/> fn:startsWith("www.baidu.com","www")的返回值為:${fn:startsWith("www.baidu.com", "www") } <hr/> fn:substring("www.baidu.com", 3, 9) 的返回值為字符串:${fn:substring("www.baidu.com", 3, 9) } <hr/> fn:substringAfter("www.baidu.com","bai")的返回值為字符串:${fn:substringAfter("www.baidu.com","bai") } <hr/> fn:substringBefore("www.baidu.com","bai")的返回值為字符串:${fn:substringBefore("www.baidu.com", "bai") } </body> </html>