週二聽完黃sir講完EL和JSTL,把以前寫的代碼用EL和JSTL改了一下,發現確實效率一下子提高了很多,而且不會那麼繁瑣。下面是自己收集的一些資料。
通過 scriptlet 實現條件內容
<% if (user.getRole() == "member")) { %> <p>Welcome, member!</p> <% } else { %> <p>Welcome, guest!</p> <% } %> |
修正此類問題通常需要相當豐富的編程經驗。儘管通常會由十分精通頁面佈局和圖形設計的設計人員來開發和維護 JSP,但是同一頁面中的腳本編制元素出現問題時,需要程序員的介入。這種狀況將單個文件中代碼的責任分擔給多人,因而使得開發、調試和增強此類 JSP 頁面成爲很麻煩的任務。通過將常用功能包裝到定製標記庫的標準集合中,JSTL 使 JSP 作者可以減少對編制腳本元素的需求,甚至可以不需要它們,並避免了相關的維護成本。
合併 <c:set> 和 <c:out> 以提供缺省變量值
<c:choose><c:when test="${user.role == 'member'}"> <p>Welcome, member!</p> </c:when><c:otherwise> <p>Welcome, guest!</p> </c:otherwise></c:choose> |
通過提供大多數 Web 應用程序常用功能的標準實現,JSTL 有助於加速開發週期。與 EL 結合起來,JSTL 可以不需要對表示層程序編寫代碼,這極大地簡化了 JSP 應用程序的維護。
JSTL簡介
JSTL是一個不斷完善的開放源代碼的JSP標籤庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規範的容器上,如tomcat 4.x。但是在即將推出的JSP 2.0中是作爲標準支持的。
JSTL簡介
JSTL是一個不斷完善的開放源代碼的JSP標籤庫,是由apache的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規範的容器上,如tomcat 4.x。但是在即將推出的JSP 2.0中是作爲標準支持的。
JSTL包含兩個部分:標籤庫和EL(Expression Language表達式語言)語言。標籤庫目前支持四種標籤:
標籤 URL
前綴 示例
Core http://java.sun.com/jstl/core c <c:tagname
...>
XML http://java.sun.com/jstl/xml x <x:tagname ...>
formatting http://java.sun.com/jstl/fmt fmt <fmt:tagname ...>
(SQL) http://java.sun.com/jstl/sql sql <sql:tagname ...>
流控制標籤
<c:if test="">
|
<c:choose> <c:when test=""> user.generous is true. </c:when> <c:when test=""> user.stingy is true. </c:when> <c:otherwise> user.generous and user.stingy are false. </c:otherwise> </c:choose> |
由於JSTL沒有形如if (){…} else {…}的條件語句,所以這種形式的語句只能用<c:choose>、<c:when>和<c:otherwise>標籤共同來完成了。
循環控制標籤
<c:forEach>
<c:forEach>標籤用於通用數據,它有以下屬性
屬 性 | 描 述 | 是否必須 | 缺省值 |
items | 進行循環的項目 | 否 | 無 |
begin | 開始條件 | 否 | 0 |
end | 結束條件 | 否 | 集合中的最後一個項目 |
step | 步長 | 否 | 1 |
var | 代表當前項目的變量名 | 否 | 無 |
varStatus | 顯示循環狀態的變量 | 否 | 無 |
例子:
<c:forEach items="" var="vector"> <c:out value=""/> </c:forEach> |
相當於java語句
for (int i=0;i<vectors.size();i++) { out.println(vectors.get(i)); } |
在這裏vectors是一個java.util.Vector對象,裏面存放的是String數據,vector是當前循環條件下String對象。實際上這裏的vectors可以是任何實現了java.util. Collection接口的對象。
JSTL的優點 1、在應用程序服務器之間提供了一致的接口,最大程序地提高了WEB應用在各應用服務器之間的移植。 2、 簡化了JSP和WEB應用程序的開發。 3、以一種統一的方式減少了JSP中的scriptlet代碼數量,可以達到沒有任何scriptlet代碼的程序。在我們公司的項目中是不允許有任何的scriptlet代碼出現在JSP中。 4、 允許JSP設計工具與WEB應用程序開發的進一步集成。相信不久就會有支持JSTL的IDE開發工具出現。 <c:forEach begin="0" end="100" var="i" step="1"> count=<c:out value=""/><br> </c:forEach> |
輸出:
count=0
...
count=100
<c:forTokens>
<c:forTokens>標籤有以下屬性
屬 性 | 描 述 | 是否必須 | 缺省值 |
items | 進行循環的項目 | 是 | 無 |
delims | 分割符 | 是 | 無 |
begin | 開始條件 | 否 | 0 |
end | 結束條件 | 否 | 集合中的最後一個項目 |
step | 步長 | 否 | 1 |
var | 代表當前項目的變量名 | 否 | 無 |
varStatus | 顯示循環狀態的變量 | 否 | 無 |
例子
<c:forTokens items="a:b:c:d" delims=":" var="token"> <c:out value=""/> </c:forTokens> |
這個標籤的使用相當於java.util.StringTokenizer類。在這裏將字符串a:b:c:d以:分開循環四次,token是循環到當前分割到的字符串。
參考資料
1、 http://java.sun.com/products/jsp/jstl/
sun公司的JSTL站點
2、
http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
jakarta小組的JSTL站點
3、 http://www.manning.com/bayern/appendixA.pdf
JSTL的參考文檔,本文很多內容都是從這個PDF文件裏翻譯的。
4、 <<J2EE編程指南(1.3版)>>
介紹了JSTL的雛形,wrox的書都是精品。