JSTL標籤庫之核心標籤
一、JSTL標籤庫介紹
JSTL標籤庫的使用是為彌補html標籤的不足,規範自定義標籤的使用而誕生的。使用JSLT標籤的目的就是不希望在jsp頁面中出現java邏輯程式碼
二、JSTL標籤庫的分類
- 核心標籤(用得最多)
- 國際化標籤(I18N格式化標籤)
- 資料庫標籤(SQL標籤,很少使用)
- XML標籤(幾乎不用)
- JSTL函式(EL函式)
三、核心標籤庫使用說明
JSTL的核心標籤庫標籤共13個,使用這些標籤能夠完成JSP頁面的基本功能,減少編碼工作。
從功能上可以分為4類:表示式控制標籤、流程控制標籤、迴圈標籤、URL操作標籤。
(1)表示式控制標籤
(2)流程控制標籤:if標籤、choose標籤、when標籤、otherwise標籤。
(3)迴圈標籤:forEach標籤、forTokens標籤。
(4)URL操作標籤:import標籤、url標籤、redirect標籤、param標籤。
在JSP頁面引入核心標籤庫的程式碼為:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.1、表示式控制標籤——out標籤使用總結
3.1.1、<c:out>標籤的功能
<c:out>標籤主要是用來輸出資料物件(字串、表示式)的內容或結果。
在使用Java指令碼輸出時常使用的方式為: <% out.println(“字串”)%> 或者 <%=表示式%> ,在web開發中,為了避免暴露邏輯程式碼會盡量減少頁面中的Java指令碼,使用<c:out>標籤就可以實現以上功能。
1 <c:out value=”字串”> 2 <c:out value=”EL表示式”>
JSTL的使用是和EL表示式分不開的,EL表示式雖然可以直接將結果返回給頁面,但有時得到的結果為空,<c:out>有特定的結果處理功能,EL的單獨使用會降低程式的易讀性,建議把EL的結果輸入放入<c:out>標籤中。
3.1.2、<c:out>標籤的語法
<c:out>標籤的使用有兩種語法格式:
【語法1】:<c:out value=”要顯示的資料物件” [escapeXml=”true|false”] [default=”預設值”]/>
【語法2】:<c:out value=”要顯示的資料物件” [escapeXml=”true|false”]>預設值</c:out>
這兩種方式沒有本質的區別,只是格式上的差別。[escapeXml=”true|false”] [default=”預設值”]這些使用[]屬性表示是不是必須的。
3.1.3、<c:out>標籤的屬性
3.1.4、<c:out>標籤的使用範例
1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <%--引入JSTL核心標籤庫 --%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <!DOCTYPE HTML> 5 <html> 6 <head> 7 <title>JSTL: --表示式控制標籤“out”標籤的使用</title> 8 </head> 9 10 <body> 11 <h3><c:out value="下面的程式碼演示了c:out的使用,以及在不同屬性值狀態下的結果。"/></h3> 12 <hr/> 13 <ul> 14 <%--(1)直接輸出了一個字串。 --%> 15 <li>(1)<c:out value="JSTL的out標籤的使用" /></li> 16 17 <li>(2)<c:out value="<a href='http://www.cnblogs.com/'>點選連結到部落格園</a>" /></li> 18 <%--escapeXml="false"表示value值中的html標籤不進行轉義,而是直接輸出 --%> 19 <li>(3)<c:out value="<a href='http://www.cnblogs.com/'>點選連結到部落格園</a>" escapeXml="false"/></li> 20 21 <%--(4)字串中有轉義字元,但在預設情況下沒有轉換。 --%> 22 <li>(4)<c:out value="<未使用字元轉義>" /></li> 23 <%--(5)使用了轉義字元<和>分別轉換成<和>符號。 --%> 24 <li>(5)<c:out value="<使用字元轉義>" escapeXml="false"></c:out></li> 25 26 <%--(6)設定了預設值,從EL表示式${null}得到空值,所以直接輸出設定的預設值。 --%> 27 <li>(6)<c:out value="${null}">使用了預設值</c:out></li> 28 <%--(7)未設定預設值,輸出結果為空。 --%> 29 <li>(7)<c:out value="${null}"></c:out></li> 30 31 <%--(8)設定了預設值,從EL表示式${null}得到空值,所以直接輸出設定的預設值。 --%> 32 <li>(8)<c:out value="${null}" default="預設值"/></li> 33 <%--(9)未設定預設值,輸出結果為空。 --%> 34 <li>(9)<c:out value="${null}"/></li> 35 </ul> 36 </body> 37 </html>
執行結果如下:
3.2、表示式控制標籤——set標籤使用總結
3.2.1、<c:set>標籤的功能
<c:set>標籤用於把某一個物件存在指定的域範圍內,或者將某一個物件儲存到Map或者JavaBean物件中。
3.2.2、<c:set>標籤的語法
<c:set>標籤的編寫共有4種語法格式。
語法1:存值,把一個值放在指定的域範圍內。
<c:set value=”值1” var=”name1” [scope=”page|request|session|application”]/>
含義:把一個變數名為name1值為“值1”的變數儲存在指定的scope範圍內。
語法2:
<c:set var=”name2” [scope=”page|request|session|application”]>
值2
</c:set>
含義:把一個變數名為name2,值為值2的變數儲存在指定的scope範圍內。
語法3:
<c:set value=”值3” target=”JavaBean物件” property=”屬性名”/>
含義:把一個值為“值3”賦值給指定的JavaBean的屬性名。相當與setter()方法。
語法4:
<c:set target=”JavaBean物件” property=”屬性名”>
值4
</c:set>
含義:把一個值4賦值給指定的JavaBean的屬性名。
從功能上分語法1和語法2、語法3和語法4的效果是一樣的,只是把value值放置的位置不同,至於使用那個根據個人的喜愛,語法1和語法2是向scope範圍內儲存一個值,語法3和語法4是給指定的JavaBean賦值。
3.2.3、<c:set>標籤的屬性
3.2.4、<c:set>標籤的使用範例
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%--引入JSTL核心標籤庫 --%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4 <%--使用JSP的指令元素指定要使用的JavaBean --%> 5 <jsp:useBean id="person" class="javabean.Person"/> 6 <%--負責例項化Bean,id指定例項化後的物件名,可以通過${person}得到person在記憶體中的值 7 (或者使用person.toString()方法)。 --%> 8 <!DOCTYPE HTML> 9 <html> 10 <head> 11 12 <title>JSTL: --表示式控制標籤“set”標籤的使用</title> 13 14 </head> 15 16 <body> 17 <h3>程式碼給出了給指定scope範圍賦值的示例。</h3> 18 <ul> 19 <%--通過<c:set>標籤將data1的值放入page範圍中。--%> 20 <li>把一個值放入page域中:<c:set var="data1" value="xdp" scope="page"/></li> 21 <%--使用EL表示式從pageScope得到data1的值。--%> 22 <li>從page域中得到值:${pageScope.data1}</li> 23 24 <%--通過<c:set>標籤將data2的值放入request範圍中。--%> 25 <li>把一個值放入request域中:<c:set var="data2" value="gacl" scope="request"/></li> 26 <%--使用EL表示式從requestScope得到data2的值。--%> 27 <li>從request域中得到值:${requestScope.data2}</li> 28 29 <%--通過<c:set>標籤將值name1的值放入session範圍中。--%> 30 <li>把一個值放入session域中。<c:set value="孤傲蒼狼" var="name1" scope="session"></c:set></li> 31 <%--使用EL表示式從sessionScope得到name1的值。--%> 32 <li>從session域中得到值:${sessionScope.name1} </li> 33 34 <%--把name2放入application範圍中。 --%> 35 <li>把一個值放入application域中。<c:set var="name2" scope="application">白虎神皇</c:set></li> 36 <%--使用EL表示式從application範圍中取值,用<c:out>標籤輸出使得頁面規範化。 --%> 37 <li>使用out標籤和EL表示式巢狀從application域中得到值: 38 <c:out value="${applicationScope.name2}">未得到name的值</c:out> 39 </li> 40 41 <%--不指定範圍使用EL自動查詢得到值 --%> 42 <li>未指定scope的範圍,會從不同的範圍內查詢得到相應的值:${data1}、${data2}、${name1}、${name2}</li> 43 </ul> 44 <hr/> 45 <h3>使用Java指令碼實現以上功能</h3> 46 <ul> 47 48 <li>把一個值放入page域中。<%pageContext.setAttribute("data1","xdp");%></li> 49 <