JSP(JavaServer Pages)技術是對Servlet的進一步抽象,它由JCP(Java Community Process)開發,是用於產生動態內容的開放式的、可免費擷取的規範,也是J2EE(Java 2 Enterprise Edition)規範的重要組成部分。許多商業應用伺服器如BEA WebLogic、IBM WebSphere、Live Jrun和Orion都支援JSP技術。
從機票預訂系統、銀行系統到購物系統,Web上到處都在應用JSP技術。新發布的2.0版是對JSP1.2的升級,增加了一些有趣的新特性。JSP2的目標是使動態網頁的設計更加容易,而且無需學習Java程式設計語言。
本文內容包括:
提供具有豐富範例程式碼的教程來使你熟悉JSP2.0
介紹JSP2.0的新特性
提供利用JSP2.0開發應用程式的一些體會給出了一些範例程式碼,對這些代碼稍加修改即可用於你自己的應用程式。
如果你還不熟悉JSP,那麼直接從JSP2.0入手是一個不錯的主意。但是如果希望學習JSP1.2,也許你需要從JSP教程開始學習。
JSP 2.0
JSP 2.0是對JSP 1.2的升級,增加了幾個有趣的新特性,可以使Web應用程式設計人員和開發人員的工作更容易一些。JSP 2.0的目標是比以前更便於使用,更重要的是無須學習Java語言本身就可以使用它。它增加了一種稱為SimpleTag的新擴充機制來簡化標籤API(Tag API)。
除了其他一些改進外,JSP 2.0引入的最主要的新特性包括:
一種簡單的運算式語言(EL),能夠用來容易地從JSP頁面訪問資料,這種運算式語言簡化了基於JSP的不含指令碼的應用程式的編寫,不需要使用Java Scriptlet或者Java運算式;
用於直接使用JSP技術來定義可重用的自訂行為的新文法,該文法使用.tag和.tagx檔案,這類檔案可由開發人員或者網頁作者編寫;
3XML文法得到了實質性的改進,增加了新的標準副檔名(.tagx用於標籤檔案,.jspx用於JSP檔案)。
本文主要討論運算式語言、簡化的標籤API和標籤檔案。相信目前的JSP開發人員將會發現這些重要的特性不但有趣,而且非常有用。 為何要從1.2跨越到2.0?
在Java規格請求(JSR 152)中版本號碼最初定為1.3。但是正如你將在後面看到的那樣,由於這些新特性對JSP應用程式的開發模型產生了如此深刻的影響,專家組感到有必要把主要版本號升級到2.0,這樣才能充分反映這種影響。此外,新的版本號碼也有助於把開發人員的注意力吸引到這些有趣的新特性上來。令人欣慰的是,所有合法的JSP1.2頁面同時也是合法的JSP2.0頁面。
JSP 2.0起步
在著手學習JSP 2.0之前,你需要一個支援JSP2.0和Java Servlet 2.4規範的JSP環境。幸運的是,Jakarta Tomcat 5.0(alpha測試版)支援新的JSP2.0和Servlet 2.4規範,可以從http://jakarta.apache.org/builds/jakarta-tomcat/release/v5.0.4-alpha/下載並安裝Tomcat 5.0。
JSP運算式語言
向JSP網頁傳遞資訊是通過JSP scoped屬性和請求參數完成的。專門為網頁作者量身定做的一種運算式語言(EL)把JSP scoped屬性提升為從商務邏輯向JSP頁面傳遞資訊的標準方式。但是要注意,儘管這種運算式語言是JSP的一個重要特性,它並不是一種通用的程式語言。它僅僅是一種資料訪問語言,可以方便地訪問和處理應用程式資料,而無需使用scriptlet或者請求時(request-time)運算式的值。
在JSP2.0之前,網頁作者只能使用運算式<%= aName %>訪問系統的值,比如下面的例子:
<someTags:aTag attribute="<%= pageContext.getAttribute("aName") %>">
或者使用自訂JavaBeans組件的值:
<%= aCustomer.getAddress().getCountry() %>
運算式語言允許網頁作者使用簡單的文法訪問對象。比如要訪問一個簡單變數,可以像下面這樣寫:
<someTags:aTag attribute="${ aName}">
而訪問嵌套的JavaBeans屬性,則可以像下面這樣寫:
${ aCustomer.address.country}
你可能會問,這不是JavaScript的文法嗎?完全正確!如果你使用過JavaScript,就會感到非常輕鬆,因為運算式語言正是借用了訪問結構化資料的JavaScript文法。
--------------------------------------------------------------------------------
注意:
運算式語言最初是作為JSP標準標籤庫(JSTL)1.0的一部分而開發的,JSTL是一種標準標籤庫,它提供對通用的、結構化的任務的支援,如迭代和條件、XML文檔處理、國際化和利用SQL訪問資料庫等。JSTL規範是由JSR 52專家組開發的。關於JSTL的介紹,請參見Faster Development with JSTL(使用JSTL加速開發).
--------------------------------------------------------------------------------