在這篇由兩部分構成的文章的前一部分中,作者兼 developerWorks 的熱心貢獻者 Brett McLaughlin 對 Tapestry 進行介紹,從它的安裝一直到文件結構。您可以看到 Tapestry 怎樣幫助使用 HTML 和模板標記進行基於 servlet 的 Web 應用程序開發。
如果想出售產品,那麼擁有在線設施是很重要的,不論是運作一家數百萬美元的公司,還是隻是想在假日處理幾千個線手鐲。在某些情況下,修補一些 Web 頁面,並採用一些像 PayPal 或 eBay 這樣的預先打包好的支持系統處理銷售事務,也可以做得足夠好。但是一個全面的、設計良好的 Web 應用程序應當能把在線銷售從小打小鬧提升到專業的、動態的在線商店的層次。每個人都知道,消費者在商店中買的東西比從跳蚤市場買的東西多。
問題在於,在進入大多數 Web 開發框架時 —— 特別是在使用 Java™ 作爲編程語言的時候 —— 會發現複雜性太高。Struts、JSF 和 Spring 都是優秀的 Web 開發框架,但是它們中沒有一個是適合膽小的人。(如果您曾經試着向新 Java 開發人員解釋控制反轉,您就會知道我談的是什麼了!)幸運的是,還有更容易的選擇。
Tapestry 是在 Apache 軟件許可下發布的一個開放源碼的、基於 Java 的框架,它是專門爲了簡化 Web 開發設計的。它有以下關鍵特性:
- 易於安裝:不需要是 Web 應用程序高手,就可以讓 Tapestry 啓動並運行。
- 易於使用:只需要基本的 Java 和 HTML(是的,確實是 HTML,而不是 servlet)技能就可以編寫 Tapestry 應用程序。
- 易於擴大規模。當站點增長超過 10、50 或 100 個頁面時,也不必拋棄 Tapestry。對於多數 Web 應用程序來說,Tapestry 都足夠健壯。
在這篇文章中(系列的前半部分),我會帶您入 Tapestry 的世界。我將帶您一起經歷下載和安裝這個框架的每一步,然後運行一些示例應用程序,讓您理解它的工作方式。在下一篇文章中,我將介紹更高級的示例,讓您更好地掌握 Tapestry 的核心框架。在瞭解核心框架之前,您將完全適應了 Tapestry 環境。
您很快就會瞭解到 Tapestry 的口號是簡單。這種簡單不代表原始 或不成熟,而是代表易於理解、易用 和直觀。因爲安裝是任何一項新技術的入門,所以毫不誇張地說,安裝 Tapestry 非常容易。對於入門者來說,只有很少的前提要求,而這些要求對於 Web 開發人員來說,都是相當標準的,所以它們可能已經安裝了。(如果沒有,那麼請參閱 參考資料 一節獲得技術下載。)
|
顯然,使用 Tapestry 的第一個要求是,在機器上要有 Java 平臺正在運行。雖然 Tapestry 幾乎可以和任何相對較新的 Java 版本合作(Java 1.3 及以上版本),但最好是使用 Java 5.0。Tapestry 的幾個可選特性只能在 Java 5 下工作。而且,現在真的是沒有什麼理由不 轉換到 Java 5:它是穩定並經過良好測試的,已經經過了最初始的發展痛苦。
有了 JVM 和 servlet 引擎,還需要 Apache Ant 這樣的構建工具。雖然下載 Ant 很容易,但需要確定在路徑中有 Ant 的二進制代碼(對於 Linux/Mac OS X 系統是 ant
,對於 Windows 系統是 ant.bat
)。如果在空目錄中輸入 ant
,可能會看到下面這樣的輸出:
|
最後需要安裝一個微內核,叫作 HiveMind,用它爲 Tapestry 應用程序登錄對象。我不會在這篇文章中詳細討論 HiveMind —— 它本身就值得用幾篇文章討論!—— 但是您會看到 Tapestry 如何使用它。在從 Jakarta Web 站點下載了 HiveMind 之後,請把它放在與 Tapestry 相同的目錄中;例如,可能使用 /usr/local/java/hivemind-1.1 或 C:/java/hivemind-1.1。任何位置都可以,只要記住把它放在哪兒了!
Tapestry 實際上還有許多依賴項,但是安裝了 HiveMind、Ant 和 Java 5.0 之後,就能讓 Tapestry 自己處理剩下的依賴項。因爲 Tapestry 是一個 Web 應用程序框架,所以在準備運行應用程序時,還需要一個 servlet 引擎,例如 Apache Tomcat(請參閱 參考資料)。Tapestry 應用程序打包成 WAR 文件(Web 應用程序檔案),這樣就可以把它們放進 servlet 引擎的 Web 應用程序目錄中。這篇文章的所有示例都使用 Tomcat,但是可以很容易地把 Tapestry 用於您選擇的其他 servlet 引擎。
|
所有的前提條件就緒之後,請前往 Jakarta Tapestry 的主頁(請參閱 參考資料),從 Apache 的鏡像站點下載 Tapestry。先選擇最新的 Tapestry 4.0 版,編寫這篇文章時是 tapestry-4.0-beta-12.tar.gz(Windows 用戶請選擇 .zip 文件)。一般來說,最好是用穩定版來學習一個新框架,而不要使用更新的 beta 代碼。但是,Tapestry 4.0 在 2005 年 11 月已經接近 beta 週期的末尾,相對於 Tapestry 3.x 來說提供了顯著的 改進。(在閱讀這篇文章的時候,Tapestry 4.0 可能已經能夠使用了。)
在 Tapestry 的下載站點上時,您可能還想下載文檔集。在編寫這篇文章的時候,文檔集文件叫作 tapestry-4.0-beta-12-docs.tar.gz。展開這個檔案,應當得到名爲 tapestry-4.0-beta-12 的新文件夾,但是如果下載了更新版的 Tapestry,文件夾名稱可能會有變化。
請把這個文件夾移動到自己喜歡的保存 Java 項目安裝的地方;例如 /usr/local/java 這樣的位置就很好,或者也可以考慮 C:/java。在每種情況下,都要新建一個 Tapestry 目錄。在這個目錄中,有許多信息;請參考圖 1 瞭解頂級目錄結構:
術語安裝 對於 Tapestry 來說,有點兒名不符實!Tapestry 與在後臺運行的 Java 應用程序或者在網絡上提供內容的 servlet 引擎不同。相反,它是一組可以在應用程序中使用的實用工具 —— 從類到標記。所以不是 “安裝” Tapestry,而是讓 Web 應用程序可以使用它,並把 Tapestry 和它的依賴項與 Web 應用程序綁在一起。
|
設置 Tapestry 主要是把正確的類組(打包到 Java JAR 文件中)放在正確的目錄中。首先,需要找到核心的 Tapestry JAR 文件。這些文件包含 Web 應用程序中要使用的全部 Tapestry 代碼,它們位於 Tapestry 發行目錄的根目錄中:
- tapestry-4.0-beta-12.jar 包含 Tapestry 的框架部分。
- tapestry-annotations-4.0-beta-12.jar 包含在 Java 5.0 上支持 Tapestry 標註所需要的類。
- tapestry-contrib-4.0-beta-12.jar 包含那些發佈到 Tapestry 中,但是對操作來說並非必需的組件。
- tapestry-portlet-4.0-beta-12.jar 包含的類讓 Tapestry 可以支持 JSR-168 —— portlet JSR。
請把這四個 JAR 文件放在使用 Tapestry 的 Web 應用程序的 WEB-INF/lib 目錄中,就準備好了 —— 差不多是這樣。在啓動應用程序之前,只需要再做一點兒 設置。
|
Tapestry 試圖爲 Web 應用程序提供一種簡化的編程模型和易於使用的環境。它的做法是抽象出重複的、常見的任務的細節,所以它使用許多 實用工具。不論是支持表達式,還是登記對象,還是創建漂亮的用戶界面組件,Tapestry 都依賴第三方庫讓 Web 開發對於開發人員儘可能容易。
幸運的是,Tapestry 會自己進行大多數依賴項的下載和安裝工作。唯一的麻煩就是跟蹤這些額外的 JAR 文件,但是正如在這一節中會看到的,這不是個大問題。
因爲 Tapestry 用 HiveMind 來確定和下載依賴項,所以第一步是讓 Tapestry 知道 HiveMind 文件在哪兒。請轉到 Tapestry 目錄 —— 可能是 /usr/local/java/tapestry-4.0-beta-12 —— 然後進入 config 目錄。應當看到一個 build.properties 文件。打開它的時候,會看到類似清單 1 的內容。在這裏列出了 Tapestry 的幾個核心庫和依賴項,以及它們的位置。這個列表並不反映 Tapestry 需要的全部依賴項,但是反映了編譯基本的 Tapestry 應用程序需要的依賴項集合。
清單 1. 默認的 Tapestry build.properties 文件
|
如果這些項目和分配給它們的位置看起來比較怪,那就對了。實際上應當清除掉屬性文件中的全部內容,除了以 hivebuild.dir
和 tomcat.dir
開始的之外,因爲這些依賴項應當已經就緒。請修改這些依賴項的位置,使其與 HiveMind 和 Tomcat 的安裝位置匹配,build.properties 的最終版本看起來應當像清單 2 這樣:
清單 2. 修改後的 build.properties 文件
|
保存這個文件,並返回 Tapestry 的根目錄,設置 Ant。
Ant 的安裝非常簡單,只是需要些時間。首先在 Tapestry 的根目錄下輸入 ant install
。可以忽略所有文本,直到看到 像這樣的文本 爲止。
不必擔心奇怪的格式;請輸入 “continue
” 並按下回車,就開始下載 Tapestry 的額外依賴項。這一步驟要花些時間,所以如果構建過程看起來已經執行了一段時間,請不要擔心:要下載多個庫,還要編譯許多代碼。甚至還會看到安裝了一些測試,然後可能得到 以下(明顯的)錯誤。
|
不要被錯誤消息嚇倒:一定要閱讀各種 echo
語句的輸出;它們表明 JUnit 已經下載並安裝,只需要重新啓動構建過程。
這是對的,現在還沒有完。在提示符下,再次輸入 ant install
,繼續構建。安裝了 JUnit 之後,構建會運行許多 JUnit 測試,以確保 Tapestry 的設置正確。因爲這個構建過程要花許多時間,所以可以去喝杯咖啡,或者到另一臺機器上編寫一些 XHTML。如果事情進展順利,構建過程的末尾 看起來會像這樣。
構建完成之後,請進入 ext-package/lib 目錄,列出目錄列表。應當看到像這樣的列表:
|
可以看到,構建過程下載了許多 額外的庫。其中有許多是在構建 Tapestry 時使用的,其他一些是在編譯時使用的。但是,對於運行時,需要把下面這些 Tapestry JAR 文件放在 Web 應用程序的 WEB-INF/lib 目錄中:
- tapestry-4.0-beta-12.jar
- tapestry-annotations-4.0-beta-12.jar
- tapestry-contrib-4.0-beta-12.jar
- tapestry-portlet-4.0-beta-12.jar
另外,還需要把以下依賴項文件放在 Web 應用程序的 WEB-INF/lib 目錄中:
- commons-codec-1.3.jar:URL 編碼和解碼工具的文件。
- commons-fileupload-1.0.jar:處理多部分文件上載的庫。
- commons-logging-1.0.4.jar:Tapestry 用來記錄信息和錯誤的框架。
- hivemind-1.1-rc-1.jar:Tapestry Java 對象的服務註冊表。
- hivemind-lib-1.1-rc-1.jar:HiveMind 庫。
- javassist-3.0.jar:運行時代碼增強庫。
- ognl-2.6.7.jar:導航對象圖的表達式語言。
- oro-2.0.8.jar:模式匹配的表達式庫。
看起來可能有許多文件,但是對於 Java 庫來說,還是很常見的;只要把它們放在正確的位置,就不用再照顧它們了。關於安裝的最好的消息就是:現在已經完成了!前提軟件安裝完成、Tapestry 和全部依賴項設置好之後,就可以看看一些 Tapestry Web 應用程序是什麼樣了。