一稠鼻、jstl標(biāo)簽庫
jstl是apache對(duì)EL表達(dá)式的擴(kuò)展(也就是說JSTL依賴EL)捺信,JSTL是標(biāo)簽語言刃滓。
jstl不是JSP內(nèi)置的標(biāo)簽仁烹,需要導(dǎo)包。
1.jstl四大標(biāo)簽庫
- core
核心標(biāo)簽庫咧虎,重點(diǎn) - fmt
格式化標(biāo)簽庫卓缰,只需要學(xué)習(xí)兩個(gè)標(biāo)簽即可; - sql
數(shù)據(jù)庫標(biāo)簽庫老客,不需要學(xué)習(xí)了僚饭,它過時(shí)了; - xml
xml標(biāo)簽庫胧砰,不需要學(xué)習(xí)了鳍鸵,它過時(shí)了。
2.導(dǎo)入標(biāo)簽庫
除了JSP動(dòng)作標(biāo)簽外尉间,使用其他第三方的標(biāo)簽庫都需要
a.導(dǎo)包
b.在使用標(biāo)簽的JSP頁面中使用taglib指令導(dǎo)入標(biāo)簽庫
導(dǎo)入JSTL的core標(biāo)簽庫
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-
prefix="c"
指定標(biāo)簽庫的前綴偿乖,這個(gè)前綴可以隨便給值,但大家都會(huì)在使用core標(biāo)簽庫時(shí)指定前綴為c -
uri="http://java.sun.com/jstl/core"
指定標(biāo)簽庫的uri哲嘲,它不一定是真實(shí)存在的網(wǎng)址贪薪,但它可以讓JSP找到標(biāo)簽庫的描述文件
二、core標(biāo)簽庫常用標(biāo)簽
1.out和set
-
<c:out>
輸出- alue:可以是字符串常量眠副,也可以是EL表達(dá)式
- default:當(dāng)要輸出的內(nèi)容為null時(shí)画切,會(huì)輸出default指定的值
- escapeXml:默認(rèn)值為true,表示轉(zhuǎn)義囱怕!
-
<c:set>
設(shè)置(創(chuàng)建域的屬性)- var:變量名
- value:變量值霍弹,可以是EL表達(dá)式
- scope:域,默認(rèn)為page娃弓,可選值:page典格、request、session台丛、application
2.remove
刪除域變量
- var:變量名
- scope:如果不給出scope耍缴,表示刪除所有域中的該名稱的變量;如果指定了域,那么只刪除該域的變量防嗡。
3.url
路徑
- value:指定一個(gè)路徑变汪!它會(huì)在路徑前面自動(dòng)添加項(xiàng)目名。
- <c:param>: 子標(biāo)簽本鸣,用來給url后面添加參數(shù)
- var:指定變量名疫衩,一旦添加了這個(gè)屬性,那么url標(biāo)簽就不會(huì)再輸出到頁面荣德,而是把生成url保存到域中闷煤。
- scope:它與var一起使用,用來保存url涮瞻。
4.if
if標(biāo)簽的test屬性必須是一個(gè)boolean類型的值鲤拿,如果test的值為true,那么執(zhí)行if標(biāo)簽的內(nèi)容署咽,否則不執(zhí)行
<c:set var="a" value="hello"/><!-- 在page域中創(chuàng)建名為a的變量 -->
<c:if test="${not empty a}"><!--判斷a變量不為null近顷,沒有指定域,表示全域 -->
<c:out value="${a }"/>
</c:if>
5.choose
choose標(biāo)簽對(duì)應(yīng)Java中的if/else if/else結(jié)構(gòu)宁否。when標(biāo)簽的test為true時(shí)窒升,會(huì)執(zhí)行這個(gè)when的內(nèi)容。當(dāng)所有when標(biāo)簽的test都為false時(shí)慕匠,才會(huì)執(zhí)行otherwise標(biāo)簽的內(nèi)容饱须。
<c:set var="score" value="${param.score }"/>
<c:choose>
<c:when test="${score > 100 || score < 0}">錯(cuò)誤的分?jǐn)?shù):${score }</c:when>
<!-- if -->
<c:when test="${score >= 90 }">A級(jí)</c:when><!-- else if -->
<c:when test="${score >= 80 }">B級(jí)</c:when>
<c:when test="${score >= 70 }">C級(jí)</c:when>
<c:when test="${score >= 60 }">D級(jí)</c:when>
<c:otherwise>E級(jí)</c:otherwise><!-- else -->
</c:choose>
6.forEach
forEach循環(huán)標(biāo)簽
-
使用循環(huán)變量,指定開始和結(jié)束值
類似for(int i = 1; i <= 10; i++) {}台谊;- var:循環(huán)變量
- begin:設(shè)置循環(huán)變量從幾開始蓉媳。
- end:設(shè)置循環(huán)變量到幾結(jié)束。
- step:設(shè)置步長(zhǎng)锅铅!等同與java中的i++酪呻,或i+=2。step默認(rèn)為1
例如:
例1:
<c:set var="sum" value="0" /> <!-- 創(chuàng)建page域?qū)傩詓um為0 -->
<c:forEach var="i" begin="1" end="10"> <!-- 設(shè)置循環(huán)變量i盐须,初始值為1玩荠,遍歷到10 -->
<c:set var=*"sum" value="${sum + i}" /> <!-- 設(shè)置sum的值為sum + i -->
</c:forEach>
<c:out value="sum = ${sum }/>
例2:
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10" step ="2"> <!-- 步長(zhǎng)為2,默認(rèn)步長(zhǎng)為1贼邓。相當(dāng)于i+=2的意思姨蟋!而默認(rèn)為i++ -->
<c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum }"/>
-
循環(huán)遍歷集合
類似for(Object o : 集合);- items:指定要循環(huán)誰立帖,它可以是一個(gè)數(shù)組或一個(gè)集合
- var:把數(shù)組或集合中的每個(gè)元素賦值給var指定的變量。
<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }"><!-- 把ns是中每一項(xiàng)賦給item. ns是被遍歷的數(shù)組 -->
<c:out value="name: ${item }"/><br/><!-- 打印每一項(xiàng) -->
</c:forEach>
遍歷List
<%
List<String> names = new ArrayList<String>();
names.add("zhangSan");
names.add("liSi");
names.add("wangWu");
names.add("zhaoLiu");
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }"> <!-- 遍歷 -->
<c:out value="name: ${item }"/><br/>
</c:forEach>
遍歷Map
<%
Map<String,String> stu = new LinkedHashMap<String,String>();
stu.put("number", "N_1001");
stu.put("name", "zhangSan");
stu.put("age", "23");
stu.put("sex", "male");
pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }"> <!-- 因?yàn)楸闅v的是Map悠砚,所以每一項(xiàng)是Entry類型 -->
<c:out value="${item.key } : ${item.value }"/><br/> <!-- 獲取Entry的key和value
-->
</c:forEach>
- varStatus(循環(huán)狀態(tài))
這個(gè)屬性用來指定接收“循環(huán)狀態(tài)”的變量名- count
int類型晓勇,當(dāng)前以遍歷元素的個(gè)數(shù); - index
int類型,當(dāng)前元素的下標(biāo)绑咱; - first
boolean類型绰筛,是否為第一個(gè)元素; - last
boolean類型描融,是否為最后一個(gè)元素铝噩; - current
Object類型,表示當(dāng)前項(xiàng)目窿克。
- count
<c:forEach var="item" items="${ns }" varStatus="vs"> <!-- 把循環(huán)狀態(tài)賦給vs -->
<c:if test="${vs.first }">第一行:</c:if><!-- 如果是第一行骏庸,那么${vs.first}為true -->
<c:if test="${vs.last }">最后一行:</c:if><!-- 如果是最后一行,那么${vs.last}為true
-->
<c:out value="第${vs.count }行: "/><!-- 返回行數(shù)年叮,從1開始 -->
<c:out value="[${vs.index }]: "/><!-- 返回行數(shù)具被,從0開始 -->
<c:out value="name: ${vs.current }"/><br/><!-- 當(dāng)前項(xiàng),與${item}相同 -->
</c:forEach>
三只损、fmt標(biāo)簽庫常用標(biāo)簽
fmt標(biāo)簽庫是用來格式化輸出的一姿,通常需要格式化的有時(shí)間和數(shù)字
- 格式化時(shí)間
- value:指定一個(gè)Date類型的變量
- pattern:用來指定輸出的模板!例如:yyyy-MM-dd HH:mm:ss
<%@ taglib prefix=*"fmt"* uri=*"http://java.sun.com/jsp/jstl/fmt"* %>
......
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
<!-- 按指定格式輸出日期和時(shí)間 -->
- 格式化數(shù)字
<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<!-- 必須且僅能保留兩位小數(shù)跃惫,如果大于兩位叮叹,那么只保留兩位,并四舍五入爆存,如果小于兩位蛉顽,那么使用0補(bǔ)足兩位。-->
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
<!-- 最多顯示兩位终蒂,如果小于兩位蜂林,那么有幾位保留幾位,不會(huì)用0補(bǔ)足拇泣。大于兩位噪叙,只保留兩位,并四舍五入霉翔! -->