JSTL簡介:
標準標籤庫JSTL的全名爲:Java Server Pages Standard Tag Library.
JSTL主要提供了5大類標籤庫:
1. 核心標籤庫: 爲日常任務提供通用支持,如顯示和設置變量,重複使用一組項目,測試條件以及其他操作(如導入和重定向web頁面等).
2. 國際化(I18N)標籤庫: 支持多種語言的引用程序.
3. SQL標籤庫: 對訪問和修改數據庫提供標準化支持.
4. XML標籤庫: 對XML文件處理和操作提供支持,包括XML節點的解析,迭代,基於XML數據的條件評估以及可擴展樣式語言轉換(Extensible Style Language Transformations , XSLT)的執行.
5. 函數標籤庫: 通過在EL表達式中調用函數標籤庫中的函數來實現特定的操作,例如: ${fn:contains(sring,substring)},其功能是判斷string字符串中是否包含substring字符串.
JSTL標籤庫使用方法:
標籤庫 URI 前綴 使用模式
核心標籤庫 http://java.sun.com/jstl/core c <c:tagname…>
國際化標籤(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的頭尾空格全部去除,並返回.