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