天天看點

JSP标準标記庫(JSP Standard Tag Library,JSTL)使用入門

JSP标準标記庫(JSP Standard Tag Library,JSTL)是一個實作Web應用程式中常見的通用功能的定制标記庫集,這些功能包括疊代和條件判斷、資料管理格式化、XML操作以及資料庫通路。

JSTL 1.0 有四個定制标記庫:core、format、xml 和 sql.

1.core 标記庫提供了定制操作,通過限制了作用域的變量管理資料,以及執行頁面内容的疊代和條件操作。

2.format 标記庫定義了用來格式化資料(尤其是數字和日期)的操作。它還支援使用本地化資源束進行 JSP 頁面的國際化。

3.xml 庫包含一些标記,這些标記用來操作通過 XML 表示的資料。

4.sql 庫定義了用來查詢關系資料庫的操作。

一、表達式操作

 (一) 1 EL 表達式 :

用美元符号($)定界,内容包括在花括号({})中,eg:${value}

  EL的存取器:使用點運算符(.)和方括号運算符([]).

1)點運算符通常用于通路對象的特性。例如,在表達式 ${user.firstName} 中,使用點運算符來通路 user 辨別符所引用對象的名為 firstName 的特性。

2)方括号運算符用來檢索數組和集合的元素。在數組和有序集合的情況下,把要檢索的元素的下标放在方括号中。對于實作 java.util.Map 接口的集合,方括号運算符使用關聯的鍵查找存儲在映射中的值。在方括号中指定鍵,并将相應的值作為表達式的值傳回。

3)點運算符和方括号運算符可能實作某種程度的互換

2.EL運算符

1)算術運算符: +、-、*、/(或 div)和 %(或 mod)

2)關系運算符: ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge)

3)邏輯運算符: &&(或 and)、||(或 or)和 !(或 not)

4)驗證運算符: empty

<c:out>是寫資料,<c:set>是儲存資料到記憶體中,<c:remove>是删除資料,<c:catch>是抛出錯誤資訊。

(二)

1.<c:out>

作用:用于顯示資料的内容。

文法1:沒有本體内容

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

文法2:有本體内容(但不會輸出到用戶端)

<c:out value="value" [escapeXml="{true|false}"]>

default value

</c:out>

屬性說明:

value:需要顯示出來的值。

default:如果value的值為null時,則顯示default指定的值。

escapeXml:是否轉換特殊字元,預設為true。即預設會将<、>、’、” 和 & 轉換為 &lt;、&gt;、&#039;、&#034和&amp。如果設為      false,則不進行轉換。

2.<c:set>

作用:用于将變量的值存儲在JSP範圍中或JavaBean的屬性中。

文法1:将value的值存儲在範圍為scope的varName變量中

<c:set value="value" var="varName" [scope="{page|request|session|application}"] />

文法2:将本體内容的資料存儲在範圍為scope的varName變量中

<c:set var="varName" [scope="{page|request|session|application}"] >

...本體内容

</c:set>

文法3:将value的值存儲在target對象的propertyName屬性中

<c:set value="value" target="target" property="propertyName" />

文法4:将本體内容的資料存儲在target對象的propertyName屬性中

<c:set target="target" property="propertyName">

...本體内容

</c:set>

屬性說明:

value:要被存儲的值。

var:欲存入的變量名稱。

scope:var變量的JSP範圍。預設為page範圍。

target:為一JavaBean或Map對象。

property:指定的target對象的屬性。

3.<c:remove>

作用:移除變量。

文法:<c:remove var="varName" [scope="{page|request|session|application}"] />

屬性說明:

var:要移除的變量。

scope:var變量所在的JSP範圍,預設為page範圍。

4.<c:catch>

作用:用于處理産生錯誤的異常情況,并将錯誤資訊存儲起來。

文法: <c:catch [var="varName"] >

...欲抓取錯誤的部分

</c:catch>

屬性說明:

var:将錯誤資訊存儲在指定的變量中,可以通過該變量擷取錯誤資訊。

二、流程控制

1.<c:if>

作用:類似if判斷語句,用于表達式判斷。

文法1:沒有本體内容

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />

文法2:有本體内容

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"] />

...本體内容

