JSTL(JavaServer Pages Standard Tag Library,JSP标準标簽庫)是一個不斷完善的開放源代碼的JSP标簽庫,是由apache的jakarta小組來維護的。jstl是apache對EL表達式的擴充(也就是說JSTL依賴EL),JSTL是标簽語言,是以JSTL标簽使用以來非常友善,它與JSP動作标簽一樣,隻不過它不是JSP内置的标簽,需要我們自己導包,以及指定标簽庫而已。JSTL隻能運作在支援JSP1.2和Servlet2.3規範的容器上,如tomcat 4.x。在JSP 2.0中也是作為标準支援的。
JSTL 1.0 釋出于 2002 年 6 月,由四個定制标記庫(core、format、xml 和 sql)和一對通用标記庫驗證器(ScriptFreeTLV 和 PermittedTaglibsTLV)組成。core 标記庫提供了定制操作,通過限制了作用域的變量管理資料,以及執行頁面内容的疊代和條件操作。它還提供了用來生成和操作 URL 的标記。顧名思義,format 标記庫定義了用來格式化資料(尤其是數字和日期)的操作。它還支援使用本地化資源束進行 JSP 頁面的國際化。xml 庫包含一些标記,這些标記用來操作通過 XML 表示的資料,而 sql 庫定義了用來查詢關系資料庫的操作。
如果要使用JSTL,則必須将jstl.jar和 standard.jar檔案放到classpath中,如果你還需要使用XML processing及Database access (SQL)标簽,還要将相關JAR檔案放到classpath中,這些JAR檔案全部存在于下載下傳回來的zip檔案中。
使用JSTL标簽+EL表達式+少許jsp内置标簽,在開發jsp時就幾乎看不到實質上的java代碼了,使得代碼變得更簡潔,可讀性更高,這些标簽和表達式就是為此創造的。
<br>
1.maven工程配置以下依賴:
2.需要使用taglib指令在JSP頁面中導入JSTL的标簽庫:
prefix="c":指定标簽庫的字首,這個字首可以自定義,但通常都會在使用core标簽庫時指定字首為c
完成以上操作後,就可以使用JSTL标簽了。
1.set标簽,set标簽是用于給對象屬性設定值的:
通路http://localhost:8080/JSTL-test/index.jsp ,輸出結果如下:
request session application page
在jsp的内置對象中,set标簽隻能設定這四個對象的屬性值。
可以結合EL表達式進行指派:
lisi lisi+123
除了可以設定内置對象的屬性值外,可以設定執行個體對象中的屬性值,示例:
Student代碼如下:
index.jsp代碼如下:
李四
2.out标簽,顯而易見,out是用來輸出資料的:
lisi 123456abcdef
out标簽主要的用途是過濾标記的,預設out會對标簽的尖括号進行轉換,将 < 轉換成 <code>&lt;</code> ,将 > 轉換成 <code>&gt;</code> 。如下:
<hr><hr>
如果不需要進行轉換,把out标簽中的escapeXml屬性值設定為false即可,但是建議不要設定為false。
out标簽中有一個default屬性,可以設定一個預設輸出的值,如果沒有輸出的資料,就會預設輸出default中定義的内容:
3.remove标簽,此标簽用于删除對象中的屬性,和removeAttribute方法的功能是一樣的:
該屬性不存在!
4.catch标簽,這個标簽是用于捕獲異常的,把可能發生異常的代碼寫在catch标簽内,并且設定var屬性的值,當發生異常時,可以在var屬性值中得知異常的名稱:
java.lang.ArithmeticException: / by zero
5.if标簽,和if判斷語句是一樣的,是以很常用,判斷條件寫在test屬性中,也就是說test屬性的值隻能是true或false,我們可以通過EL表達式來産生這個值:
zero zero
6.choose标簽,這是類似于switch的一種可以實作多個條件判斷的标簽,它需要配合 c:when 和 c:otherwise 使用,每個 c:when 都是一個判斷條件,類似于case。如果沒有比對到相應的條件就會執行 c:otherwise 裡的代碼,類似于default,如下:
zero
7.forEach标簽,看名字也就知道了,這和平時java代碼中的for each是一樣的,不過這個标簽還可以用出 for(int i=0;i<=10;i++){} 這種語句的效果:
1.周遊一個集合(for each):
<a href="mailto:br/%[email protected]%3Cbr/"></a> <a href="mailto:br/%[email protected]%3Cbr/"></a> <a href="mailto:br/%[email protected]%3Cbr/"></a>
<a href="mailto:br/%[email protected]%3Cbr/">2.類似于普通for循環的用法:</a>
<a href="mailto:br/%[email protected]%3Cbr/">通路http://localhost:8080/JSTL-test/index.jsp ,輸出結果如下:</a>
<a href="mailto:br/%[email protected]%3Cbr/">01 2 3 4 5 6 7 8 9 10</a>
<a href="mailto:br/%[email protected]%3Cbr/">3.forEach标簽中有一個step屬性,這個屬性用于設定每一次循環的步長,例如我要輸出2-20之間的偶數:</a>
<a href="mailto:br/%[email protected]%3Cbr/">2 4 6 8 10 12 14 16 18 20</a>
<a href="mailto:br/%[email protected]%3Cbr/">4.forEach标簽中還有一個varStatus屬性,這個屬性的值代表循環狀态的變量名稱,而且這個變量名稱還有以下幾個屬性: count:int類型,目前以周遊元素的個數; index:int類型,目前元素的下标; first:boolean類型,是否為第一個元素; last:boolean類型,是否為最後一個元素; current:Object類型,表示目前對象。</a>
<a href="mailto:br/%[email protected]%3Cbr/">示例:</a>
<a href="mailto:br/%[email protected]%3Cbr/">第一個元素 1: 小明 1: [email protected] 1: 15 目前對象:org.zero01.test.Student@3f7a889e; 下标為:0</a> <a href="mailto:br/%[email protected]%3Cbr/">2: 小紅 2: [email protected] 2: 14 目前對象:org.zero01.test.Student@7d8f4532; 下标為:1</a> <a href="mailto:br/%[email protected]%3Cbr/">3: 李四 3: [email protected] 3: 16 目前對象:org.zero01.test.Student@4f12267a; 下标為:2 最後一個元素</a>
<a href="mailto:br/%[email protected]%3Cbr/">8.forTokens标簽,這個标簽也是循環的作用,而且屬性基本上和forEach标簽一樣,隻不過forTokens标簽多了一個delims屬性,這個屬性用于定義分割符,将分割後的元素進行周遊。在這個forTokens标簽中delims屬性和items屬性都是必須有的,示例:</a>
<a href="mailto:br/%[email protected]%3Cbr/">你好 Hello Bonjour Hallo Ciao こんにちは Γειάσου Hola</a>
<a href="mailto:br/%[email protected]%3Cbr/"><br></a>
<a href="mailto:br/%[email protected]%3Cbr/">9.fmt标簽庫,fmt是一個用來格式化資料的标簽庫,例如該标簽庫最常用的 f:formatDate 标簽可以用來格式化日期格式,導入這個标簽庫的語句:</a>
<a href="mailto:br/%[email protected]%3Cbr/">f:formatDate 标簽使用示例:</a>
<a href="mailto:br/%[email protected]%3Cbr/">2017-12-21 10:55:10 星期四</a>
<a href="mailto:br/%[email protected]%3Cbr/">f:formatNumber 标簽可以用來格式化數字,示例:</a>
<a href="mailto:br/%[email protected]%3Cbr/">3.50 4.4</a>
<a href="mailto:br/%[email protected]%3Cbr/">常用的JSTL标簽就介紹到這,到目前為止,使用JSTL+EL+少量的jsp内置标簽後,在jsp開發中就基本看不到實質上的java代碼了。整個畫風也整潔了很多,代碼也減少了,JSTL、EL、jsp内置标簽就是為了實作這個效果而創造的。</a>
本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/2053618,如需轉載請自行聯系原作者