使用JavaServer Pages2.0開發Web應用<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者
·JSP2.0
JSP2.0對比於JSP1.2來說,提供了一些有趣的新特點,從而使得Web應用設計人員和開發人員的生活更簡單。JSP2.0的目標是讓JSP更容易使用,更重要的是使用它而不需要學習Java語言。通過加入SimpleTag的新的擴展機制,JSP2.0簡化了標記(Tag)APIs。
另外,還有一些其他的改進,以下是JSP2.0引入的新的關鍵特徵。
1. 簡單的表示語言EL(Expression Language),它的使用簡化了JSP中的數據訪問。它簡化了基於JSP的Web應用的代碼書寫,可以不再使用傳統的Java腳本和Java表達式了。
2. 定義可重用的定製行爲的新句法,由開發者和頁面人員在.tag和.tagx文件中描述。
3. XML句法也有實質的進步,加入了新的標準文件名擴展(標記文件.tagx和JSP文件.jspx)
本文將重點講述EL、簡易的標記API、和標記文件。我相信現有的JSP開發者將發現這些新特性十分有趣和實用。
·爲什麼從 1.2跳到2.0
原本JSR152中列出的版本爲1.3。然而加入的這些新特性將對JSP應用的開發模型產生深遠的影響,所以專家組覺得只要將主版本號升爲2才能更適當的反映這些影響。當然新的版本號也有利於吸引開發者注意新特性。而且新的2.0與原有的1.2版本完全兼容,不會影響原有的應用。
·讓我們開始吧!
爲了使用JSP2.0,你需要支持JSP2.0和Servlet2.4的JSP容器。Jakarta Tomcat5.0支持新的JSP2.0和Servlet2.4,可以下載Tomcat或者jwsdp1.2。
·JSP表示語言(EL)
表示語言(EL)是爲頁面人員設計,它將JSP作用域屬性提升成爲商務邏輯和JSP頁信息交流的標準方式。注意,雖然EL是JSP2.0的關鍵方面,但它不是通常意義的編程語言,它只是簡單的數據訪問語言,它的出現是爲了方便繞過腳本語言和請求時的表達式的值而訪問應用的數據。JSP2.0以前,頁面人員必須使用表達式<%=aName%>訪問系統的數據,就象下面的例子:
<someTags:aTag attribute="<%= pageContext.getAttribute("aName") %>">
或者JavaBean中的數據
<%= aCustomer.getAddress().getCountry() %>
表示語言允許頁面人員使用簡易句法訪問對象。例如,獲得一個簡單變量的值,你可以使用
<someTags:aTag attribute="${aName}">
而獲取JavaBean中的屬性值,你將使用語句 ${aCustomer.address.country}
·訪問應用數據
你可以使用三種形式訪問應用數據:對象的屬性、使用”.”操作符或者使用括號“[名稱]”形式的數組元素。表達式${data}代表作用域變量data。你可以通過使用句點”.”或者是括號”[]”操作符從聚集中獲取屬性。
1. 句點操作符用於獲取命名的屬性。例如表達式${customer.name}表示customer域內的name屬性。
2. 括號操作符也可以用來獲取命名的屬性,例如${customer[“name”]}。它還可以通過索引訪問屬性,${customer[0]}表示customer集合中的第一個元素。
表示語言將句點和括號統一對待。因此,${customer.name}和${customer[“name]”}意義相同。誠然所有的EL都使用${和}。EL使用PageContext.findAttribute(String)查詢屬性,如果屬性不存在,則返回空值(null)。
·操作符
EL支持算術、關係和邏輯操作符,另外還有一個特殊的操作符用來判斷對象是否爲空。操作符在表1中列出。你可以使用empty操作符確定是否一個聚集或字符串爲空或null。例如,${empty param.name}爲真僅當名爲param的請求參數不存在。Empty操作符可以和”!”聯合使用,象${!empty param.name}爲真如果param存在時。
表 1:EL操作符
操作符
描述
+
加
-
減
*
乘
/
or div
除
%
or mod
模除(求餘)
==
or =
等於
!=
or !=
不等於
<
or lt
小於
>
or gt
大於
<=
or le
不大於
>=
or ge
不小於
&&
or and
邏輯與
||
or or
邏輯或
!
or not
邏輯非
empty
檢查爲空否
a ? b : c
條件語句
·隱含對象
除開操作符,EL還定義了一系列隱含對象以支持應用數據的訪問。隱含對象定義如表2所式
表 2:EL提供的隱含對象
隱含對象
內容
applicationScope
應用域變量集合
cookie
所有cookies的集合
header
HTTP請求頭的字符串
headerValues
HTTP請求頭的字符串集合
initParam
應用初始參數集合
pageContext
javax.servlet.jsp.PageContext
對象
pageScope
頁面域變量集合
param
請求參數的字符串
paramValues
請求參數的字符串
requestScope
請求域對象的集合
sessionScope
會話域對象的集合
·EL示例
Web頁面人員可以在不瞭解Java的基礎上使用EL開發。
添表的例子
隱含對象,$param[var]可以被用於讀取表中的數據。見form.jsp代碼
Code Sample 1: form.jsp
在這個例子中,當用戶輸入姓名並單擊按鈕”Submit Name”時,輸入的姓名會在相同的頁面顯示。
·開發和使用函數(function)
EL允許你定義在表達式中調用的函數。函數必須在public class中定義爲public static方法。一旦函數被開發了,它的簽名必須在標記庫描述符(TLD)中映射。爲了說明函數的用法,我使用了簡單的加法例子。首先,我寫一段實現加法功能的Java代碼,示例二顯示了這個功能。
Code Sample 2: Compute.java
一旦javac編譯通過,下一步就是在TLD中映射函數簽名。示例三說明了如何做。
Code Sample 4: Function Descriptor
現在,我們可以寫JSP頁面代碼使用這個功能了。示例四顯示一個表格,用戶輸入兩個數並單擊Add Numbers按鈕,則功能Add被調用,結果顯示在同一頁上。
Code Sample 4: math.jsp
·標記處理器
JSP1.2中的標記處理器APIs因爲腳本在標記體中的使用而很複雜。隨着EL的出現,現在開發無腳本的JSP頁面成爲可能。出於這個目的,JSP2.0引入了被稱爲簡單標記擴展的新型的標記擴展機制,它可以通過兩步使用。
1. Java開發者:通過定義實現javax.servlet.jsp.tagext.SimpleTag接口的類。
2. 不瞭解Java的頁面作者:通過使用標記文件。
這裏有一個例子。代碼示例5介紹了一個輸出This is my first tag!信息的簡單標記處理器。
Code Sample 5: HelloTag.java
一旦通過編譯,下一步是在TLD中定義標記描述符。
Code Sample 6: Tag Descriptor
最後,可以在JSP中使用我剛開發的這個標記。
Code Sample 7: helloworld.jsp
·標記文件
使用簡單標記擴展機制的另一種方法是通過使用標記文件。標記文件是一種原文件,它爲頁面作者提供了一種用來抽象化JSP代碼段並通過定製行爲(Custome Action)使這段代碼可重用的方法。換句話說,標記文件允許JSP頁面作者使用JSP句法創建可重用的標記庫。標記文件所要求的文件擴展名是.tag。爲了說明它有多容易,考慮示例8中的代碼。
Code Sample 8: greetings.tag
創建了標記文件後,你可以使用這個定製行爲書寫JSP頁面。作爲示例,看看代碼9所式的JSP。
Code Sample 9: chat.jsp
另一個標記文件例子
標記文件可以被用作模板(template)。考慮代碼10描述的標記文件,display.tag。這個例子是從Tomcat5.0自帶的Panel例子擴展來的。Attribute指令與TLD中的<attribute>元素類似;它用來定義定製行爲的屬性。
Code Sample 10: display.tag
代碼示例11說明一個簡單的JSP頁面如何使用display標記。
Code Sample 11: newsportal.jsp
運行這個例子:
1. 將display.tag文件拷貝到<TOMCAT_HOME>/webapps/jsp-examples/WEB-INF/tag目錄下。
2. 將newsportal.jsp保存在<TOMCAT_HOME>/webapps/jsp-examples/jsp2-tutorial目錄下。
3. 啓動tomcat服務器並在瀏覽器中請求newsportal.jsp頁
現在,你應該在瀏覽器中看見如下顯示
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
Figure 使用標記文件作爲模板
·結論
JSP2.0使得動態Web頁較之從前開發更快速,維護更簡單。雖然JSP2.0中存在Java一詞,但實際上頁面作者可以完全不用學習Java語言開發出全新的動態網頁。上述的例子說明了使用JSP2.0的新特性開發動態網頁是多麼的簡單。
更多信息
Fast Track JSP 1.2JavaServer Pages Technology
JavaServer Pages Specification (JSR 152)
The Tomcat 5 Servlet/JSP Container
JSP Developers Forum
JavaServer Pages Standard Tag Library (JSTL)
Faster Development with JavaServer Pages Standard Tag Library (JSTL 1.0)