1. 程式人生 > 其它 >JavaWeb學習之EL表示式和JSTL標籤庫

JavaWeb學習之EL表示式和JSTL標籤庫

技術標籤:JavaWebjstlEL表示式

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>