jstl標(biāo)簽庫

一稠鼻、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)目窿克。
<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ǔ)足拇泣。大于兩位噪叙,只保留兩位,并四舍五入霉翔! -->
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睁蕾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子债朵,更是在濱河造成了極大的恐慌子眶,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件序芦,死亡現(xiàn)場(chǎng)離奇詭異臭杰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谚中,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門渴杆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寥枝,“玉大人,你說我怎么就攤上這事磁奖∧野荩” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵比搭,是天一觀的道長(zhǎng)冠跷。 經(jīng)常有香客問我,道長(zhǎng)身诺,這世上最難降的妖魔是什么蜜托? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮戚长,結(jié)果婚禮上盗冷,老公的妹妹穿的比我還像新娘。我一直安慰自己同廉,他們只是感情好仪糖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迫肖,像睡著了一般锅劝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蟆湖,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天故爵,我揣著相機(jī)與錄音,去河邊找鬼隅津。 笑死诬垂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伦仍。 我是一名探鬼主播结窘,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼充蓝!你這毒婦竟也來了隧枫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤谓苟,失蹤者是張志新(化名)和其女友劉穎官脓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涝焙,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卑笨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仑撞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湾趾。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芭商,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搀缠,到底是詐尸還是另有隱情,我是刑警寧澤近迁,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布艺普,位于F島的核電站,受9級(jí)特大地震影響鉴竭,放射性物質(zhì)發(fā)生泄漏歧譬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一搏存、第九天 我趴在偏房一處隱蔽的房頂上張望瑰步。 院中可真熱鬧,春花似錦璧眠、人聲如沸缩焦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁滥。三九已至,卻和暖如春灾螃,著一層夾襖步出監(jiān)牢的瞬間题翻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工腰鬼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嵌赠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓熄赡,卻偏偏與公主長(zhǎng)得像姜挺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子本谜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • title: JavaWeb之JSTL標(biāo)簽庫tags: JavaWeb JSTLcategories: JavaW...
    codingXiaxw閱讀 689評(píng)論 0 3
  • jsp頁面是為了顯示數(shù)據(jù)初家,如果嵌入java代碼,就會(huì)使得可讀性差乌助,java代碼也難以重用和維護(hù)溜在。為了不在jsp頁面...
    n油炸小朋友閱讀 278評(píng)論 0 0
  • JSTL標(biāo)簽庫的使用是為彌補(bǔ)html標(biāo)簽的不足,規(guī)范自定義標(biāo)簽的使用而誕生的他托。使用JSLT標(biāo)簽的目的就是不希望在j...
    重山楊閱讀 641評(píng)論 0 3
  • 溫馨提示:本文閱讀需要8分鐘掖肋,建議收藏后閱讀! EL表達(dá)式很厲害對(duì)不對(duì) 今天我們來一個(gè)更厲害的JSTL “為什么說...
    Java聯(lián)盟閱讀 1,255評(píng)論 0 1
  • JSTL apache對(duì)EL表達(dá)式的擴(kuò)展 jstl.jar包c(diǎn)ore 核心庫fmt 格式化標(biāo)簽庫 Core (c標(biāo)...
    大批閱讀 224評(píng)論 0 0