1. 程式人生 > 其它 >JSTL核心標籤庫

JSTL核心標籤庫

技術標籤:Java Web

目錄

一、JSTL簡介

二、JSTL核心標籤庫使用準備

三、核心標籤庫


一、JSTL簡介

JSTL 標籤庫 全稱是指 JSP Standard Tag Library JSP 標準標籤庫。是一個不斷完善的開放原始碼的 JSP 標籤庫。EL 表示式主要是為了替換 jsp 中的表示式指令碼,而標籤庫則是為了替換程式碼指令碼。這樣使得整個 jsp 頁面變得更佳簡潔。JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。

JSTL 由五個不同功能的標籤庫組成。如下:

功能範圍URI字首
核心標籤庫(重要)http://java.sun.com/jsp/jstl/corec
格式化http://java.sun.com/jsp/jstl/fmtfmt
函式http://java.sun.com/jsp/jstl/functionsfn
資料庫http://java.sun.com/jsp/jstl/sqlsql
XMLhttp://java.sun.com/jsp/jstl/xmlx

二、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>