JSTL(JSP Standard Tag Library),JSP標準標簽庫,可以嵌入在jsp頁面中使用標簽的形式完成業(yè)務邏輯等功能。jstl出現(xiàn)的目的同el一樣也是要代替jsp頁面中的腳本代碼。
JSTL標準標簽庫有5個子庫,但隨著發(fā)展,目前常使用的是它的核心庫。
標簽庫 | 標簽庫的URI | 前綴 |
---|---|---|
Core | http://java.sun.com/jsp/jstl/core | c |
I18N | http://java.sun.com/jsp/jstl/fmt | fmt |
SQL | http://java.sun.com/jsp/jstl/sql | sql |
XML | http://java.sun.com/jsp/jstl/xml | x |
Functions | http://java.sun.com/jsp/jstl/functions | fn |
JSTL下載:
從Apache的網(wǎng)站下載JSTL的JAR包。進入 “http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”網(wǎng)址下載 JSTL的安裝包。jakarta-taglibs-standard-1.1.2.zip,然后將下載好的JSTL安裝包 進行解壓,此時,在lib目錄下可以看到兩個JAR文件,分別為jstl.jar和standard.jar。其中,jstl.jar文件包含JSTL規(guī)范中定義的接口和相關類,standard.jar文件包含用于 實現(xiàn)JSTL的.class文件以及JSTL中5個標簽庫描述符文件(TLD)
JSTL導入:
將兩個jar包導入我們工程的lib中,使用jsp的taglib指令導入核心標簽庫。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
標簽 | 描述 |
---|---|
<c:out> | 用于在JSP中顯示數(shù)據(jù),就像<%= … > |
<c:set> | 用戶保存數(shù)據(jù) |
<c:remove> | 用于刪除數(shù)據(jù) |
<c:catch> | 用來處理產(chǎn)生錯誤的異常狀況,并且將錯誤信息存儲起來 |
<c:if> | 與我們在一般程序中用的if一樣 |
<c:choose> | 本身只當作<c:when>he <c:otherwise>的父標簽 |
<c:when> | <c:choose>的子標簽,用來判斷條件是否成立 |
<c:otherwise> | <c:choose>的子標簽,接在<c:when>標簽后,當<c:when>標簽判斷為false時被執(zhí)行 |
<c:import> | 檢索一個絕對或相對URL,然后將其內容暴露給頁面 |
<c:forEach> | 基礎迭代標簽,接收多種集合類型 |
<c:forTokens> | 根據(jù)指定的分隔符來分隔內容并迭代輸出 |
<c:param> | 用來給包含或重定向的頁面?zhèn)鬟f參數(shù) |
<c:redirect> | 重定向至一個新的URL |
<c:url> | 使用可選的查詢參數(shù)來創(chuàng)造一個URL |
<c:out value=“數(shù)據(jù)” default=“默認值”></c:out>
數(shù)據(jù)可以為常量值也可以是EL表達式
作用:將數(shù)據(jù)輸出給客戶端。
<% request.setAttribute("str", "字符串"); %> <h3>c:out</h3> <c:out value="哈哈"></c:out><br/> <c:out value="${str }" default="默認值"></c:out>
頁面顯示:
<c:set var=“鍵名” value=“數(shù)據(jù)” scope=“域”></c:set>
作用:存儲數(shù)據(jù)到作用域對象中
var:表示存儲的鍵名
value:表示存儲的數(shù)據(jù)
scope:表示要存儲的作用域對象page、request、session、application
<c:remove var=“鍵名” scope=“域”/>
作用:刪除作用域中的指定鍵的數(shù)據(jù)
var:表示要刪除的鍵的名字
scope:表示要刪除的作用域(可選)
注意:如果不指定作用域的情況使用該標簽刪除數(shù)據(jù),會將四個作用域對象中的符合要求的數(shù)據(jù)全部刪除。
<h3>c:set</h3> <c:set var="hello" value="hello pageContext" scope="page"></c:set> <c:set var="hello" value="hello request" scope="request"></c:set> <c:set var="hello" value="hello session" scope="session"></c:set> <c:set var="hello" value="hello application" scope="application"></c:set> <c:out value="${pageScope.hello}"></c:out> <h3>c:remove</h3> <%-- 刪除page域中的 --%> <c:remove var="hello" scope="page"/><br/> <c:out value="${hello}"></c:out>
頁面顯示:
<c:if test="${表達式}"> 前端代碼 </c:if>
作用:進行邏輯判斷,相當于java代碼的但分支判斷
注意:邏輯判斷標簽需要依賴于EL的邏輯運算,也就是表達式中涉及到數(shù)據(jù)必須從作用域中獲取。
<c:choose> <c:when test="">執(zhí)行內容</c:when> <c:when test="">執(zhí)行內容</c:when> ..... <c:otherwise>執(zhí)行內容</c:otherwise></c:choose>
作用:用來進行多條的邏輯判斷,類似java中的多分支語句
注意:條件成立只會執(zhí)行一次,都不成立則執(zhí)行otherwise
<h3>c:if</h3> <c:set var="a" value="4"></c:set> <c:if test="${a > 3}"> <b>今天天氣真好</b> </c:if> <h3>c:choose</h3> <c:set var="score" value="85"></c:set> <c:choose> <c:when test="${score>=90 }"> <i>獎勵900元</i> </c:when> <c:when test="${score>=80 && score < 90 }"> <i>獎勵800元</i> </c:when> <c:when test="${score>=70 && score < 80 }"> <i>獎勵700元</i> </c:when> <c:otherwise> <i>挨頓毒打</i> </c:otherwise> </c:choose>
頁面顯示:
<c:forEach begin="" end="" step="" varStatus=""> 循環(huán)體</c:forEach>
作用:循環(huán)內容進行處理
使用:begin:聲明循環(huán)開始位置
end:循環(huán)結束位置
step:步長
varStatus:聲明變量記錄每次循環(huán)的數(shù)據(jù)(下標,次數(shù),是否是第一次循環(huán),是否是最后一次循環(huán))
$ {vs.index} – $ {vs.count} – $ {vs.first} – ${vs.last }
注意:數(shù)據(jù)存儲在作用域中,需要使用EL表達式。
items:聲明要遍歷的對象。結合EL表達式獲取對象。
var:聲明變量記錄每次循環(huán)的結果。存儲在作用域中,需要使用EL表達式獲取。
<h3>常量循環(huán)</h3> <c:forEach begin="0" end="4" step="1" varStatus="vs"> ${vs.index}--${vs.count}--${vs.first}--${vs.last }<br/> </c:forEach> <h3>動態(tài)循環(huán)</h3> <% ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); request.setAttribute("list", list); %> <c:forEach items="${list}" var="str"> ${str}<br/> </c:forEach> <h3>遍歷map</h3> <% HashMap<String,String> map = new HashMap<String,String>(); map.put("一","哈哈"); map.put("二", "嘿嘿"); request.setAttribute("map", map); %> <c:forEach items="${map }" var="m"> ${m.key }--${m.value }<br/> </c:forEach> <h3>創(chuàng)建表格</h3> <table border="1px"> <tr> <td>課程名稱</td> <td>教師</td> <td>價格</td> <td>重要性</td> </tr> <c:forEach items="${list }" var="str"> <tr> <td>${str }</td> <td>${str }</td> <td>${str }</td> <td>${str }</td> </tr> </c:forEach> </table>
頁面顯示: