JSTL標籤庫

一、JSTL簡介

  JSTL的全稱:JSP Standard Tag Libary,JSP的標準標籤庫

  JSTL的作用:

    提供給Java web開發人員一個標準通用的標籤函數庫。

    和EL來取來傳統直接在頁面上嵌入Java程序的做法,以提供程序可讀性、維護性和方便性。

  JSTL的版本:

    JSTTL的主要版本是1.0、1.1和1.2。

    1.0版本EL表達式還沒有納入官方規範。

    1.0和1.2版本EL表達式已經納入官方規範。


二、<c:out>標籤

  輸出常量和域範圍中的變量(value屬性,使用EL表達式)。

  輸出默認值(default屬性)。

  默認HTML標籤不轉義(escapeXML)。

屬性名是否支持EL屬性類型屬性描述
valueObject指定要輸出的內容
escapeXMLBoolean指定是否將>、<等特殊字符進行HTML編碼轉換後再進行輸出,默認值是true。
defaultObject指定如果value屬性的值爲null時所輸出的默認值


示例:輸出常量

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
    <c:out value="Hello"></c:out>
  </body>
</html>


示例:輸出域中的變量

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
    <!-- 輸出域中的變量 -->
    <%
    	request.setAttribute("name", "你好,世界");
     %>
     <c:out value="${name}"></c:out>
  </body>
</html>


示例:輸出默認值

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
    <!-- 輸出默認值 -->
     <c:out value="${haha}" default="你好 Java"></c:out>
  </body>
</html>


示例:輸出HTML標籤

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
   
   	<c:out value="<a href='#'>超鏈接</a>"></c:out>
   
  </body>
</html>

默認情況下,輸出的是字符串,所以要加上escapeXml="false"屬性。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
   
   	<c:out value="<a href='#'>超鏈接</a>" escapeXml="false"></c:out>
   
  </body>
</html>


三、<c:set>標籤

  向4個域中存入值(var value scope屬性)。

  設置web域中java.util.Map類型的屬性對象或Javabean類型的屬性對象的屬性(target prperty value屬性)。

屬性名是否支持EL屬性類型屬性描述
valueObject用於指定屬性值
var×String用於指定要設置的web域屬性的名稱
scope×String用於指定屬性所在的web域
targetObject用於指定要設置屬性的對象,這個對象必須是Javabean對象或java.utl.Map對象
propertyString用於指定當前要爲對象設置的屬性名稱


示例:向4個web域對象存入值

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
   <c:set var="i" value="哈哈" scope="request"></c:set>
   	<c:out value="${i}"></c:out>
   
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
  <!-- 傳統方式 -->
  	<%
  	request.setAttribute("name", "呵呵");
   %>
   <c:out value="${name}"></c:out>
  
  <!-- jstl方式 -->
   <c:set var="i" value="哈哈" scope="request"></c:set>
  	<c:out value="${i}"></c:out>
   
  </body>
</html>


示例:修改Javabean對象存入值

<%@page import="cn.vo.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
 
 <%
 	request.setAttribute("user", new User("你好","世界"));
  %>
 
 <c:set target="${user }" property="username" value="哈哈"></c:set>
 ${user.username }
 
  </body>

</html>


四、<c:remove>標籤

  <c:remove>標籤用於刪除各種web域中的值。

  其語法格式如下:

<c:remove var="varName" [scope={page|request|session|application}]></c:remove>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
  <!-- 刪除屬性之前 -->
	<c:set var="i" value="哈哈" scope="page"></c:set>
	${i}
	<!-- 刪除屬性之後 -->
	<c:remove var="i" scope="page"/>
	${i}
  </body>

</html>


五、<c:catch>標籤

  <c:catch>標籤用於捕獲嵌套在標籤體中的內容拋出的異常,其語法格式如下:

<c:catch [var ='varName']>  </c:catch>

  var屬性用於標識<c:catch>標籤捕獲的異常對象,它將保存在page這個web域中。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<c:catch var="e">
		<%
			int i = 10 / 0;
		 %>
	</c:catch>  
  ${e.message }
  
  </body>

</html>


六、<c:if>標籤

  <c:if test="">標籤可以構造簡單的"if-then"結構的條件表達式。

屬性名是否支持EL 屬性類型屬性描述
testboolean決定是否處理標籤體中的內容的條件表達式
var×String用於指定將test屬性的之後定結果保存到某個web域中的某個屬性的名稱
scope×String指定將test屬性的執行結果保存到那個web域中
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<c:set var="i" value="10" scope="page"></c:set>
  	<c:if test="${i == 10 }">
  		正確
  	</c:if>
  
  </body>

</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<c:set var="i" value="10" scope="page"></c:set>
	<!-- 
		var 表示判斷的結果
	 -->
  	<c:if test="${i == 10 }" var="x" scope="page">
  		正確
  	</c:if>
  	${x }
  
  </body>

</html>


六、<c:choose>標籤

  <c:choose>標籤用於指定多個條件選擇的組合邊界,它必須和<c:when>和<c:otherwise>標籤一起使用。使用<c:choose>標籤、<c:when>和<c:otherwise>這三個標籤,可以構造類似“if-else”的複雜條件判斷結構

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<c:set var="i" value="10" scope="page"></c:set>
	
	<c:choose>
		<c:when test="${i ==10 }">
			i的值是10
		</c:when>
		<c:otherwise>
			i的值不等於10
		</c:otherwise>
	</c:choose>
  
  </body>

