一、JSTL標簽庫簡介
JSTL全稱 jsp Standard Tag Library,常被用來代替傳統的java片段語言來實現頁面邏輯,與控制程序輸出的EL表達式相結合,兩者相輔相成。
二、JSTL標簽庫使用之前的準備
在使用JSTL標簽之前,先要導入jstl.jar的包,如果是通過Maven創建項目的話,直接在pom.xml里添加依賴即可。還需要在JSP頁面開頭添加指令。uri是指tld文件中某個庫的uri,PRefix是指前綴,如果是c.tld庫中的,一般寫成c,可以區別包里相同的標簽。然后就可以用如<c:out/>這樣的格式調用標簽了。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>三、常用標簽庫的用法
1.核心標簽庫
1.1 通用標簽
1.1.1 <c:out>
語法格式:
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>value值為顯示的值,引號內可以寫EL表達式,[ ]內屬性為非必填屬性,escapeXml的默認值為true,代表其中的標簽就按照字符串顯示,不按照標簽語義進行顯示,default為當value值為null時,顯示的默認值。1.1.2 <c:set>
語法格式1:
<c:set value="value" var="name" [scope="{page|request|session|application}"]/>這句話就相當于在某個特定范圍內加一個屬性。語法格式2:
<c:set value="Mike" target="${person}" property="name"/>把WEB域中某個屬性key值為person的JavaBean對象的name屬性值賦成value值。1.1.3 <c:remove>
語法格式:
<c:remove var="person" scope="request"/>移除某個域中的某個名為var的屬性值1.1.4 <c:catch>
語法格式:
<c:catch var="exception"><% int a = 5 / 0;%></c:catch><c:out value="${exception}"/>捕獲異常。1.2 條件標簽
1.2.1 <c:if>
<c:if test="${5 / 1 == 5}">Body</c:if>test的中的表達式就相當于if()括號中的語句。Body就相當于test的值為true后執行的語句。1.2.2 <c:choose>
1.2.3 <c:when>
1.2.3 <c:otherwise>
以上三個標簽基本一起用,choose為父標簽,作為選項的開始,每個when是一個選項,最后的其它就是otherwise。
基本語法:
<c:choose> <c:when test="${5 / 1 == 1}"> BodyA </c:when> <c:when test="${5 / 1 == 2}"> BodyB </c:when> <c:otherwise> BodyC </c:otherwise></c:choose>1.3 迭代標簽
<c:forEach>
假設servlet將數據存在某個WEB域中,以下是兩種容器迭代方式的代碼:
<% List<Person> list = new ArrayList<Person>(); list.add(new Person("kkk")); list.add(new Person("sss")); list.add(new Person("jjj")); application.setAttribute("list_1", list); Map<String, Person> map = new HashMap<String, Person>(); map.put("a", new Person("aaa")); map.put("b", new Person("bbb")); map.put("1", new Person("ccc")); request.setAttribute("map", map);%><c:forEach items="${list_1}" var="person" begin="0" end="2" step="1"> ${person.name }</c:forEach> <c:forEach items="${map }" var="entry" begin="0" end="2" step="1"> <!-- 遍歷Map類對象,先轉換為EntrySet,再遍歷 --> ${entry.key } ${entry.value.name }<br></c:forEach>1.4 URL標簽
1.41 <c:import>
<c:import url=""/>與<jsp:include page=""/>都是動態加載,但是import更靈活,可以加載WEBAPP范圍外的url。
1.42 <c:redirect>
用于重定向到某個URL,語法格式:
<c:redirect url="value" [context="context"]/>1.43 <c:url>
用于產生一個鏈接,語法格式:
<c:url value=""[context=""] [var=""] [scope=""] />2.國際化標簽庫
2.1 <fmt:formatDate> 日期格式化
語法格式:
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH點mm分ss秒"/>2.2 <fmt:formatNumber> 數字格式化語法格式:
<fmt:formatNumber value="${5/3 }" pattern=".0000"/>小數點保留四位3.數據庫標簽庫
3.1 <sql:setDataSource> 準備數據庫
對于沒有默認數據庫的JSP頁面,該標簽能準備一個數據庫以供使用。語法格式:
<sql:setDataSource var="demo" driver="com.MySQL.jdbc.Driver" url="jdbc:mysql://localhost:3306/db" user="root" passWord="admin" />var代表數據庫的變量名,在稍后的查詢將會用到3.2 <sql:query> 查詢數據庫
在連接了數據庫后,即可使用該標簽執行SQL語句查詢數據庫。查詢后的結果集存在rs中,然后用<c:forEach>標簽遍歷結果集的每一行記錄。語法格式:
<sql:query var="rs" dataSource="${ demo}">SELECT * FROM info</sql:query><table><c:forEach items="${rs.rows }" var="row" varStatus="s"> <tr> <td>${s.index }</td> <td>${row.name }</td> <td>${row.age }</td> </tr></c:forEach></table>也可以將Body中的sql語句寫到標簽里面。
<sql:query var="rs" dataSource="${ demo}" sql="SELECT * FROM info">3.3 <sql:update> 更新數據庫
語法格式1:
<sql:update var="update" sql="" dataSource="${demo }"/>語法格式2:<sql:update var="update" dataSource="${demo }">UPDATE info SET age=? where name=?<sql:param value="1"/><sql:param value="xxx"/></sql:update>
新聞熱點
疑難解答