JSTL 屬性



JSTL 是一個不斷完善的開放源碼的JSP標籤庫,由apache的jakarta小組來維護的。它只能運行在支持JSP1.2和Servlet2.3規範的容器 上。

它包含兩部分:標籤庫表達式語言(Expression Language,EL) 。標籤庫目前支持如下4種標籤:
Core---- 支持JSP中的一些基本的操作。前綴是c,可以參照http://java.sun.com/jstl/core
XML processing----支持xml文檔的處理。前綴是x,可以參照http://java.sun.com/jstl/xml
I18N capable formatting----支持對JSP頁面的國際化。前綴是fmt,可以參照http://java.sun.com/jstl/fmt
Database access(SQL)----支持JSP對數據庫的操作。前綴是sql,可以參照http://java.sun.com/jstl/sql

表達式語言
表達式語言(EL語言)是JSTL輸出(輸入)一個java表達式的表示形式。在JSTL中,EL語言只能在屬性中使用,只能通過建
立表達式${exp1}來進行調用。一共有三種方式
1、value屬性包含一個表達式

<some:tag value="${expr}" />
說明:此種情況表達式將被計算出來並且根據類型轉換規則賦值給value屬性。

例如:

<c:out value="${username}" />
這裏的${username}就是一個EL,它就相當於JSP語句:
<%=request.getAttribute("username")%>
或者
<%=session.getAttribute("username")%>

2、value屬性包含一個或多個屬性,這些屬性被文本分割或圍繞。

<some:tag value="some${expr}${expr}text${expr}" />
說明:這種情況,表達式從左到右進行計算,並將結果轉換爲字符串型(根據類型轉換規則),同時將結果賦值給value屬
性。

3、value屬性僅僅包含文本。

<some:tag value="some text" />
說明:這種情況,字符串型屬性value將根據類型轉換規則轉換爲標籤所希望的類型。
EL 語言的運算符
有兩種,第一種是使用“.”來獲得有名字的屬性。第二種是使用“[]”來獲得有名字或者按數字排列的屬性。
例子:

${user.username}或者${user["username"]},兩種意義相同。
empty 運算符
用來檢查對象、集合或字符串變量是否爲空或者null。
例子:

${empty param.username}
說明:如果request的參數列表中的username的值爲null,則表達式的值爲true。EL語言也可以直接使用表較運算符與 null
進行比較,
如,${param.firstname == null}。
比較運算符

==或eq-----相等檢查
!=或ne-----不等檢查
<或lt-----小於檢查
>或 gt-----大於檢查
<=或le-----小於等於檢查
>=或ge-----大於等於檢查
數字運算符與邏輯運算符均與java語言相同。
Core 標籤庫
它提供用於條件邏輯、循環檢查、輸出、變量創建、文本導入以及URL處理的標籤。
1、通用標籤
c:out標籤---用於顯示數據
它共有三個屬性:

value----輸出信息,可以使EL表達式或常量,是個必須有的屬性。
default----value爲空時顯示的信息
escapeXml---- 爲true時避開特殊的xml字符集

實例如下:

<c:out value="${user.username}" default="guest" />
說明:顯示用戶的用戶名,如果爲空則顯示guest。
<c:out value="${sessionScope.username}" />
說明:指定從session中獲取username的值顯示。
<c:out value="${username}" />
說明:顯示username的值,默認是從request(page)中取,如果request中沒有就從session中取,如果 session中沒有那麼就

application(ServletContext)中取,如果都沒有就不顯示。
c:set標籤---用於保存數據
它共有五個屬性:

value----輸出信息,可以使EL表達式或常量
target----需要修改屬性的變量名,一般是JavaBean的實 例
property----需要修改的JavaBean屬性,如果target指定了,這個必須指定
var----需要保存信息的變量
scope---- 保存信息變量的範圍

實例如下:

<c:set value="${test.testinfo}" var="test2" scope="session" />
說明:將test.testinfo的值保存到session的test2中。
<c:set target="${cust.address}" property="city" value="${newcity}" />
說明:將對象cust.address的city屬性保存到newcity中。
c:remove標籤---用於刪除數據
它共有兩個屬性:

var----需要保存信息的變量,這個是必須指定的
scope----保存信息變量的範圍

實例如下:

<c:remove var="test2" scope="session" />
說明:從session中刪除test2變量。
2、流程控制標籤
c:if標籤---用於條件控制
它共有三個屬性:

test----需要評價的條件,相當於if中的條件,是個必須指定的
var----需要保存結果的變量名
scope---- 保存條件結果的變量範圍

c:choose標籤
沒有屬性
c:when標籤---也是用於條件控制的
它就一個屬性:

test----需要評價的條件,是個必須指定的

c:otherwise標籤
也沒有屬性
實例如下:

<c:if test="${user.wealthy}">
user.wealthy is true.
</c:if>
說明:如果user.wealthy的值爲true,則顯示“user.wealthy is true.”。
<c:choose>
    <c:when test="${user.generous}">
      user.generous is true.
    </c:when>
    <c:when test="${user.stringy}">
      user.stringy is true.
    </c:when>
    <c:otherwise>
      user.generous and user.stringy are false.
    </c:otherwise>
</c:choose>
說明:如果user.generous的值爲true,則顯示“user.generous is true.”;
如果 user.stringy的值爲true,則顯示“user.stringy is true.”;
其他所有情況(即user.generous 的值跟user.stringy的值都不爲true)全部顯示“user.generous and user.stringy are
false.”。

注意:JSTL中沒有形如if...else...的條件語句,所以只能用,和標籤來共同完成。

3、循環控制標籤
c:forEach標籤---用於通用數據
它共有六個屬性:

items----進行循環的項目
begin----開始條件,默認值是0
end----結束條件,默認值是集合中的 最後一個項目
step----步長,默認值是1
var----代表當前項目的變量名
varStatus----顯示循環狀態的變 量

實例如下:

<c:forEach items="${vectors}" var="vector">
<c:out value="${vector}"/>
</c:forEach>

上面的等價於:

for(int i=0;i<vectors.size();i++){
    out.println(vectors.get(i));
}
說明:上面的vectors是個java.util.Vector對象,裏面存放的是String數據,vector是當前循環條件下的 String對象。
vectors可以替換
成任意的實現了java.util.Collection接口的對象。
<c:forEach begin="1" end="10" step="1" var="i">
count=<c:out value="${i}"/><br>
</c:forEach>
輸出結果:
count=0
count=1
.....
count=10

c:forTokens標籤
它的屬性就比forEach多了一個,而且items也是必須的屬性:

delims---分割符,是個必須的屬性

實例如下:

<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value="${token}"/>
</forTokens>
說明:這個標籤的作用相當於java.util.StringTokenizer類。上例是將字串以":"分割循環4次,token是循環到當 前分割到
的字符串。
4、導入文件和URL
JSTL核心標籤庫支持使用來包含文件,使用來打印和格式化URL,使用來重定向URL。
c:import標籤---將另一個頁面的代碼包含到當前頁面中。
它共有七個屬性:

url----需要導入頁面的url,是個必須的屬性
context----/後跟本地Web應用程序的名字,默認是當前應用 程序
charEncoding----用於導入數據的字符集,默認是ISO-8859-1
var----接受導入文本的變量名,默認是 page
scope----接受導入文本的變量的範圍
varReader----接受導入文本的java.io.Reader變量名
varStatus---- 顯示循環狀態的變量

c:url標籤---輸出一個url地址
它共有五個屬性:

url----url地址,是個必須的屬性
context----/後跟本地Web應用程序的名字,默認是當前應用程序
charEncoding---- 用於導入數據的字符集,默認是ISO-8859-1
var----接受處理過的url變量名,該變量存儲url,默認是輸出到頁
scope---- 存儲url的變量名的範圍,默認是page

實例如下:

<c:import url="http://www.abc.com/abc.js " var="newsfeed" />
說明:將url爲http://www.abc.com/abc.js 的 文件包含到當前頁的當前位置,並將url保存在newsfeed中。
<c:url url="/index.jsp" />
說明:在當前頁的當前位置輸出http://www.abc.com/index.jsp,http://www.abc.com 是 當前頁所在的位置。

c:redirect標籤---將請求重定向到另一個頁面
它共有兩個屬性:

url----url地址,是個必須的屬性
context----/後跟本地Web應用程序的名字,默認是當前應用程序

實例如下:

<c:redirect url="http://www.abc.com/login.jsp " />
說明:將請求重定向到http://www.abc.com/login.jsp 頁, 相當於response.setRedirect

c:param標籤---給一個重定向或包含頁面傳遞參數。
它共有兩個屬性:

name----在request參數中設置的變量名,是個必須屬性
value----在request參數中設置的變量值

實例如下:

<c:redirect url="login.jsp">
<c:param name="id" value="abc">
</c:redirect>
說明:將參數abc以id爲名字傳遞到login.jsp頁面,相當於login.jsp?id=abc的作用。
綜上所述可總結出JSTL具有以下優點:
1、在應用服務器之間提供了一致的接口,最大程度地提高了Web應用在各應用服務器之間地可移植性。
2、簡化了JSP和Web應用程序的開發。
3、以一種統一的方式減少了JSP中scriptlet的代碼數量,可以達到沒有任何scriptlet代碼的程序。

4、允許JSP設計工具與Web應用程序開發的進一步集成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章