</c:if>

屬性說明:

test:當該屬性中的表達式運算結果為true,則會執行本體内容,為false則不執行,該标簽必須要有test屬性。

var:存儲test的運算結果,為true或false。

scope:var變量的JSP範圍。

2.<c:choose>、<c:when>、<c:otherwise>

作用:這三個标簽必須組合使用,用于流程控制。

範例:

<c:choose>

<c:when test="${condition1}">

condition1為true

</c:when>

<c:when test="${ condition2}">

condition2為true

</c:when>

<c:otherwise>

condition1和condition2都為false

</c:otherwise>

</c:choose>

範例說明:當condition1為true時,會顯示“condition1為true”;當condition1為false且condition2為true時,會顯示“condition2為true”,如果兩者都為false,則會顯示“condition1和condition2都為false”。

注意:若condition1和condition2的運算結果都為true時,此時隻會顯示"condition1為true"。

限制說明:

a.<c:when>和<c:otherwise>标簽必須在<c:choose>和</c:choose>之間使用。

b.在同一個<c:choose>中,<c:otherwise>必須是最後一個标簽,且隻能有一個<c:otherwise>标簽。<c:when>可以有多個。

c.在同一個<c:choose>中,當所有<c:when>的test都為false時,才執行<c:otherwise>的本體内容。

三、疊代操作

1.<c:forEach>

作用:為循環控制,它可以将集合(Collection)中的成員循序浏覽一遍。運作方式為當條件符合時,就會持續重複執行<c:forEach>的本體内容。

文法1:疊代一個集合對象中的所有成員

<c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] />

...本體内容

</c:forEach>

文法2:疊代指定次數

<c:forEach [var="varName"] [varS tatus="varStatusName"] begin="begin" end="end" [step="step"]>

...本體内容

</c:forEach>

屬性說明:

items:被疊代的集合對象。

var:存放目前指到的集合對象中的成員。

varStatus:存放目前指到的成員的相關資訊。(index:目前指到的成員的索引;count:目前總共指到成員的總數;first:目前指到的成員     是否為第一個成員;last:目前指到的成員是否為最後一個成員)。

begin:疊代開始的位置,預設為0。

end:疊代結束的位置,預設為最後。

step:每次疊代的間隔數,預設為1。

範例:

<%

int atts[] = {1,2,3,4,5,6,7,8,9,10};

request.setAttribute("atts", atts);

%>

<c:forEach items="${atts}" var="item" begin="0" end="9" step="1" >

${item}</br>

</c:forEach>

此标簽也可以用于普通的循環控制,與for循環一樣。如:

<c:forEach begin="1" end="10" var="item" >

${item}</br>

</c:forEach> 

2.<c:forTokens>

作用:用指定分隔符分隔一字元串,并疊代分隔後的數組。

文法: <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"]    [end="end"] [step="step"] >

本體内容

</c:forTokens>

屬性說明:

items:被分隔并疊代的字元串。

delims:用來分隔字元串的字元。

var:存放目前指到的成員。

varStatus:存放目前指到的成員的相關資訊。(index:目前指到的成員的索引;count:目前總共指到成員的總數;first:目前指到的成員     是否為第一個成員;last:目前指到的成員是否為最後一個成員)。

begin:疊代開始的位置,預設為0。

end:疊代結束的位置,預設為最後。

step:每次疊代的間隔數,預設為1。

範例1:

<c:forTokens items="A,B,C,D,E" delims="," var="item" >

${item}

</c:forTokens>

用“,”号分隔字元串,并疊代輸出分隔後的字元串數組,輸出結果為“ABCDE”。

範例2:

<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >

${item}

</c:forTokens>  

delims中指定了三個分隔符“,”、“;”和“-”,可見我們一次可以設定所有想當做分隔字元串用的字元。輸出結果依然為“ABCDE”。

四、URL操作

1.<c:import>

作用:将其他靜态或動态檔案包含到本身JSP網頁中。不但可以包含同一個web application下的檔案,還可以包含其他web application或其他網站的檔案。

文法: <c:import url="url" [var="varName"] [scope="{page|request|session|application}"] >

[<c:param name="paramName" value="paramValue"/>]

</c:import>

屬性說明:

