標準標籤庫JSTL的全名爲:Java Server Pages Standard Tag Library.html
JSTL主要提供了5大類標籤庫:java
1. 核心標籤庫: 爲平常任務提供通用支持,如顯示和設置變量,重複使用一組項目,測試條件以及其餘操做(如導入和重定向web頁面等).web
2. 國際化(I18N)標籤庫: 支持多種語言的引用程序.sql
3. SQL標籤庫: 對訪問和修改數據庫提供標準化支持.數據庫
4. XML標籤庫: 對XML文件處理和操做提供支持,包括XML節點的解析,迭代,基於XML數據的條件評估以及可擴展樣式語言轉換(Extensible Style Language Transformations , XSLT)的執行.數組
5. 函數標籤庫: 經過在EL表達式中調用函數標籤庫中的函數來實現特定的操做,例如: ${fn:contains(sring,substring)},其功能是判斷string字符串中是否包含substring字符串.瀏覽器
JSTL標籤庫使用方法:服務器
標籤庫 URI 前綴 使用模式session
核心標籤庫 http://java.sun.com/jstl/core c <c:tagname…>app
國際化標籤(I18N) http://java.sun.com/jstl/fmt fmt <fmt:tagname…>
SQL標籤庫 http://java.sun.com/jstl/sql sql <sql:tagname…>
XML標籤庫 http://java.sun.com/jstl/xml x <x:tagname…>
函數標籤庫 http://java.sun.com/jstl/functions fn <fn:tagname…>
核心標籤庫
核心標籤庫包括:out , set , remove , catch , if , choose , when 和 URL 等.
表達式操做標籤: 包括:out , set , remove , catch.
out標籤:
核心標籤庫中最爲基本的標籤就是<c:out>,他能夠在頁面中顯示一個字符串或者一個EL表達式的值,其功能與JSP中的<%= 表達式%>相似
使用格式以下:
<c: out value=」object」 [escapeXml=」true|false」] />
這個標籤還能夠有一個體,以下:
<c: out value=」object」 [escapeXml=」true|false」] >defalut value</c:out>
這表示當value屬性指定的object值爲null時,就會顯示體中指定的值,也就是default value的值,體中也能夠是jsp代碼.
<c:out>中各屬性的說明以下:
1. value : 能夠指定一個字符串做爲輸出內容,也能夠指定爲EL表達式,例如:${3+5}.
2. escapeXml : 類型爲boolean , 肯定 , < , > , & , ‘ , 「 等字符在結構的字符串中是否被轉換成字符串實體代碼,默認值是true(就是是否按html中的樣式進行輸出,設置true就是按照字符串原樣進行輸出,false就是按照html標識符進行輸出)
3. default value : 能夠是字符串,也能夠是一個EL表達式或者jsp表達式,若是屬性(value)指定的表達式或者對象爲null,那麼將輸出這個defalut value部分的值.
set標籤:
set標籤用來在某個範圍(request,session或者application)內設置值,或者設置某個對象的屬性值.
Set標籤使用格式以下:
1. 使用value 屬性在一個特定的範圍內指定某個變量的值,其使用格式以下:
<c:set var=」varName」 value=」varValue」 [scope=」page|request|session|application」]/>
2. 當使用value屬性在一個特定範圍內指定某各變量的值時,也能夠包括一個體,他的做用與out標籤體的做用同樣,即value指定的值爲null時,默認使用體中指定的值,使用的格式以下:
<c:set var=」varName」 value=」varValue」 [scope=」page|request|session|application」]>
default value
</c:set>
3. 設置某一個特定對象屬性的使用格式以下:
<c:set property=」propertyName」 target=」target」 value=」value」/>
4. 在設置某個特定對象的一個屬性時,也可使用一個體,而且指定默認的值,使用格式以下:
<c:set property=」propertyName」 target=」target」 value=」value」>
default value
</c:set>
該標籤中的各屬性說明以下:
1. value : 該屬性指定變量或者對象中某個屬性的值,而且能夠是一個表達式.
2. var : 變量名稱,value屬性指定的值就保存在這個變量中.
3. scope : 設定變量的有效範圍,若是不設置,默認爲page.
4. target : 設置屬性的一個對象,它必須是JavaBean 或者java.util.Map對象.
5. property : 設置對象中的一個屬性.
remove標籤
remove標籤通常和set標籤配套使用,二者是相對應的,remove標籤用於刪除某個變量或者屬性,使用格式以下:
<c:remove var=」varName」 [scope=」page|request|session|application」] />
Remove標籤中使用的各屬性說明以下:
1. scope : 設定這個須要刪除的變量的所在範圍.
2. var : 須要刪除的變量或者對象屬性的名稱.
若是沒有scope屬性,即採用默認值,就至關於調用PageContext.removeAttribute(varName)方法,若是指定了這個變量所在的範圍,那麼系統會調用PageContext.removeAttribute(varName,scope)方法.
catch標籤
catch標籤的功能和java中的try{…}catch{…}語句的功能很類似,它用於捕獲嵌入到其中間語句拋出的異常,這個標籤的使用格式以下:
<c:catch var=」varName」>
相關操做語句
</c:catch> --若是操做語句中出現異常,則catch會將異常保存在 varName變量中.
流程控制標籤: 包括: if , choose , when , otherwise 等.
if標籤
這個標籤做用與java中的if語句做用相同,用於判斷條件語句,主要的使用格式以下
1. 在<c:if> 體中不包括體的使用格式:
<c:if test=」checkCondition」 var=」varName」 scope=」page|request|session|application」/>
2. 當<c:if> 體中包括體時,使用格式以下:
<c:if test=」checkCondition」 var=」varName」 scope=」page|request|session|application」>
body content
</c:if>
標籤中使用的屬性說明:
test : 判斷條件的表達式,返回類型爲true 或者 false;(也就是if的條件)
var : 這個變量用於保存test條件表達式判斷所返回的true或者false值
(if條件執行後所獲得的boolean值將要保存在var變量中).
scope : 指定var變量所在的有效範圍.
choose , when , otherwise 標籤
這些標籤至關於java中的 switch , case , default 條件,使用實例以下:
<c:set var=」num」 scope=」page」 value=」admin」/>
<c:choose>
<c:when test=」${num==’guest’}」>
<c:out value=」guest」/>
</c:when>
<c:when test=」${num==’admin’}」>
<c:out value=」admin」/>
</c:when>
<c:otherwise>
<c:out value=」other」/>
</c:otherwise>
</c:choose>
運行jsp頁面後,輸出 admin
forEach迭代標籤
該標籤用來對一個collection集合中的一系列對象進行迭代輸出,而且能夠指定迭代次數,通常的使用格式以下:
<c:forEach items=」collection」 var=」varName」 [varstatue=」varStatusName」] [begin=」begin」] [end=」end」] [step=」step」]>
Body content
</c:forEach>
這個標籤使用的屬性描述以下:
1. var : 也就是保存在collection集合類中的對象名稱.
2. items : 將要迭代的集合類名.
3. varStatus : 存儲迭代的狀態信息,能夠訪問到迭代自身的信息.
4. begin : 若是指定了begin值,就表示從items[begin]開始迭代;若是沒有指定begin值,則從集合的第一個值開始迭代.
5. end : 表示迭代到集合的end位時結束,若是沒有指定end值,則表示一直迭代到集合的最後一位.
6. step : 指定迭代的步長.
例:
<%
String Items[] =new String[5];
Items[0]=」核心標籤庫」;
Items[1]=」國際化標籤庫」;
Items[2]=」SQL標籤庫」;
Items[3]=」XML標籤庫」;
Items[4]=」函數標籤庫」;
Request.setAttribute(「ItemName」,Items);
%>
<B><c:out value=」不指定begin和end的迭代:」/><B><br>
<c:forEach var=」ItemName」 items=」${Items}」>
<c:out value=」${ItemName}」 /><br>
</c:forEach>
<B><c:out value=」指定begin和end的迭代:」/><B><br>
<c:forEach var=」ItemName」 items=」${Items}」 begin=」1」 end=」3」 step=」1」>
<c:out value=」${ItemName}」 /><br>
</c:forEach>
<B><c:out value=」輸出整個迭代的信息:」/><B><br>
<c:forEach var=」ItemName」 items=」${Items}」 begin=」3」 end=」4」 step=」1」 varStatus=」s」>
<c:out value=」${ItemName}」 />的四種屬性:<br>
所在位置即索引: <c:out value=」${s.index}」 /> <br>
總共已迭代的次數: <c:out value=」${s.count}」/><br>
是否爲第一個位置: <c:out value=」${s.first}」 /><br>
是否爲最後一個位置: <c:out value=」${s.last}」/>
</c:forEach>
代碼說明: s.index 用來獲取計數器的值, s.count用來獲取這是第幾回循環, s.first 用來獲取是不是循環開始的第一次 , s.last 用來獲取是不是循環的最後一次 , first 和last 都返回boolean值.
forTokens 標籤
這個標籤的做用和Java中的StringTokenizer類的做用很是類似,經過items屬性來指定一個特定的字符串,而後經過delims屬性指定一種分隔符(能夠同時指定多個),經過指定的分隔符把items屬性指定的字符串進行分組,與forEach標籤同樣,forTokens標籤也能夠指定begin和end以及step屬性值.
使用格式以下:
<c:forTokens items=」stringOfTokens」 delims=」delimiters」 var=」varName」 [varStatus=」varStatusName」] [begin=」begin」] [end=」end」] [step=」step」]>
Body content
</c:forTokens>
標籤中的各個屬性描述以下:
1. var : 進行迭代的參數名稱.
2. items : 指定的進行標籤化的字符串.
3. varSatus : 每次迭代的狀態信息.
4. delims : 使用這個屬性指定的分隔符來分隔items指定的字符串.
5. begin : 開始迭代的位置.
6. end : 迭代結束的位置.
7. step : 迭代的步長.
例:
<c:out value=」forTokens標籤實例」/>
<h4>使用」 | 」 做爲分隔符</h4>
<c:forTokens var=」token」 items=」bleu,rouge|vert,jaune|blanc,rouge」 delims=」|」>
<c:out value=」${token}」/>
</c:forTokens>
<h4>使用」 | , 」做爲分隔符</h4>
<c:forTokens var=」token」 items=」bleu,rouge|vert,jaune|blanc,rouge」 delims=」|,」>
<c:out value=」${token}」/>
</c:forTokens>
代碼說明: delims=」|,」 , 即便用」|」和」,」同時做爲分隔符進行使用.若是須要更多的分隔符就是使用「|,./」 在引號內輸出.
URL相關的標籤:
URL相關的標籤主要用來將其餘文件包含進來,或者提供頁面之間的重定位以及URL地址的生成,參數的輸出等.通常包括以下幾個標籤.
<c:import>標籤: 與傳統JSP頁面重的<jsp:include>標籤相似.
<c:redirect>標籤: 進行頁面的重定位.
<c:url> : 主要用來重寫URL地址.
<c:param> : 通常param標籤會與其餘標籤一塊兒配套使用,用於參數值的傳遞.
<c:import> 標籤:
該標籤用於把其餘今天文件包含到該文件當中,它與傳統的<jsp:include>相相似,不一樣的是<jsp:include>標籤只能用來包括該應用中的其餘文件,而<c:import>還能夠包含外部站點中的靜態文件,因此它的功能更增強大.使用格式以下:
<c:import url=」url」 [context=」context」] [var=」varName」] [scope=」page|request|session|application」] [varReader=」varReader」] [charEncodion=」charEncoding」]>
Body content
</c:import>
標籤中的屬性描述以下:
url: 待引用靜態文件的URL地址.
context: 當採用相對路徑訪問一個外部靜態文件時,這裏的context指定這個外部文件的名稱.
var: 當使用字符串輸出時,把輸出的內容存儲在這個var指定的變量中.
scope: 指定var參數變量的有效範圍.
varReader: 這個屬性指定的參數變量類型是Reader,能夠用於讀取文件的內容.
charEncoding: 引入文件所採用的字符編碼.
Import標籤便可以採用相對路徑也能夠採用絕對路徑來引用本地點中的任何靜態文件,還可使用絕對路徑引用外部站點中的靜態文, 甚至能夠是ftp站點中的文件,例如:<c:import var=」myurl」 url=」http://www.163.com」 />就是引用http://www.163.com 站點的主頁面.
能夠把引用文件中的內容賦值給var屬性指定的變量,而後進行讀取,也能夠賦值給varReader指定的Reader類型的變量,而後進行相應的讀取.
有時引入的文件在本地顯示會出現亂碼,這時能夠經過charEncoding來指定這些內容所採用的字符集編碼.
<c:redirect>和<c:param>標籤:
Redirect標籤用來進行頁面之間的重定向,它與傳統JSP程序重的<jsp:redirect>標籤功能相相似,param標籤是與redirect一塊兒使用的,它用來進行參數值的傳遞,redirect標籤的使用格式以下:
<c:redirect url=」url」 [context=」context」]/>
在redirect標籤中指定param參數的使用格式以下:
<c:redirect url=」url」 []context=」context」>
<c:param name=」paramName」 value=」value」/>
</c:redirect>
例: [經過建立c_redirect1.jsp 和 c_redirect2.jsp 兩個文件說明]
c_redirect1.jsp文件內容以下:
<c:redirect url=」c_redirect2.jsp」 >
<c:param name=」userName」 value=」admin」/>
</c:redirect>
c_redirect2.jsp 文件內容以下:
<body>
userName=<c:out value=」${param.userName}」>
</body>
c_redirect1.jsp頁面文件內容不會顯示,由於直接重定向到c_redirect2.jsp,重定向c_redirect2.jsp後,頁面中輸出 userName=admin
<c:url>標籤:
這個標籤主要用來重寫url地址,使用格式以下:
<c:url value=」value」 [context=」context」] [var=」varName」] [scope=」page|request|session|application」] />
當進行參數傳遞時,使用格式以下:
<c:url value=」value」 [context=」context」] [var=」varName」] [scope=」page|request|session|application」] >
<c:param name=」paramName」 value=」value」 />
</c:url>
標籤中使用的屬性描述以下:
value: 將要處理的URL地址.
context: 當使用相對路徑方法指定外部文件時,這個屬性指定的是外在文件的名稱.
var: 給這個URL地址起一個標識.
Scope: 規定這個var屬性所指定變量的有效範圍.
建立一個c_url.jsp,其源代碼以下:
<%@ taglib prefix=」c」 uri=」http://java.sun.com/jsp/jstl/core」 %>
<c:url var=」url」 value=」c_url2.jsp」 scope=」session」 >
<c:param name=」userName」 value=」admin」/>
<c:param name=」password」 value=」123456」/>
</c:url>
<c:out value=」${url}」/>
<a herf=’<c:out value=」${url}」/>’>Link to other page</a>
代碼說明: url標籤能夠指定一個變量(var屬性指定)來把url地址保存,而且能夠指定這個變量的有效範圍爲session ,因此當須要用到這個url地址時,就可使用session.getAttribute(varName)方法來獲取這個地址,因此通常須要重複使用同一個url地址纔會使用<c:url>標籤的功能.
國際化( I18N )標籤庫
國際化標籤包括:
<fmt:setLocale>: 用於設置當前本地化環境,爲對應的java類javax.servlet.jsp.jstl.fmt.locale配置參數值,這個指定的參數由jsp運行時維護,用於肯定各個jstl標籤使用的本地化環境.
<fmt:bundle>: 指定消息資源使用的文件.
<fmt:message>: 顯示消失資源文件中指定key的消息,支持帶參數的消息.
<fmt:param>: 給帶參數的消息設置參數值.
<fmt:setBundle>: 設置消息資源文件.
設置本地化環境標籤<fmt:setLocale>
HTML請求到達服務器時,瀏覽器提供的HTTP首部能夠指出用戶的首選本地化環境(多是多個本地化環境的列表).這個列表放在Accept-Language HTTP首部中,jsp容器會訪問這個首部信息,若是沒有使用標籤<fmt:setLocale>明確地指出引用本地化環境,JSTL標籤就會使用這個列表中的首選本地化環境.
<fmt:setLocale>標籤專門用於設置當前本地化環境,基本使用格式以下:
<fmt:setLocale value=」…locale value…」 [variant=」…variant value…」] [scope=」page|request|session|application」] />
<fmt:setLocale>標籤的屬性描述以下:
value: 這個屬性是必須設置的,它用來設置本地環境名,例如en_US 或者zh_HK.
variant: 這個屬性是可選的,並且不多使用.
scope: 指定value設置的本地化環境名的有效範圍,默認爲page,即本頁面,若是把scope設置爲session,則表示同一個用戶發出的全部請求都具備相同的本地化環境.
執行信息資源標籤<fmt:bundle>
一旦已經設置了web引用的本地化環境後,就可使用<fmt:bundle>標籤了,其體重能夠包括一些調用本地化文本的<fmt:message>標籤,使用格式以下:
<fmt:bundle basename=」…the bundle’s base name…」 [prefix=」…prefix name…」]>
<fmt:message key=」…key name…」/>
</fmt:bundle>
屬性描述以下:
Basename: 資源文件(這裏使用文件,而不是類)的基名,例如,某資源文件Res_zh_CN.property,則基名爲Res.
prefix: 這個設置是可選的,若是指定這個屬性,就會爲標籤體中嵌套的<fmt:message>標籤附加一個前綴.
當<fmt:bundle>標籤中嵌套<fmt:message>標籤時,這時<fmt:message>標籤默認使用<fmt:bundle>標籤中的basename所指定的資源文件.
獲取資源屬性值標籤<fmt:message>:
該標籤用於顯示本地化的文本,它經過key屬性來取得資源文件中相應的消息<fmt:message>標籤的通常使用格式以下:
<fmt:message key=」…name of property…」 [bundle=」…resourceBundle…」][var=」…varible name…」] [scope=」…scope of var…」]/>
這個標籤從資源文件重獲取到一個消息,生成相應的一個本地化文本串,該便去重的屬性描述以下:
Key : 用於查找資源文件重相應的關鍵字名,它對應着一條特定的消息.
bundle: 若是設置了這個屬性,就會使用這個屬性指定的資源文件,不然若嵌套在<fmt:bundle>標籤重,就會直接使用<fmt:bundle>標籤重basename屬性指定的資源文件.
Var : 若是指定這個屬性,則把取出的消息字符串存儲在這個變量中.
Scope: 這個屬性指定了var設置變量的有效範圍,默認爲page,然而也能夠設置爲session.
設置資源文件標籤<fmt:setBundle>
該標籤用於設置一個資源文件,並給定一個標記,以即可以經過<fmt:message>標準中指定bundle屬性值來取得這個資源文件中的消息,使用格式以下:
<fmt:setBundle basename=」…the bundle’s base name…」 var=」…var name…」 [scope=」page|request|session|application」]/>
標籤中的屬性描述以下:
basename : 該屬性與<fmt:message>標籤中的basename屬性相似.
Var : 給指定的資源文件取一個變量名,以便<fmt:message>標籤能夠經過這個變量名來讀取資源文件中的消息
Scope: 設置var屬性指定的變量的有效範圍.
獲取參數值標籤<fmt:param>:
該標籤通常與<fmt:message>標籤配套使用,用來在獲取的消息中插入一個值.例如:資源文件中的一條消息以下:
密碼錯誤=」{0}的密碼錯誤」
<fmt:message>標籤首先使用key=」密碼錯誤」這個關鍵字找到以上這條消息,而後在<fmt:message>標籤中使用<fmt:param>標籤賦一個值來替代{0}部分.
<fmt:param>標籤的使用格式以下:
<fmt:message ……>
<fmt:param value=」value」/>
</fmt:message>
其中value屬性的值即爲要的替代{0}部分的值.
函數(function)標籤庫:
函數標籤庫中的標籤基本分紅兩種:
1. 長度度量函數,例如:fn.length(). [ fn.length(「」) 就爲要輸出的格式表達式,結果輸出0 ]
2. 字符串操做函數.
各種函數標籤的功能:
1. fn:contains(string,substring): 若是參數string中包含substring,則返回true.
2. fn:containsIgnoreCase(string,substring): 若是參數string中包含substring,則返回true(忽略大小寫).
3. fn:endsWith(string,suffix): 若是參數string以參數suffix結尾,則返回true.
4. fn:escapeXml(string): 將由特殊意義的xml(和html)轉換成對應的XML character entity code並返回.
5. fn:indexOf(string,substring): 返回參數substring在string中第一次出現的位置.
6. fn:join(array,separator): 將一個給定的數組array用給定的間隔符separator串在一塊兒,組成一個新的字符串並返回.
7. fn:length(item): 返回參數item中包含元素的數量,參數item的類型是數組,collection或者string,若是是string則返回string的字符數.
8. fn:replace(string,before,after): 返回一個String對象,用參數after字符串替換參數string中全部出現before字符串的地方,並返回替換後的結果.
9. fn:split(string,separator): 返回一個數組,以參數separator爲分隔符分隔參數string,分隔後的每一部分就是數組的一個元素.
10. fn:startsWith(string,prefix): 若是參數string以參數prefix開頭,則返回true.
11. fn:substring(string,begin,end): 返回參數string的部分字符串,從參數begin開始到參數end結束,其中包括end位置的字符.
12. fn:substringAfter(string,substring): 返回參數substring在參數string中後面的那一部分字符串.
13. fn:substringBefore(string,substring): 返回參數substring在參數string中前面的那一部分字符串.
14. fn:toLowerCase(string): 將參數string的全部字符變爲小寫,並返回.
15. fn:toUpperCase(string): 將參數string的全部字符變成大寫,並返回.
16. fn:trim(string): 將參數string的頭尾空格所有去除,並返回.
<logic:notEmpty> 標籤其自己具備多種功能:
q 一是判斷是否爲 null 。
q 二是當它爲 String 類型的變量時,判斷字符串長度是否爲 0 。
q 三是當它爲集合類型的變量時,利用集合類的 isEmpty 方法能夠判斷是不是一個空的集合。
本示例既然要在替換後與替換前的工做一致,就應該對集合作兩個判斷:
q 一是該集合不爲 null 。
q 二是該集合中的對象數量不爲 0 。
「 !=null 」的 EL 表達式實現了集合實例不爲 null 的判斷; fn:length() 函數實現了集合內對象數量不爲 0 的判斷,兩個判斷用「 && 」鏈接起來就實現了 <logic:notEmpty> 標籤對於集合判斷的工做。