JSTL詳解(一)
在
JSP
頁面中,使用標簽庫代替傳統的
Java
片段語言來實現頁面的顯示邏輯已經不是新技術了,然而,由自定義標簽很容易造成重復定義和非標準的實現。鑒于此,出現了
JSTL
(
JSP Standard Tag Library
)。大多數
JSP
頁面邏輯提供了實現的
JSTL
技術,該技術本身就是一個標簽庫。
Sun
公司
Java
規范標準的
JSTL
由
apache jakarta
組織負責維護。作為開源的標準技術,它一直在不斷地完善。
JSTL
的發布包有兩個版本:
Standard-1.0 Taglib
、
Standard-1.1 Taglib
,它們在使用時是不同的。
q????????
Standard-1.0 Taglib
(
JSTL1.0
)支持
Servlet2.3
和
JSP1.2
規范,
Web
應用服務器
Tomcat4
支持這些規范,而它的發布也在
Tomcat 4.1.24
測試通過了。
q????????
Standard-1.1 Taglib
(
JSTL1.1
)支持
Servlet2.4
和
JSP2.0
規范,
Web
應用服務器
Tomcat5
支持這些規范,它的發布在
Tomcat 5.0.3
測試通過了。
在本章的介紹中,將以由
Sun
發布的
Standard-1.1 Taglib
標簽庫為主,而
apache jakarta
組織發布的開源標簽庫,可以從
http://jakarta.apache.org/taglibs/
找到所需要的幫助。
Sun
發布的標準
JSTL1.1
標簽庫有以下幾個標簽:
q????????
核心標簽庫:包含
Web
應用的常見工作,比如:循環、表達式賦值、基本輸入輸出等。
q????????
國際化標簽庫:用來格式化顯示數據的工作,比如:對不同區域的日期格式化等。
q????????
數據庫標簽庫:可以做訪問數據庫的工作。
q????????
XML
標簽庫:用來訪問
XML
文件的工作,這是
JSTL
標簽庫的一個特點。
q????????
函數標簽庫:用來讀取已經定義的某個函數。
此外,
JSTL
還提供了
EL
表達式語言(
Expression Language
)來進行輔助的工作。
JSTL
說明:在
JSTL 1.1
規范中,
JSP2.0
容器已經能夠獨立的理解任何
EL
表達式。
EL
可以獨立出現在
JSP
頁面的任何角落。本文隨后的內容將以
JSTL 1.1
規范作為介紹的重點。
9.2.1? JSTL EL
表達式語言簡介
EL
是從
JavaScript
腳本語言得到啟發的一種表達式語言,它借鑒了
JavaScript
多類型轉換無關性的特點。在使用
EL
從
scope
中得到參數時可以自動轉換類型,因此對于類型的限制更加寬松。
Web
服務器對于
request
請求參數通常會以
String
類型來發送,在得到時使用的
Java
語言腳本就應該是
request.getParameter(“XXX”)
,這樣的話,對于實際應用還必須進行強制類型轉換。而
EL
就將用戶從這種類型轉換的繁瑣工作脫離出來,允許用戶直接使用
EL
表達式取得的值,而不用關心它是什么類型。
下面的示例就是一個
EL
表達式,見例
9.1
。
例
9.1
:簡單
EL
表達式
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <body>
??? ${sampleValue + 1} <br>
? </body>
</html>
這個示例將在
JSP
頁面顯示為“
1
”,
EL
表達式必須以“
${XXX}
”來表示,其中“
XXX
”部分就是具體表達式內容,“
${}
”將這個表達式內容包含在其中作為
EL
表達式的定義。本示例可以在滿足
JSP2.0
規范的任何
Web
應用服務器中使用。
9.2.2? EL
表達式的默認變量
一個
EL
表達式包含變量和操作符兩個內容。任何存在于
JSP
作用范圍的
JavaBean
都可以被轉化成
EL
表達式來使用,它所包含的默認變量如下:
1
.默認變量
pageScope
、
requestScope
、
sessionScope
、
applicationScope
這
4
個默認變量包含
Scope
作用范圍的參數集合,相當于被保存在
java.util.Map
中的某個參數。下面看簡單的示例
9.2
:
例
9.2
:使用
sessionScope
變量的
EL
表達式
<%request.getSession().setAttribute("sampleValue", new Integer(10));%>
${sessionScope.sampleValue}
取得保存在
Session
中參數的
sessionScope
變量的
EL
表達式,“
.
”是
property
訪問操作符,在這里表示從
Session
中取得“鍵”為“
sampleValue
”的參數,并顯示出來。顯示結果為“
10
”。
2
.默認變量
param
、
paramValues
這兩個默認變量包含請求參數的集合,
param
表明請求包含的參數為單一控件,
paramValues
表明請求包含的參數為控件數組。下面看一個簡單示例
9.3
:
例
9.3
:提交請求的頁面和接受的頁面
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <body>
?
???? <form action="SampleJsp.jsp">
??? <input type="text" name="sampleValue" value="10">
??? <input type="text" name="sampleValue" value="11">
??? <input type="text" name="sampleValue" value="12">
??? <input type="text" name="sampleSingleValue" value="SingleValue">
??? <input type="submit" value="Submit">
??? </form>
? </body>
</html>
在這個頁面中定義了兩組控件,控件名為“
sampleValue
”的是一套控件數組,控件名為“
sampleSingleValue
”的是單一控件,通過遞交將請求參數傳送到
SampleJsp.jsp
。
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <body>
??? ${paramValues.sampleValue[2]} <br>
??? ${param.sampleSingleValue} <br>
? </body>
</html>
這是請求轉發到的頁面,通過
EL
表達式的
paramValues
變量得到控件數組中最后一個控件的遞交參數,通過
EL
表達式的
param
變量得到單一控件的遞交參數。控件數組參數的
EL
表達式使用“
[]
”來指定數組下標。本
3
.默認變量
header
、
headerValues
這兩個默認變量包含請求參數頭部信息的集合,
header
變量表示單一頭部信息,
headerValues
則表示數組型的頭部信息。
4
.默認變量
cookie
包含所有請求的
cookie
集合,集合中的每個對象對應
javax.servlet.http.Cookie
。
5
.默認變量
initParam
包含所有應用程序初始化參數的集合。
6
.默認變量
pageContext
等價于
page
環境類
javax.servlet.jsp.PageContext
的實例,用來提供訪問不同的請求參數。
11
個默認
posted on 2007-01-18 09:57 nbt 閱讀(4277) 評論(1) 編輯 收藏 所屬分類: Servele&JSP和js