url:要包含至本身JSP網頁的其他檔案的URL。必選

var:将包含進來的其他檔案以字元串的形式存放到指定的變量中。可選

scope:var變量的作用範圍。可選

<c:param>:可選子标簽,用于向包含進來的其他網頁檔案傳遞參數。

範例:

<c:import url="http://java.sun.com" >

<c:param name="test" value="1234" />                         

</c:import>

說明:當<c:import>标簽中未指定var變量時,會直接将包含進來的其他網頁檔案内容顯示出來,如果指定了var變量,則會将内容存放到var變量中,不顯示。

2.<c:url>

作用:生成一個URL。

文法: <c:url value="url" [context="expression_r_r"] [var="name"] [scope="scope"]>

[<c:param name="expression_r_r" value="expression_r_r"/>]

</c:url>

範例1:

<a href="<c:url value=index.jsp'/>" target="_blank" rel="external nofollow" >index page</a>

在<a>超連結标簽中生成一個URL,指向index.jsp。

範例2:

<c:url value="index.jsp">

<c:param name="keyword" value="${searchTerm}"/>

<c:param name="month" value="02/2003"/>

</c:url>

生成一個URL,并傳遞參數,生成的結果為index.jsp?keyword=*&month=02/2003,*代表傳遞的searchTerm的值。

3.<c:redirect>

作用:可以将用戶端的請求從一個JSP網頁導向到其他檔案。

文法: <c:redirect url="url">

[<param name="paramName" value="paramValue">]

</c:redirect>

将請求導向URl指向的其他檔案。

五、開始使用JSTL

1.必需的檔案:

1)jar檔:jstl.jar,standard.jar.一般是放置在lib目錄下

2)tld檔案:c.tld,一般會是在WEB-INF目錄下,依tld檔案的位置修改web.xml文檔

3)一個web.xml的例子:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

   <taglib>

    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>

    <taglib-location>/WEB-INF/c.tld</taglib-location>

   </taglib>   

</web-app>

2.在JSP頁面中聲明标記庫:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

六、綜合使用Core Tag的例子:

 1,<c:choose>

 <c:when test="${role!='admin'}"></c:when>

 <c:otherwise></c:otherwise>

  </c:choose>

2,格式化日期

<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>

<fmt:formatDate value="${obj.jhdate}" type="both" pattern="yyyy-MM-dd"/>

說明見http://freeman983.javaeye.com/blog/96900

3,周遊

 <c:forEach var="dept" items="${list}">

        <c:out value="${dept.deptid}"/>

 </c:forEach>

 4,<c:out value="${sessionScope.user.name}"/>

5,數組

<c:forEach items="${sessionScope.department_array}" var="department" varStatus="status">  department: ${department}_${sessionScope.name_array[status.index]}</c:forEach>

【輸出标簽】c:out

例子:

<c:out value="hello" />

【指派】c:set【移除】 c:remove

例子:

<c:set var="temp" value="1000n" />

<c:remove var="temp"/>

【if條件句】c:if

例子:

<c:if test="${v1 lt v2}" var="r">

   v1小于v2,${r }<br>

</c:if>

【相當于if...else if...else語句】c:choose,c:when,c:otherwise

例子:

<c:choose>

<c:when test="${v1 gt v2}">

   v1大于v2<br>

</c:when>

<c:otherwise>

   v1小于v2<br>

</c:otherwise>

</c:choose>

【周遊1】c:forEach

例子:

<c:forEach begin="1" end="5" step="1">

a<br>  

</c:forEach>

【周遊2】c:fortokens

例子:

<c:forTokens items="a,b,c" delims="," var="f">

${f }<br>

</c:forTokens>

【處理異常】c:catch

例子:

<c:catch var="e">

   <%

   Integer.parseInt("sss");

   %>

</c:catch>

【引入相應的頁面】c:import

例子:<c:import url="http://localhost:8080/struts-taglib/index.jsp"/>

【指定url】c:url 【如有參數,指定傳遞的參數】c:param

例子:

<c:url value="http://localhost:8080/struts-taglib/index.jsp" var="turl">

<c:param name="id" value="01" />

<c:param name="name" value="linzhang"/>

</c:url>

繼續閱讀