一、JSTL標(biāo)簽庫(kù)介紹
JSTL標(biāo)簽庫(kù)的使用是為彌補(bǔ)html標(biāo)簽的不足,規(guī)范自定義標(biāo)簽的使用而誕生的。使用JSLT標(biāo)簽的目的就是不希望在jsp頁(yè)面中出現(xiàn)java邏輯代碼
二臀蛛、JSTL標(biāo)簽庫(kù)的分類(lèi)
- 核心標(biāo)簽(用得最多)
- 國(guó)際化標(biāo)簽(I18N格式化標(biāo)簽)
- 數(shù)據(jù)庫(kù)標(biāo)簽(SQL標(biāo)簽,很少使用)
- XML標(biāo)簽(幾乎不用)
- JSTL函數(shù)(EL函數(shù))
三崖蜜、核心標(biāo)簽庫(kù)使用說(shuō)明
JSTL的核心標(biāo)簽庫(kù)標(biāo)簽共13個(gè)浊仆,使用這些標(biāo)簽?zāi)軌蛲瓿蒍SP頁(yè)面的基本功能,減少編碼工作纳猪。
從功能上可以分為4類(lèi):表達(dá)式控制標(biāo)簽氧卧、流程控制標(biāo)簽、循環(huán)標(biāo)簽氏堤、URL操作標(biāo)簽沙绝。
- 1、表達(dá)式控制標(biāo)簽:out標(biāo)簽鼠锈、set標(biāo)簽闪檬、remove標(biāo)簽、catch標(biāo)簽购笆。
- 2粗悯、流程控制標(biāo)簽:if標(biāo)簽、choose標(biāo)簽同欠、when標(biāo)簽样傍、otherwise標(biāo)簽。
- 3铺遂、循環(huán)標(biāo)簽:forEach標(biāo)簽衫哥、forTokens標(biāo)簽。
- 4襟锐、URL操作標(biāo)簽:import標(biāo)簽撤逢、url標(biāo)簽、redirect標(biāo)簽、param標(biāo)簽蚊荣。
在JSP頁(yè)面引入核心標(biāo)簽庫(kù)的代碼為:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
下面介紹用的最多也最核心的流程控制和循環(huán)標(biāo)簽初狰,其余標(biāo)簽用法可以參照:
javaWeb學(xué)習(xí)總結(jié)(9)- JSTL標(biāo)簽庫(kù)之核心標(biāo)簽
3.1、表達(dá)式控制標(biāo)簽——if標(biāo)簽使用總結(jié)
<c:if>標(biāo)簽的功能互例,<c:if>標(biāo)簽和程序中的if語(yǔ)句作用相同奢入,用來(lái)實(shí)現(xiàn)條件控制。
<c:if>標(biāo)簽的語(yǔ)法
【語(yǔ)法1】:沒(méi)有標(biāo)簽體內(nèi)容(body)
<c:if test="testCondition" var="varName" [scope="page|request|session|application}"]/>
【語(yǔ)法2】:有標(biāo)簽體內(nèi)容
<c:if test="testCondition" [var="varName"] [scope="page|request|session|application}"]>
標(biāo)簽體內(nèi)容
</c:if>
參數(shù)說(shuō)明】:
- (1)test屬性用于存放判斷的條件媳叨,一般使用EL表達(dá)式來(lái)編寫(xiě)俊马。
- (2)var屬性用來(lái)存放判斷的結(jié)果,類(lèi)型為true或false肩杈。
- (3)scopes屬性用來(lái)指定var屬性存放的范圍。
<c:if>標(biāo)簽的使用范例
cif.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標(biāo)簽庫(kù) --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<title>JSTL: --流程控制標(biāo)簽 if標(biāo)簽示例</title>
</head>
<body>
<h4>if標(biāo)簽示例</h4>
<hr>
<form action="JSTL_if_tag.jsp" method="post">
<input type="text" name="uname" value="${param.uname}">
<input type="submit" value="登錄">
</form>
<%--使用if標(biāo)簽進(jìn)行判斷并把檢驗(yàn)后的結(jié)果賦給adminchock解寝,存儲(chǔ)在默認(rèn)的page范圍中扩然。 --%>
<c:if test="${param.uname=='admin'}" var="adminchock">
<%--可以把a(bǔ)dminchock的屬性范圍設(shè)置為session,這樣就可以在其他的頁(yè)面中得到adminchock的值聋伦,
使用<c:if text=”${adminchock}”><c:if>判斷夫偶,實(shí)現(xiàn)不同的權(quán)限。 --%>
<c:out value="管理員歡迎您觉增!"/>
</c:if>
<%--使用EL表達(dá)式得到adminchock的值兵拢,如果輸入的用戶(hù)名為admin將顯示true。 --%>
${adminchock}
</body>
</html>
3.2逾礁、流程控制標(biāo)簽——choose標(biāo)簽说铃、when標(biāo)簽、otherwise標(biāo)簽配合使用講解
<c:choose>嘹履、<c:when>和<c:otherwise>標(biāo)簽的功能
<c:choose>腻扇、<c:when> 和<c:otherwise>這3個(gè)標(biāo)簽通常情況下是一起使用的,<c:choose>標(biāo)簽作為<c:when> 和<c:otherwise>標(biāo)簽的父標(biāo)簽來(lái)使用砾嫉。
使用<c:choose>幼苛,<c:when>和<c:otherwise>三個(gè)標(biāo)簽,可以構(gòu)造類(lèi)似 “if-else if-else” 的復(fù)雜條件判斷結(jié)構(gòu)焕刮。
語(yǔ)法
<c:choose>
<c:when test="條件1">
//業(yè)務(wù)邏輯1
<c:when>
<c:when test="條件2">
//業(yè)務(wù)邏輯2
<c:when>
<c:when test="條件n">
//業(yè)務(wù)邏輯n
<c:when>
<c:otherwise>
//業(yè)務(wù)邏輯
</c:otherwise>
</c:choose>
使用范例
cchoose.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標(biāo)簽庫(kù) --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<title>JSTL: -- choose及其嵌套標(biāo)簽標(biāo)簽示例</title>
</head>
<body>
<h4>choose及其嵌套標(biāo)簽示例</h4>
<hr/>
<%--通過(guò)set標(biāo)簽設(shè)定score的值為85 --%>
<c:set var="score" value="85"/>
<c:choose>
<%--使用<c:when>進(jìn)行條件判斷舶沿。
如果大于等于90,輸出“您的成績(jī)?yōu)閮?yōu)秀”配并;
如果大于等于70小于90括荡,輸出“您的成績(jī)?yōu)榱己谩保? 大于等于60小于70,輸出“您的成績(jī)?yōu)榧案瘛保? 其他(otherwise)輸出“對(duì)不起荐绝,您沒(méi)能通過(guò)考試”一汽。
--%>
<c:when test="${score>=90}">
你的成績(jī)?yōu)閮?yōu)秀!
</c:when>
<c:when test="${score>70 && score<90}">
您的成績(jī)?yōu)榱己?
</c:when>
<c:when test="${score>60 && score<70}">
您的成績(jī)?yōu)榧案? </c:when>
<c:otherwise>
對(duì)不起,您沒(méi)有通過(guò)考試召夹!
</c:otherwise>
</c:choose>
</body>
</html>
3.3循環(huán)標(biāo)簽——forEach標(biāo)簽使用總結(jié)
<c:forEach>標(biāo)簽的功能
該標(biāo)簽根據(jù)循環(huán)條件遍歷集合(Collection)中的元素岩喷。
<c:forEach>標(biāo)簽的語(yǔ)法
<c:forEach
var=”name”
items=”Collection”
varStatus=”StatusName”
begin=”begin”
end=”end”
step=”step”>
本體內(nèi)容
</c:forEach>
【參數(shù)解析】:
- (1)var設(shè)定變量名用于存儲(chǔ)從集合中取出元素。
- (2)items指定要遍歷的集合监憎。
- (3)varStatus設(shè)定變量名纱意,該變量用于存放集合中元素的信息。
- (4)begin鲸阔、end用于指定遍歷的起始位置和終止位置(可選)偷霉。
- (5)step指定循環(huán)的步長(zhǎng)。
<c:forEach>使用范例
cforeach.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--引入JSTL核心標(biāo)簽庫(kù) --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="java.util.ArrayList"%>
<!DOCTYPE HTML>
<html>
<head>
<title>JSTL: -- forEach標(biāo)簽實(shí)例</title>
</head>
<body>
<h4><c:out value="forEach實(shí)例"/></h4>
<%
List<String>list = new ArrayList<String>();
list.add(0, "貝貝");
list.add(1, "晶晶");
list.add(2, "歡歡");
list.add(3, "瑩瑩");
list.add(4, "妮妮");
request.setAttribute("list", list);
%>
<B><c:out value="不指定begin和end的迭代:" /></B><br>
<%--不使用begin和end的迭代褐筛,從集合的第一個(gè)元素開(kāi)始类少,遍歷到最后一個(gè)元素。 --%>
<c:forEach var="fuwa" items="${list}">
<c:out value="${fuwa}"/><br/>
</c:forEach>
<B><c:out value="指定begin和end的迭代:" /></B><br>
<%--指定begin的值為1渔扎、end的值為3硫狞、step的值為2,
從第二個(gè)開(kāi)始首先得到晶晶晃痴,每?jī)蓚€(gè)遍歷一次残吩,
則下一個(gè)顯示的結(jié)果為瑩瑩,end為3則遍歷結(jié)束倘核。 --%>
<c:forEach var="fuwa" items="${list}" begin="1" end="3" step="2">
<c:out value="${fuwa}"/><br/>
</c:forEach>
<B><c:out value="輸出整個(gè)迭代的信息:" /></B><br>
<%--指定varStatus的屬性名為s泣侮,并取出存儲(chǔ)的狀態(tài)信息 --%>
<c:forEach var="fuwa"
items="${list}"
begin="3"
end="4"
varStatus="s"
step="1">
<c:out value="${fuwa}" />的四種屬性:<br>
所在位置,即索引:<c:out value="${s.index}" /><br>
總共已迭代的次數(shù):<c:out value="${s.count}" /><br>
是否為第一個(gè)位置:<c:out value="${s.first}" /><br>
是否為最后一個(gè)位置:<c:out value="${s.last}" /><br>
</c:forEach>
</body>
</html>
JSTLjar包依賴(lài)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
前兩個(gè)是servlet依賴(lài)紧唱,第三個(gè)是jstl的jar活尊,版本為1.2
在實(shí)際開(kāi)發(fā)中,判斷標(biāo)簽和循環(huán)標(biāo)簽用的最多琼蚯,這兩個(gè)務(wù)必要認(rèn)真掌握酬凳,才能在實(shí)際開(kāi)發(fā)中游刃有余。