JSTL核心標籤庫
阿新 • • 發佈:2021-01-09
技術標籤:Java Web
目錄
一、JSTL簡介
JSTL 標籤庫 全稱是指 JSP Standard Tag Library JSP 標準標籤庫。是一個不斷完善的開放原始碼的 JSP 標籤庫。EL 表示式主要是為了替換 jsp 中的表示式指令碼,而標籤庫則是為了替換程式碼指令碼。這樣使得整個 jsp 頁面變得更佳簡潔。JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。
JSTL 由五個不同功能的標籤庫組成。如下:
二、JSTL核心標籤庫使用準備
1.在/WEB-INF/lib中新增以下jar包:taglibs-standard-impl-1.2.1.jar 和 taglibs-standard-spec-1.2.1.jar。
也可以訪問連線下載http://tomcat.apache.org/taglibs/standard/
2.在需要使用核心標籤庫的JSP頁面中新增如下taglib指令:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
三、核心標籤庫
<c:out> | 用於在JSP中顯示資料,就像<%= ...%> |
<c:set> | 用於儲存資料 |
<c:remove> | 用於刪除資料 |
<c:catch> | 用來處理產生錯誤的異常狀況,並且將錯誤資訊儲存起來 |
<c:if> | 與我們在一般程式中用的if一樣 |
<c:choose> | 本身只當做<c:when>和<c:otherwise>的父標籤 |
<c:when> | <c:choose>的子標籤,用來判斷條件是否成立 |
<c:otherwise> | <c:choose>的子標籤,接在<c:when>標籤後,當<c:when>標籤判斷為false時被執行 |
<c:import> | 檢索一個絕對或相對 URL,然後將其內容暴露給頁面 |
<c:forEach> | 基礎迭代標籤,接受多種集合型別 |
<c:forTokens> | 根據指定的分隔符來分隔內容並迭代輸出 |
<c:param> | 用來給包含或重定向的頁面傳遞引數 |
<c:redirect> | 重定向至一個新的URL |
<c:url> | 使用可選的查詢引數來創造一個URL |
<c:set>、<c:remove>、<c:if>、(<c:choose><c:when><c:otherwise>)使用示例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL示例</title>
</head>
<body>
<%-- 三個屬性:
scope:儲存到那個域。
1.page表示pageContext域
2.request表示request域
3.session表示session域
4.application表示ServletContext域
var:用於設定key值
value:用於設定value值
--%>
設定之前: ${pageScope.number }<br />
<c:set scope="page" var="number" value="80"></c:set>
<%--test屬性表示判斷的條件(使用 EL表示式輸出) --%>
<c:if test="${!empty pageScope.number }">
<p>設定成功: ${pageScope.number }</p>
<%--
多路判斷<c:choose> <c:when> <c:otherwise> 標籤跟 switch ... case .... default 非常接近
使用注意點:
1 、標籤裡不能使用 html註釋,要使用 jsp註釋
2 、 when標籤的父標籤一定要是 choose標籤
下面EL表示式中會先將number轉換為數值型別再比較
--%>
<c:choose>
<c:when test="${pageScope.number > 18}">
<p>這是一個大於18的數</p>
</c:when>
<c:when test="${pageScope.number == 18}">
<p>這個數字為18</p>
</c:when>
<c:otherwise>
<%--注意這裡when標籤的父標籤一定要是 choose標籤 --%>
<c:choose>
<c:when test="${pageScope.number > 0}">
<p>該數大於0小於18</p>
</c:when>
<c:when test="${pageScope.number == 0}">
<p>這個數字為0</p>
</c:when>
<c:otherwise>
<p>這是一個負數</p>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
</c:if>
<c:remove scope="page" var="number" />
移除之後:${pageScope.number }<br />
</body>
</html>
<c:forEach>使用示例
屬性 | 描述 | 是否必要 | 預設值 |
items | 被遍歷的資料來源 | 否 | 無 |
begin | 開始的元素(0=第一個元素,1=第二個元素) | 否 | 0 |
end | 最後一個元素(0=第一個元素,1=第二個元素) | 否 | Lastelement |
step | 每一次迭代的步長 | 否 | 1 |
var | 代表當前條目的變數名稱 | 否 | 無 |
varStatus | 代表迴圈狀態的變數名稱 | 否 | 無 |
基本迴圈
<body>
<%--
如下類似於for (int index = 1; index < 10; index++),step預設為1,如果指定2,即為index+=2
--%>
<table border="1">
<c:forEach begin="1" end="5" var="index">
<tr>
<td>第${index}行 </td>
</tr>
</c:forEach>
</table>
</body>
遍歷陣列或集合
<body>
<%
int[] arr = {1,2,3,4,5,6,7};
request.setAttribute("arr", arr);
%>
<%--
類似於for(int item : arr)
--%>
<c:forEach items="${requestScope.arr}" var="item">
${item}
</c:forEach>
</body>
遍歷map
<body>
<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
request.setAttribute("map", map);
%>
<%-- 類似於for ( Map.Entry<String,Object> entry : map.entrySet()) --%>
<c:forEach items="${requestScope.map }" var="entry">
<h1>鍵: ${entry.key}, 值: ${entry.value}</h1>
</c:forEach>
</body>