Servlet&JSP的那些事兒(十八)

來源:互聯網
上載者:User

jsp提供了自訂標籤的功能,擴充了jsp對標籤的處理能力,方便了開發人員開發。不過由於不同的開發人員對於同一功能可能定義了不同的標籤,這使得自訂標籤變得隨意。由於在web開發中很多功能都是開發人員所共用的,所以定義一套標準的標籤庫供開發人員使用無疑能提高開發效率。這就是JSTL(JavaServer Pages Standard Tag Library,JSTL)的由來。本篇主要介紹JSTL。

對於JSTL的簡介在此就不再贅述了,有興趣可以百度或Google即可。

如果要使用JSTL,則必須將jstl.jar和 standard.jar檔案放到classpath中,如果你還需要使用XML processing及Database access (SQL)標籤,還要將相關JAR檔案放到classpath中,這些JAR檔案全部存在於下載回來的zip檔案中。這個zip檔案可以從http://tomcat.apache.org/taglibs/standard/下載。

JSTL標籤庫分為五類,分別為JSTL核心標籤庫,資料庫標籤庫,I18N格式化標籤庫,xml標籤庫和JSTL函數標籤庫。

JSTL核心標籤庫

核心標籤庫主要包括了一般用途的標籤,條件標籤,迭代標籤和URL相關的標籤。在jsp頁面要使用核心標籤庫,必須使用<%@taglib%>指令指定核心標籤,代碼如下:

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

<c:set>標籤

jstl提供了方便定義變數的標籤<c:set>,能夠將變數儲存在jsp範圍中或javabean屬性中。其文法格式分為如下五種:

1)指定變數名和變數值,不指定scope(範圍)

<c:set var="username" value="value"></c:set>

2)將value的值儲存到範圍為scope的變數中。

<c:set var="username" value="value" scope="page|request|session|application"></c:set>

3)將本體內容的資料存放區至範圍為scope的變數中。

<c:set var="username" scope="page|request|session|application">本體內容</c:set>

4)將value值儲存到target對象的屬性中。

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

5)將本體內容的資料存放區到target對象的屬性中。

<c:set target="target" property="propertyName">本體內容</c:set>

<c:out>標籤

<c:out>用來顯示資料的內容,類似於<%=%>,但是功能更加強大。使用它輸出內容比使用scriptlets代碼要更加簡單,方便頁面維護。它的文法格式分為以下四種。

1)通過在<c:out>中的value屬性指定需要顯示的值。

<c:out value="value"/>

2)通過escapeXml屬性設定是否將value中的值按照原樣輸出。因為<c:out>預設會將<,>,',",&轉換成&lt;,&gt;,&#039;,&#034;和&amp;。如果不想轉換,只需將escapeXml屬性設定為"false"。

<c:out value="value" escapeXml="true|false" />

3)通過default屬性來指定預設值。如果value的值為null,則顯示default的值。

<c:out value="value" default="no data" />

4)通過本體內容來指定預設值。如果value值為null,則顯示本體內容。

<c:out value="value" >本體內容</c:out>

<c:remove>標籤
<c:remove>標籤用來一處指定範圍的變數。其文法格式如下:

<c:remove var="number" scope="session" />

var屬性指定待刪除的變數名稱,scop屬性是可選的,用來指定變數範圍,預設為page。

<c:if>標籤

<c:if>標籤用來執行流程式控制制,其功能和java語言中的if完全相同。它有兩種文法格式,一種沒有本體內容,一種有本體內容。

1)沒有本體內容的<c:if>標籤格式如下:

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

其中test屬性必須填寫,表示進行判斷的運算式。屬性var定義變數,該變數存放判斷後的結果。scope表示var定義變數的儲存範圍。

2)有本體內容的<c:if>標籤格式如下:

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

當test中運算式的結果為true時,執行本體內容。否則,不執行本體內容。

<c:choose>、<c:when>、<c:otherwise>標籤

