EL(Expression Language)
一、EL操作符
語法:${EL表達式}
- 1
-
“.”操作符
用來訪問對象的某個屬性,如${user.name}。 -
“[ ]”操作符
也可用來訪問對象的某個屬性,如${user[‘name’]}。“[ ]”操作符其他功能:
(1)當屬性名中包含特殊字符如“.”或“-”等的情況下,就不能使用“.”操作符來訪問,這時只能使用“[ ]”操作符。
(2)根據索引值訪問數組中的元素使用“[ ]”操作符,如${arr[1]}。
(3)使用變量實現動態訪問,如${user[x]},x是一個變量,改變x即可。
1.1、算術操作符
這里只測試了“+”操作符,“-”、“*”、“/”或div、“%”或mod請自行測試。
<!-- “+”操作符 --> ${a1+a2+a3 }<br><!-- 輸出:60 --> ${1+1 }<br><!-- 輸出:2 --> ${'1'+1.1 }<br><!-- 輸出:2.1 --> ${"1"+1 }<br><!-- 輸出:2 --> ${bbbbbsdcksnvjnds+1 }<br><!-- 輸出:1 --> \${"bbbbbsdcksnvjnds"+1 }<!-- 報異常 -->
1.2、關系操作符
1.3、邏輯操作符
1.4、empty操作符
<!-- empty操作符 --> ${empty s }<br><!-- 輸出:true --> ${!empty s }<br><!-- 輸出:false --> ${not empty s }<br><!-- 輸出:false --> ${!not empty s }<br><!-- 輸出:true -->
總結:若變量 s為null,或長度為零的String,或size為零的集合,則
${ empty s }返回的結果為true,
${ not empty s }或${ ! empty s }返回的結果為false。
二、EL內置隱式對象
2.1、EL內置對象之域對象
<% pageContext.setAttribute("a", "1"); request.setAttribute("a", "2"); session.setAttribute("a", "3"); application.setAttribute("a", "4"); %> ${pageScope.a }<!-- 輸出:1 --> ${requestScope.a }<!-- 輸出:2 --> ${sessionScope.a }<!-- 輸出:3 --> ${applicationScope.a }<br><!-- 輸出:4 --> ${a }<!-- 輸出:1 -->
【總結】:${a }底層使用pageContext.findAttribute(“a”),依次從page、request、session、application的域范圍中尋找”a”屬性,如果都沒有則返回null 。
2.2、EL內置對象之param、paramValues(請求參數對象)
<!-- 這里使用get的提交方式測試,直接在URL中拼接參數。 (請求路徑:http://localhost:8080/web上下文路徑/index.jsp?name=zhang&hobby=籃球&hobby=足球) --> ${param.name }<br><!-- 輸出:zhang --> ${param.hobby }<br><!-- 輸出:籃球 --> ${paramValues.name }<br><!-- 輸出:[Ljava.lang.String;@7c244cff --> ${paramValues.name[0] }<br><!-- 輸出:zhang --> ${paramValues.hobby }<br><!-- 輸出:[Ljava.lang.String;@5ae7ad90 --> ${paramValues.hobby[1] }<br><!-- 輸出:足球 -->
【總結】:
${param.xxx } 相當於reuqest.getParameter(“xxx”);
${paramValues.xxx } 相當於reuqest.getParameterValues(“xxx”);
如果是數組可以使用下標。
2.3、EL內置對象之header、headerValues(請求頭對象)
${header.accept }<br> <!-- 輸出:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, image/apng,*/*;q=0.8 --> \${header.accept-Encoding }<br> <!-- 輸出:\${header.accept-Encoding },需要注意(輸出中不會輸出"\",因為我不這樣寫,會直接報 異常),"-"被解析成減號,導致拋出異常,在語句最前面寫上"\",轉義$符號,就可以將語句原樣輸出 --> ${header['accept-Encoding'] }<br><!-- 輸出:gzip, deflate, br --> ${headerValues['accept-Encoding'] }<br><!-- 輸出:[Ljava.lang.String;@2f08b521 --> ${headerValues['accept-Encoding'][0] }<br><!-- 輸出:gzip, deflate, br -->
2.4、EL內置對象之pageContext對象
${pageContext.request.contextPath }<br><!-- 輸出:/el (這是我的web上下文路徑)-->
【總結】:pageContext對象:封裝了其他8個JSP內置對象,可以任意獲取使用。
2.5、EL內置對象之cookie對象
<!--===================================--> ${cookie } <!-- 輸出:{JSESSIONID=javax.servlet.http.Cookie@5197416d, Webstorm-77d15532=javax.servlet.http.Cookie@3f5b951a, Webstorm-6c1ac651=javax.servlet.http.Cookie@536cda57} -->
2.6、EL內置對象之initParam(全局初始化參數對象)
<!-- 在web.xml中配置 : <context-param> <param-name>Encoding</param-name> <param-value>UTF-8</param-value> </context-param> <context-param> <param-name>pageSize</param-name> <param-value>10</param-value> </context-param> --> ${initParam.Encoding }<br><!-- 輸出:UTF-8 --> ${initParam }<br><!-- 輸出:{pageSize=10, Encoding=UTF-8} -->
三、EL獲取數據實例
3.1、EL獲取域中屬性
<% String str = "hello"; pageContext.setAttribute("str", str); %> ${pageScope.str }<br><!-- 輸出:hello --> ${str }<br><!-- 輸出:hello -->
3.2、EL獲取數組元素
<% String[] s = {"zhang","xiao","hu"}; pageContext.setAttribute("s", s); %> ${pageScope.s }<br><!-- 輸出:[Ljava.lang.String;@1d78464e --> ${pageScope.s[2] }<br><!-- 輸出:hu -->
3.3、EL獲取 List<String>
中的數據
<% List<String> list = new ArrayList<String>(); list.add("zhang"); list.add("xiao"); list.add("hu"); pageContext.setAttribute("list", list); %> ${list }<br><!-- 輸出:[zhang, xiao, hu] --> ${list[1] }<br><!-- 輸出:xiao -->
3.4、EL獲取 Map<String, Integer>
中的數據
<% Map<String, Integer> map = new HashMap<String, Integer>(); map.put("zhang",1); map.put("xiao",2); map.put("hu",3); pageContext.setAttribute("map", map); %> ${map }<br><!-- 輸出:{xiao=2, zhang=1, hu=3} --> ${map.zhang }<br><!-- 輸出:1 -->
3.5、EL獲取 Map<String, JavaBean>
中的數據
<%Map<String, User> umap = new HashMap<String, User>(); umap.put("user1", new User("zhang",18)); umap.put("user2", new User("xiao",36)); pageContext.setAttribute("umap", umap); %> ${umap }<br><!-- 輸出:{user1=User [name=zhang, age=18], user2=User [name=xiao, age=36]} --> ${umap.user2 }<br><!-- 輸出: User [name=xiao, age=36] --> ${umap.user1.age }<br><!-- 輸出:18 --> ${umap['user2'].name }<br><!-- 輸出:xiao 需注意,這種方式要求map的key必須是String類型--> ${umap['user2']['name'] }<br><!-- 輸出:xiao --> ${umap['user2']['age'] }<br><!-- 輸出:36 --> ${umap['user2'][age] }<br><!-- 不會報錯,但什么也獲取不到 -->
轉自:https://blog.csdn.net/hu1010037197/article/details/80214637