JSTL全名爲JavaServer Pages Standard Tag Library 主要提供給JavaWeb開發人員一個標準通用的標籤函數庫.java
Web程序開發人員可以利用JSTL和EL來開發Web程序,取代傳統直接在頁面上嵌入Java程序(Scripting)的作法,以提升程序的可讀性,維護性和方便性.web
須要引入的jar 數據庫
jstl.jar數組
standard.jarsession
標籤函數庫主要分爲5大類:jsp
1.核心標籤庫(Core tag library)函數
2.I18N格式標籤庫(I18N-capable formatting tag library)編碼
3.SQL標籤庫(SQL tag library)url
4.XML標籤庫(XML tag library)spa
5.函數標籤庫(Functions tag library)
最經常使用的是 核心標籤庫
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out>
與el相似,比el更強大,可以對敏感的字符進行轉換
<% request.setAttribute("book", "<<book>>"); %> <br> book:${requestScope.book} <br> <c:out value="${requestScope.book }"></c:out>
book:<>
<<book>>
經過查看源文件,<c:out>會將敏感字符自動轉義
<br> book:<<book>> <br> <<book>> <br><br>
<c:out value="${requestScope.book }" escapeXml="false"></c:out>
設置escapeXml="false" 默認不進行轉義
<c:out value="${requestScope.book }" default="booktitle"></c:out>
當從域中沒找到book時,取默認值
<c:set var="name" value="java" scope="page"></c:set>
<%--
pageContext.setAttribute("name", "java");
--%>
name:${pageScope.name }
使用<c:set>向指定域對象中賦值,相似於setAttribute
value中能夠放EL表達式
<c:set var="subject" value="${param.subject }" scope="session"></c:set>
subject:${sessionScope.subject }
使用<c:set>爲javaBean賦值
<% Customer cust = new Customer(); cust.setId(1001); request.setAttribute("cust", cust); %> ID:${requestScope.cust.id } <br> <c:set target="${requestScope.cust }" property="id" value="${param.id }"></c:set> ID:${requestScope.cust.id }
使用<c:remove>能夠移除指定域對象中的指定屬性
<c:set value="1997-1-1" var="date" scope="session"></c:set>
<c:out value="${sessionScope.date }"></c:out>
<br>
<c:remove var="date" scope="session"/>
date:${sessionScope.date }
<br><br>
JSTL 流程控制
<c:if> 僅有if,沒有else,但能夠把判斷的結果儲存起來,以備以後使用
<c:set value="20" var="age" scope="request"></c:set> <c:if test="${requestScope.age>18 }">成年了</c:if> <br> <c:if test="${param.age>18 }" var="isAdult" scope="request"></c:if> isAdult:<c:out value="${requestScope.isAdult }"></c:out> <br><br>
<c:choose>只能當作<c:when>,<c:otherwise>的子標籤
在同一個<c:choose>中時,<c:when>必須在<c:otherwise>以前
<c:when>必須有test屬性
在同一個<c:choose>時,<c:otherwise>必須是最後一個標籤
<c:choose> <c:when test="${param.age>60 }">老年</c:when> <c:when test="${param.age>35 }">中年</c:when> <c:when test="${param.age>18 }">青年</c:when> <c:otherwise>未成年</c:otherwise> </c:choose> <br><br>
JSTL迭代操做
<c:forEach>,<c:forTokens>
遍歷一個Collection,遍歷數組同Collection
<% List<Customer> custs = new ArrayList<Customer>(); custs.add(new Customer(1001,"AA","aa@java.com")); //index:0 custs.add(new Customer(1002,"BB","bb@java.com")); custs.add(new Customer(1003,"CC","cc@java.com")); custs.add(new Customer(1004,"DD","dd@java.com")); custs.add(new Customer(1005,"EE","ee@java.com")); custs.add(new Customer(1006,"FF","ff@java.com")); request.setAttribute("customers", custs); %> <c:forEach items="${requestScope.customers }" var="custs" varStatus="status"> ${status.index},${status.count},${status.first},${status.last}:${custs.id }:${custs.name }:${custs.email }<br> </c:forEach> <br><br>
遍歷Map
<% Map<String,Customer> custsMap = new HashMap<String,Customer>(); custsMap.put("a", new Customer(1001,"AA","aa@java.com")); custsMap.put("b", new Customer(1002,"BB","bb@java.com")); custsMap.put("c", new Customer(1003,"CC","cc@java.com")); custsMap.put("d", new Customer(1004,"DD","dd@java.com")); custsMap.put("e", new Customer(1005,"EE","ee@java.com")); custsMap.put("f", new Customer(1006,"FF","ff@java.com")); request.setAttribute("customers", custsMap); %> <c:forEach items="${requestScope.customers }" var="custs"> ${custs.key}-${custs.value.id }-${custs.value.name }-${custs.value.email }<br> </c:forEach> <br><br>
能夠用來獲取屬性名稱
<c:forEach items="${pageContext.session.attributeNames }" var="attrName">
${attrName }
</c:forEach>
<c:forTokens>處理字符串的,相似於String的split
<c:set value="a,b,c.d.e.f;g;h" var="test" scope="request"></c:set>
<c:forTokens items="${requestScope.test }" delims="," var="s">
${s }<br>
</c:forTokens>
a
b
c.d.e.f;g;h
URL操做
包括3個
<c:import>
<c:redirect>
<c:url>
1.<c:import> 能夠包含任何頁面到當前頁面
<c:import url="http://www.baidu.com"></c:import>
2.<c:redirect>使當前jsp頁面重定向到指定的頁面
<c:redirect url="/a.jsp"></c:redirect>
<c:redirect url="http://www.baidu.com"></c:redirect>
/ 表明當前web應用的根目錄,由於是交由servlet容器處理的
使當前JSP轉發的指定頁面能夠使用
<jsp:forward page="/b.jsp"></jsp:forward>
/ 表明的是當前WEB應用的根目錄
response.sendRedirect("/test.jsp"); / 表明的是WEB站點的根目錄
3.<c:url> c:url產生一個url地址.能夠根據Cookie是否可用來智能進行URL重寫,對GET請求參數進行編碼
能夠把產生的URL存儲在域對象的屬性中. 還能夠使用c:param爲URL添加參數.
c:url會對參數進行自動的轉碼
value中的 / 表明當前web應用的根目錄
<c:url value="/a.jsp" var="aUrl"> <c:param name="name" value="數據庫"></c:param> </c:url> aUrl:${aUrl } <br><br>
結果:
aUrl:/testServlet/a.jsp?name=%e6%95%b0%e6%8d%ae%e5%ba%93