<c:if>標籤只能判斷一個運算式,而且無法指定運算式不成立執行的語句。JSTL也提供了類似於if...else...的語句<c:choose>標籤。
<c:choose>標籤本身只能當<c:when>和<c:otherwise>標籤的父標籤。其中可以由一個或多個<c:when>標籤,有0或多個<c:otherwise>標籤。其文法格式如下:

<c:choose>    ....    <c:when test="testCondition"></c:when>    ....    <c:otherwise></c:otherwise></c:choose>

<c:forEach>標籤

<c:forEach>標籤有兩種文法格式,一種用來遍曆集合對象的成員,一種用來使語句迴圈執行指定次數。

1)<c:forEach>遍曆結合對象成員,文法格式如下:

<c:forEach var="varName" items="collection" varStatus="varStatusName" begin="begin" end="end" step="step">本體內容</c:forEach>

其中var用來存放現在指到的成員。items指被迭代的集合對象。varStatus用來存放現在指到的相關成員的資訊。begin表示開始位置(預設為0),end表示結束位置,step表示步長(預設為1)。

2)<c:forEach>指定語句執行次數,其文法格式如下。

<c:forEach var="varName" varStatus="varStatusName" begin="begin" end="end" step="step">本體內容</c:forEach>

<c:forTokens>標籤

<c:forTokens>標籤用來根據指定分隔字元分割字串。其文法格式如下。

<c:forTokens var="varName"  items="stringOfTokens"  delims="delimiters" varStatus="varStatusName" begin="begin" end="end" step="step">本體內容</c:forTokens>

其中,var,varStatus,begin,end,step屬性和<c:forEach>標籤中用法一樣。items屬性工作表示被分割的字串,delims屬性指定分隔字元。

<c:import>標籤

<c:import>標籤可以把其他靜態或動態檔案包含到本身的jsp網頁中。它和jsp動作指令<jsp:include>最大的差別在於:<jsp:include>只能包含和自己在同一個web application下的檔案,而<c:import>還可以包含不同web application或者其他網站的檔案。其文法格式如下:

<c:import url="url" context="context" var="varName" scope="page|request|session|application" charEncoding="charEncoding">本體內容</c:import>

或者,資源內容作為Reader對象被匯入。格式如下:

<c:import url="url" context="context" varReader="varReaderName" charEncoding="charEncoding">本體內容</c:import>

<c:param>標籤

<c:param>標籤用來傳遞參數,它包含兩個屬性name和value。其文法格式如下:

<c:param name="參數名" value="參數值" />

<c:url>標籤

<c:url>標籤使用正確的url重寫規則構造一個url。其文法格式如下:

<c:url value="expression" context="expression" var="name" scope="scope">  <c:param name="expression" value="expression"/>  ...</c:url>

value 屬性用來指定基本 URL,然後在必要時標記對其進行轉換。如果這個基本 URL 以一個斜杠開始,那麼會在它前面加上 servlet 的上下文名稱。可以使用 context 屬性提供顯式的上下文名稱。如果省略該屬性,那麼就使用當前 servlet 內容相關的名稱。這一點特別有用,因為 servlet 上下文名稱是在部署期間而不是開發期間決定的。(如果這個基本 URL 不是以斜杠開始的,那麼就認為它是一個相對 URL,這時就不必添加上下文名稱。) 
如果通過嵌套 <c:param> 標記指定了任何請求參數,那麼將會使用 HTTP GET 請求的標準標記法將它們的名稱和值添加到產生的 URL 後面。此外,還進行 URL 編碼:為了產生有效 URL,將對這些參數的名稱或值中出現的任何字元適當地進行轉換。
<c:redirect>標籤

<c:redirect>標籤將用戶端的請求重新導向到另一個資源。其文法格式如下:

<c:redirect url="expression" context="expression">  <c:param name="expression" value="expression"/>  ...</c:redirect>

<c:redirect>用於向使用者的瀏覽器發送 HTTP 重新導向響應,它是 JSTL 中與 javax.servlet.http.HttpServletResponse 的 sendRedirect() 方法功能相當的標記。 

轉載請註明出處:http://blog.csdn.net/iAm333

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.