JavaWeb學習之EL表示式和JSTL標籤庫
阿新 • • 發佈:2021-01-19
EL表示式和JSTL標籤庫
EL表示式
- EL表示式的作用
EL表示式的全稱是Expression Language,即表示式語言。EL表示式主要代替jsp頁面中的表示式指令碼在jsp頁面中進行資料的輸出。因為EL表示式在輸出資料的時候,要比jsp的表示式指令碼簡潔很多。
EL表示式的格式是:${表示式}
,EL表示式在輸出null值的時候輸出的是空串,jsp表示式指令碼在輸出null值的時候,輸出的是null字串 - EL表示式搜尋域資料的順序
EL表示式主要是在jsp頁面中輸出資料,而主要是輸出域物件中儲存的資料。當四個域中都有相同的key的資料的時候,EL表示式會按照四個域的從小到大的順序去進行搜尋,找到就輸出。
<%
request.setAttribute("key","request");
session.setAttribute("key","session");
pageContext.setAttribute("key","pageContext");
application.setAttribute("key","application");
%>
${key}
- EL表示式輸出Bean的普通屬性、陣列屬性、List屬性和Map屬性
<body>
輸出Bean物件:${物件名}
輸出Bean的普通屬性:${物件名.屬性名}
輸出Bean的陣列屬性:${物件名.陣列名[index]}
輸出Bean的List集合元素值:${物件名.List名}
輸出Bean的Map集合個別元素值:${物件名.Map名.key值}
</body>
需要注意的是,輸出Bean物件中的屬性是通過屬性的get方法查詢的,因此屬性和get方法需要相互對應
- EL表示式——運算
EL表示式支援關係運算,邏輯運算和算數運算,基礎規則和java中的運算類似。語法為${運算表示式}
- 關係運算:
- 邏輯運算
- 算數運算
- empty運算
empty運算可以判斷一個數據是否為空,如果為空則輸出true,否則為false${empty 值}
- 值為null時為空
- 值為空串時為空
- 值為Object型別的陣列長度為0時為空
- 值為list集合或者map集合,元素為0時為空
- “.”點運算和[]中括號運算子
點運算可以用於輸出Bean物件中某個屬性的值;中括號運算可以輸出有序集合中某個元素的值;並且中括號運算還可以輸出map集合中key裡含有特殊字元的key的值
- 關係運算:
//當map中含有以下狀態的值時
Map<String , Object> map = new HashMap<>();
map.put("a.a.a" , 1);
map.put("b+b+b" , 2);
map.put("c-c-c" , 3);
request.satAttribute("map",map);
//因此在使用EL表示式時,不可能使用${requestScope.map.a.a.a}或者${requestScope.map.b+b+b}的形式去獲取資料
${requestScope.map[a.a.a]}
${requestScope.map[b+b+b]}
${requestScope.map[c-c-c]}
- EL表示式的11個隱含物件
EL表示式中隱含有11個內建物件,這是EL表示式中自己定義的,可以直接使用- pageContext:他可以獲取jsp中的九大內建物件
- pageScope:可以獲取pageContext域中的資料
- requestScope:可以獲取request域中的資料(獲取的資料相當於request.getAttribute)
- sessionScope:可以獲取Session域中的資料
- applicationScope:可以獲取application域中的資料
- param:可以獲取請求引數的值(這裡相當於request.getParameter)
- paramValues:可以獲取請求引數的值(多個值時使用)
- header:可以獲取請求頭的資訊
- headerValues:可以獲取請求頭的資訊(多個值時使用)
- cookie:可以獲取當前請求的Cookie資訊
- initParam:可以獲取在web.xml中配置的
<context-param>
上下文引數
EL獲取域中屬性:${域物件名.key值}
,如${requestScope.key1}
pageContext物件的使用- 獲取協議:
${pageContext.request.scheme}
- 獲取伺服器IP:
${pageContext.request.serverName}
- 獲取伺服器埠:
${pageContext.request.serverPort}
- 獲取工程路徑:
${pageContext.request.contextPath}
- 獲取請求方法:
${pageContext.request.method}
- 獲取客戶端ip地址:
${pageContext.request.remoteHost}
- 獲取會話的id編號:
${pageContext.session.id}
- 獲取協議:
JSTL標籤庫
JSTL標籤庫全程是指JSP Standard Tag Library 。是一個不斷完善的開放原始碼的JSP標籤庫。主要是為了替換程式碼指令碼,使得JSP頁面更加簡潔。
JSTL由五個不同功能的標籤庫組成:
其中由於避免在web層與資料庫進行一些互動,sql庫和x庫已經很少推薦使用了,其中核心標籤庫(c庫)是JSTL使用的核心。
在jsp標籤庫中使用taglib指令引入標籤庫:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
core核心庫的使用
<c:set/>
,set標籤用於向域中儲存資料,如<c:set scope="session" var="abc" value="value"/>
<c:if></c:if>
,用於做if判斷,test屬性表示判斷的條件,使用EL表示式輸出,如:<c:if test="${12 == 12}"></c:if>
. <c:choose> <c:when> <c:otherwise>
,用於做多路判斷,和java中的switch-case-default非常接近
<c:choose>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:otherwise test="">
<!-- 當然在這些分支中也可以巢狀多路判斷標籤 -->
<c:choose>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:otherwise test="">
<!-- 當然在這些分支中也可以巢狀多路判斷標籤 -->
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
<c:foreach/>
,用於遍歷輸出使用,可以用於遍歷輸出陣列、List集合、Map集合等,使用Map集合為例說明
<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
request.setAttribute("map" , map);
%>
<c:foreach items="${requestScope.map}" var="item">
map的內容:${item.key} = ${item.value}
</c:foreach>