</html>

  

七、<c:foreach>標籤

  <c:foreach>標籤用於對一個集合對象中的元素進行循環迭代操作,或者按照指定的次數重複迭代標籤體中的內容。

屬性名是否支持EL屬性類型屬性描述
var×String指定將當前迭代到的元素保存到page這個web域中的屬性名稱
varstatus×String記住用於保存迭代信息的對象
items任何支持的類型將要迭代的集合對象
beginint如果指定items屬性,就從集合中的第begin個元素開始進行迭代,begin的索引值從0開始編碼;如果沒有指定items屬性,就從begin指定的值開始迭代,直到end值結束迭代
endint參看begin屬性的描述
stepint指定迭代的步長


示例:遍歷數組

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<!-- 
		for(String s:str[]){
			
		}
	 -->
	<%
		String[] str = {"哈哈","呵呵"};
		request.setAttribute("str", str);
	 %>
	<c:forEach var="s" items="${str}" >
		${s}
	</c:forEach>
	
		
	  
  </body>

</html>

示例:遍歷List集合

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<!-- 
		for(String s:str[]){
			
		}
	 -->
	<%
		List<String> list = new ArrayList<String>();
		list.add("哈哈");
		list.add("呵呵");
		list.add("嘻嘻");
		request.setAttribute("list",list);
	 %>
	<c:forEach var="i" items="${list}" >
		${i}
	</c:forEach>
	
		
	  
  </body>

</html>


示例:遍歷Map集合

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<!-- 
		for(String s:str[]){
			
		}
	 -->
	<%
		Map<String,String> map = new HashMap<String,String>();
		map.put("a", "aa");
		map.put("b", "bb");
		request.setAttribute("map",map);
	 %>
	<c:forEach var="entry" items="${map}" >
		${entry.key }
		${entry.value}
	</c:forEach>
	
		
	  
  </body>

</html>


示例:從1到10遍歷

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<c:forEach var="i" begin="1" end="10" step="1">
		${i}
	</c:forEach>
		
  </body>

</html>


示例:計算從1加到100的和

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	
	<c:set var="sum" value="0" scope="page"></c:set>
	<c:forEach var="i" begin="1" end="100" step="1">
		<c:set var="sum" value="${sum+i}" scope="page"></c:set>
	</c:forEach>
	${sum }	
  </body>

</html>


varStatus屬性

  記錄迭代相關的信息

屬性類型意義
indexnumber現在指到成員的索引
countnumber總共指到成員的總數
firstboolean現在指到的成員是否爲第一個成員
lastboolean現在指到的成員是否爲最後一個成員

示例:遍歷10到100的偶數,每到第三個數,顯示爲紅色

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<c:forEach var="i" begin="10" end="100" step="2" varStatus="status">
		<c:choose>
			<c:when test="${ status.count %3 ==0 }">
				<font color="red">${i }</font>
			</c:when>
			<c:otherwise>
				${i }
			</c:otherwise>
		</c:choose>
	</c:forEach>
	
  </body>

</html>


八、<c:param>標籤

  在jsp頁面進行URL的相關操作時,經常需要在URL地址後面附加一些參數。<c:param>標籤可以嵌套在<c:import>和<c:url>以及<c:redirect>標籤內,爲這些標籤所使用的URL地址附加參數。

  <c:param>標籤在爲一個URL地址附加參數的時候,會自動對參數值進行URL編碼。

<c:param name="" value=""></c:param>


九、<c:import>標籤

名稱說明EL類型必須默認值
url一文件被包含的地址String 
context虛擬路徑String
var存儲被包含文件的內容(以String類型存入)×String
scopevar變量的jsp範圍×Stringpage
charEncoding被包含文件之內容的編碼格式String
varReader存儲被包含文件的內容(以Reader類型存入)×String

haha.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'haha.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    哈哈
    
    
  </body>
</html>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<!-- 起到包含的效果 -->
	<c:import url="/haha.jsp"></c:import>
  </body>

</html>


將頁面包含在變量之中

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<!-- 起到包含的效果 -->
	<c:import url="/haha.jsp" var="i" scope="page"></c:import>
	<!-- 將頁面保存在變量i之中 -->
	${i }
	
	
  </body>

</html>


傳遞參數

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'haha.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  ${param.haha}
    哈哈
    
    
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<!-- 起到包含的效果 -->
	<c:import url="/haha.jsp" var="i" scope="page">
		<c:param name="haha" value="haha"></c:param>
	</c:import>
	<!-- 將頁面保存在變量i之中 -->
	${i }
	
	
  </body>

</html>


十、<c:url>標籤

  <c:url>標籤用於在jsp頁面中構造一個URL地址,其主要目的在於實現URL重寫。URL重寫就是將會話標識號以參數形式附加到URL地址的後面。


  其實,就是進行session的追蹤。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSTL標籤庫</title>
  </head>
  
  <body>
	<c:url var="i" value="/haha.jsp"></c:url>
	<a href="${i }">haha.jsp</a>
  </body>

</html>


十一、<c:redirect>標籤

  用於實現請求重定向。

屬性名是否支持EL屬性類型屬性描述
urlString指定要轉發或重定向到的目標資源的URL地址
contextString當要使用相對路徑重定向到哦同一個服務器下的其他web應用程序中的資源的時候,context屬性指定其他web應用程序的名稱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章