***
[jstl下載](https://pan.baidu.com/s/1ka9vyxk_o0NVpYUMrBwkmA)
***
JavaServer Pages Standard Tag Library (1.1 ) ,它的中文名稱為 JSP 標準標簽函數庫。JSTL 是一個標準的已制定好的標簽庫,可以應用于各種領域,如:基本輸入輸出、流程控制、循環、XML 文件剖析、數據庫查詢及國際化和文字格式標準化的應用等。從表 7-1 可以知道,JSTL 所提供的標 簽函數庫主要分為五大類:
(1)核心標簽庫 (Core tag library)
(2)I18N 格式標簽庫 (I18N-capable formatting tag library)
(3)SQL 標簽庫 (SQL tag library)
(4)XML 標簽庫 (XML tag library)
(5)函數標簽庫 (Functions tag library) 表 。

## 安裝
直接把JSTL有關的兩個jar包,拷貝進lib目錄下
然后在jsp頁面上添加指令,就可以使用了
~~~
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
~~~
## 功能

#### 表達式操作
<c:out>

value屬性相對重要,其他兩個作為了解
~~~
<h4>c:out</h4>
<%
request.setAttribute("book", "<<Java>>");
%>
// 把<>當成; 標簽,無法正常進行解析
book:${ requestScope.book }
<br>
book:<c:out value="${ requestScope.book }" default="NoBook"></c:out>
~~~
<c:set>
<c:set>主要用來將變量儲存至 JSP 范圍中或是 JavaBean 的屬性中。

~~~
<c:set var="name" value="neusoft" scope="page"></c:set>
// 兩者等效
<%
pageContext.setAttribute("name", "neusoft");
%>
name:${ pageScope.name }
~~~
~~~
<%
Customer customer = new Customer();
customer.setId(1001);
request.setAttribute("cus", customer);
%>
ID:${ requestScope.cus.id }
<c:set target="${ requestScope.cus }" property="id" value="1002"></c:set>
ID:${ requestScope.cus.id }
~~~
<c:remove>
<c:remove>主要用來移除變量。
~~~
<c:set value="1999-09-09" var="date" scope="session"></c:set>
date: ${ sessionScope.date }
<c:remove var="date" scope="session"/>
date: ${ sessionScope.date }
~~~
***
#### 流程控制
<c:if>
<c:if>的用途就和我們一般在程序中用的 if 一樣

~~~
<c:set value="33" var="age" scope="session"></c:set>
<!-- 沒有else,但能儲存結果 -->
<c:if test="${ sessionScope.age > 18 }">成年人</c:if>
<c:if test="${ sessionScope.age > 18 }" var="isAdult" scope="session"></c:if>
isAdult:<c:out value="${ sessionScope.isAdult }"></c:out>
~~~
<c:choose>
<c:choose>本身只當做 <c:when> 和 <c:otherwise> 的父標簽。
<c:when> 和 <c:otherwise>也不能脫離<c:choose>。
<c:otherwise>必須在<c:when>之后使用。
~~~
<c:choose>
<c:when test="${param.age > 60 }">
老年
</c:when>
<c:when test="${param.age > 40 }">
中年
</c:when>
<c:when test="${param.age > 18 }">
青年
</c:when>
<c:otherwise>
未成年
</c:otherwise>
</c:choose>
~~~
***
#### 迭代操作
**<c:forEach>**
<c:forEach> 為循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運作方式為當條件符合時,就會持續重復執行<c:forEach>的本體內容。

~~~
<c:forEach begin="1" end="10" step="3" var="i">
${ i } --
</c:forEach>
~~~
遍歷Collection(數組也一樣)
~~~
<%
List<Customer> list = new ArrayList<Customer>();
list.add(new Customer(1001,"leo1","sheyang1","19012345678"));
list.add(new Customer(1002,"leo2","sheyang2","19012345678"));
list.add(new Customer(1003,"leo3","sheyang3","19012345678"));
list.add(new Customer(1004,"leo4","sheyang4","19012345678"));
list.add(new Customer(1005,"leo5","sheyang5","19012345678"));
request.setAttribute("list", list);
%>
<c:forEach items="${ requestScope.list }" var="customer">
${ customer.id } --${ customer.name } --${ customer.address } --${ customer.phone }<br><br>
</c:forEach>
~~~
~~~
// begin從0開始,step為步長,end為到哪結束,這樣只能遍歷出3條記錄
<c:forEach items="${ requestScope.list }" var="customer" begin="0" step="2" end="4">
${ customer.id } --${ customer.name } --${ customer.address } --${ customer.phone }<br><br>
</c:forEach>
~~~
遍歷Map集合
~~~
<%
Map<String,Customer> map = new HashMap<String,Customer>();
map.put("A",new Customer(1001,"leo1","sheyang1","19012345678"));
map.put("B",new Customer(1002,"leo2","sheyang2","19012345678"));
map.put("C",new Customer(1003,"leo3","sheyang3","19012345678"));
map.put("D",new Customer(1004,"leo4","sheyang4","19012345678"));
map.put("E",new Customer(1005,"leo5","sheyang5","19012345678"));
request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="customer">
${ customer.key } --- ${ customer.value.id },${ customer.value.name },${ customer.value.address },${ customer.value.phone }<br><br>
</c:forEach>
~~~
遍歷數組
~~~
<%
String str[] = {"aaa","bbb","ccc"};
// 一定要在某一個域對象當中,否則拿不到
request.setAttribute("names", str);
%>
<c:forEach items="${ requestScope.names }" var="name">${ name }--</c:forEach>
~~~
<c:forTokens>
類似于String類的split方法
~~~
<%
String str = "a,b,c,d,e";
request.setAttribute("str", str);
%>
<c:forTokens items="${ str }" delims="," var="str">${ str }<br></c:forTokens>
~~~
***
#### URL操作
<c:import>
<c:import> 可以把其他靜態或動態文件包含至本身 JSP 網頁。
~~~
<c:import url="http://www.baidu.com"></c:import>
~~~
<c:redirect>
<c:redirect>使當前JSP頁面重定向到指定的頁面(因為是交于服務器解析,所以這里的/代表的是WEB應用根目錄)
~~~
<c:redirect url="/link.jsp"></c:redirect>
~~~
<c:url>
<c:url>可以產生一個url地址,可以根據Cookie是否可用,智能進行URL重寫,對Get請求參數進行編碼
~~~
<h1>JSTL Page</h1>
<c:url value="/link.jsp" var="testurl" scope="page">
<c:param name="name" value="東軟睿道"></c:param>
</c:url>
url:${ testurl }
~~~
- 第一章 配置和安裝Tomcat
- 第二章 Servlet(一)
- 第三章 Servlet(二)
- 練習 一 . Servlet配置級獲取初始化參數
- 第四章 JSP(一)
- 第五章 JSP(二)
- 第六章 MVC設計模式
- 第七章 Cookie
- 第八章 Session
- 練習 二 . 簡易版購物車
- 第九章 EL表達式
- 第十章 JSTL
- 第十一章 過濾器
- 第十二章 監聽器
- 第十三章 文件的上傳與下載
- 復習總結
- 如何手動啟動Tomcat
- 如何修改Tomcat端口號
- 如何在web.xml中配置Servlet
- Servlet生命周期
- load-on-startup參數
- Servlet映射路徑
- POST和GET的區別
- JSP中9個隱式對象及功能
- 請求轉發及請求重定向的區別
- JSP指令有哪些
- 簡述對MVC設計模式的理解
- 簡述Cookie機制
- 簡述Session機制
- HttpSession的生命周期
- Cookie和Session有什么區別
- 簡述創建過濾器步驟
- 過濾器經典案例--統一編碼字符集
- getParameter與getAttribute的區別
- JSP頁面中可以包含哪些元素
- web應用中,是如何跟蹤用戶的
- InteliJ創建web項目