Apache Tapestry是一個使用Java編寫的開源Web框架,采用組件化的方式構(gòu)建Web應(yīng)用程序。Tapestry的組件是普通的Java類(POJO),既不需要繼承框架特定的基類,也不實現(xiàn)任何接口,因此具有很高的靈活性和可擴展性。
一、Apache Tapestry介紹
Tapestry的核心特性之一是廣泛使用Java注解。通過注解,Tapestry實現(xiàn)了強大的功能支持,并允許開發(fā)者使用少量的代碼實現(xiàn)復(fù)雜的應(yīng)用程序。Tapestry的網(wǎng)頁通常由多個組件組成,每個組件都有一個基于XML的模板文件,以及用注解裝飾的組件類。
1、Tapestry的優(yōu)點
- 高度可擴展:適用于開發(fā)復(fù)雜和大規(guī)模的Web應(yīng)用程序;
- 靈活的API:自適應(yīng)且易于擴展;
- 成熟穩(wěn)定:經(jīng)過多年發(fā)展,性能和功能均非??煽浚?/li>
- 持久化狀態(tài)管理:內(nèi)置支持管理用戶會話和應(yīng)用狀態(tài);
- 內(nèi)置控制反轉(zhuǎn) (IoC):減少了開發(fā)者的工作量,并提高了代碼的可測試性。
2、Tapestry的功能
- 詳細的異常報告:提供清晰易懂的錯誤信息,幫助開發(fā)者快速定位問題;
- 靜態(tài)結(jié)構(gòu)與動態(tài)行為:結(jié)合了靜態(tài)類型檢查和動態(tài)頁面更新;
- 廣泛使用POJO:大部分代碼為普通的Java對象,無需繼承框架特定的類或?qū)崿F(xiàn)接口;
- 簡化開發(fā):通過減少代碼量,使得開發(fā)者可以更專注于功能實現(xiàn)。
雖然Java世界中已經(jīng)存在如JSP、Struts等多種Web框架,但Tapestry提供了一種更加現(xiàn)代、簡潔的開發(fā)方式,解決了傳統(tǒng)框架的許多痛點。許多老舊框架往往有著復(fù)雜的學(xué)習(xí)曲線,且每次更新都需要經(jīng)過繁瑣的編譯、測試和部署周期。而Tapestry則通過支持實時類重新加載,使得開發(fā)更加高效,避免了頻繁的部署流程。
與其他框架引入大量接口、抽象類和基類不同,Tapestry采用的輕量級注解設(shè)計使得開發(fā)者可以快速構(gòu)建功能強大的應(yīng)用程序,并支持AJAX等現(xiàn)代Web技術(shù)。
3、Tapestry的架構(gòu)
Tapestry充分利用Java語言的特性,所有Tapestry頁面都是普通的POJO(Java類),開發(fā)者不需要遵循特定的接口或繼承約定。它通過注解增強類的功能,提供了強大的支持。Tapestry基于成熟的Java Servlet API,并通過Servlet Filter 實現(xiàn),能夠為Web應(yīng)用程序提供強大的功能支持,同時保持編程的簡單性、靈活性和健壯性。
二、Tapestry工作流程
讓我們討論請求Tapestry頁面時發(fā)生的操作順序。
1、Java Servlet接收頁面請求
該Java Servlet 的配置方式是將傳入請求轉(zhuǎn)發(fā)到 Tapestry。 配置在?web.xml?中完成,如以下程序中指定。 過濾器和過濾器映射標記將所有請求重定向到Tapestry Filter。
2、Tapestry Filter?通過其?Service()?方法調(diào)用?HttpServletRequestHandler?服務(wù)。
3、HttpServletRequestHandler?將請求和響應(yīng)存儲在?RequestGlobals?中。 它還將請求和響應(yīng)包裝為 Request 和 Response 對象并將其發(fā)送到 RequestHandler。
4、RequestHandler?是 Servlet API 的?HttpServletRequest?之上的抽象。 Tapestry 的一些顯著功能是在?RequestHandler?部分完成的。 可以通過在RequestHandler中編寫過濾器來擴展tapestry功能。 RequestHandler 提供了幾個內(nèi)置的過濾器,其中包括:
- 檢查更新過濾器?? 負責(zé)實時類重載。 此過濾器檢查 java 類的更改并根據(jù)需要更新應(yīng)用程序;
- 本地化過濾器?? 識別用戶的位置并為應(yīng)用程序提供本地化支持;
- 靜態(tài)文件過濾器?? 識別靜態(tài)請求并中止進程。 一旦進程中止,Java Servlet 就會接管控制并處理請求;
- 錯誤過濾器?? 捕獲未捕獲的異常并呈現(xiàn)異常報告頁面。
RequestHandler 還會修改并存儲 RequestQlobals 中的請求和響應(yīng),并調(diào)用 MasterDispatcher 服務(wù)。
5、MasterDispatcher負責(zé)通過按特定順序調(diào)用多個調(diào)度程序來渲染頁面。 MasterDispatcher調(diào)用的四個主要調(diào)度器如下
- 根路徑調(diào)度程序?? 它識別請求的根路徑”/”并呈現(xiàn)與起始頁相同的內(nèi)容;
- 資源調(diào)度程序?? 它通過檢查 url 模式 /assets/ 來識別資源(Java 資源)請求,并將請求的資源作為字節(jié)流發(fā)送;
- PageRenderer 調(diào)度程序?? 大部分Tapestry操作是在 PageRender Dispatcher 和下一個調(diào)度程序 Component Dispatcher 中完成的。 該調(diào)度程序識別該請求的特定頁面及其激活上下文(附加信息)。然后它呈現(xiàn)該特定頁面并將其發(fā)送到客戶端。 例如,如果請求 url 為 /product/12123434,則調(diào)度程序?qū)z查是否有任何名稱為Product/12123434 的類可用。 如果找到,它會調(diào)用product/12123434類,生成響應(yīng)并將其發(fā)送到客戶端。 如果沒有,它會檢查產(chǎn)品類別。 如果找到,它會使用額外信息 121234434 調(diào)用產(chǎn)品類,生成響應(yīng)并將其發(fā)送到客戶端。 這些額外信息稱為激活上下文。 如果沒有找到類,它只是將請求轉(zhuǎn)發(fā)給組件調(diào)度程序。
- 組件調(diào)度程序?? 組件調(diào)度程序?qū)㈨撁娴?URL 與模式進行匹配 – /<class_name>/<component_id>:<event_type>/<activation_context>。例如,/product/grid:sort/asc 表示產(chǎn)品類、網(wǎng)格組件、排序事件類型和 asc 激活上下文。 這里,event_type 是可選的,如果沒有提供,將觸發(fā)默認的事件類型操作。 通常,組件調(diào)度程序的響應(yīng)是將重定向發(fā)送到客戶端。 最有可能的是,重定向?qū)⑴c下一個請求中的 PageRender Dispatcher 相匹配,并且正確的響應(yīng)將發(fā)送到客戶端。
三、Apache Tapestry安裝
1、先決條件
Tapestry 的唯一依賴項是Core Java。 Tapestry是獨立開發(fā)的,沒有使用任何第三方庫/框架。 甚至 Tapestry 使用的 IoC 庫也是從頭開始開發(fā)的。 用 Tapestry 編寫的 Web 應(yīng)用程序可以從控制臺本身構(gòu)建和部署。
可以使用Maven、Eclipse和Jetty來改善開發(fā)體驗。 Maven 提供快速啟動應(yīng)用程序模板和選項來在 Jetty(Java 事實上的開發(fā)服務(wù)器)中托管應(yīng)用程序。 Eclipse 提供了廣泛的項目管理功能,并與 Maven 很好地集成。
理想的 Tapestry 應(yīng)用程序開發(fā)需要以下內(nèi)容
- Java 1.6 or later
- Apache Maven
- Eclipse IDE
- Jetty Server
2、驗證Maven安裝
我希望你已經(jīng)在你的機器上安裝了 Maven。 要驗證 Maven 安裝,請鍵入以下命令
mvn --version
可以看到如下所示的響應(yīng)
如果尚未安裝,請訪問https://maven.apache.org/網(wǎng)站下載并安裝最新版本的maven。
3、下載Tapestry
Tapestry的最新版本是5.4,您可以從https://tapestry.apache.org/網(wǎng)站下載。 下載binary包就夠了。 如果我們使用Maven快速啟動模板,那么我們不需要單獨下載Tapestry。 Maven 會自動下載必要的 Tapestry Jars 并配置應(yīng)用程序。
四、Apache Tapestry快速入門
安裝 Tapestry 后,讓我們使用 Maven 創(chuàng)建一個新的初始項目,如下所示
$ mvn archetype:generate -DarchetypeCatalog=http://tapestry.apache.org
可以看到如下所示的響應(yīng)
Maven構(gòu)建完所有操作后,選擇archetype創(chuàng)建Tapestry 5 QuickStart項目,如下
1、選擇原型
- https://tapestry.apache.org?→ org.apache.tapestry:quickstart (Tapestry 5 Quickstart Project)
- https://tapestry.apache.org?→ org.apache.tapestry:tapestry-archetype (Tapestry 4.1.6 Archetype)
選擇號碼或應(yīng)用過濾器 (format: [groupId:]artifactId, case sensitive contains): : 1
現(xiàn)在將收到如下所示的響應(yīng)
按如下方式提取快速入門版本號:Choose a number: 5: 5
此處,快速入門項目采用選項 5 的版本”5.4.1″。 現(xiàn)在,Tapestry原型一一詢問以下信息,如下 ?
- 5.1 groupId?? 定義屬性”groupId”的值::com.example
- 5.2 artifactId?? 定義屬性”artifactId”的值::Myapp
- 5.3 version?? 定義屬性”version”的值:1.0-SNAPSHOT: :
- 5.4 package name?? 定義屬性”package”的值: com.example: : com.example.Myap
現(xiàn)在屏幕要求您確認:
確認屬性配置
- groupId?? com.example
- artifactId?? Myapp
- version?? 1.0-SNAPSHOT
- package?? com.example.Myapp
驗證所有屬性并使用下面所示的選項確認更改:Y::Y
將看到如下所示的屏幕
到這里已經(jīng)成功構(gòu)建了 Tapestry Quick Start 項目。 使用以下命令移動到新創(chuàng)建的?Myapp?目錄的位置并開始編碼。
cd Myapp
2、運行應(yīng)用程序
要運行 skeleton 項目,請使用以下命令
mvn jetty:run -Dtapestry.execution-mode=development
你會看到這樣的屏幕
到目前為止,我們已經(jīng)在 Tapestry 中創(chuàng)建了一個基本的快速入門項目。 要在 Web 瀏覽器中查看正在運行的應(yīng)用程序,只需在地址欄中鍵入以下 URL 并按 Enter ?
https://localhost:8080/myapp
這里,myapp是應(yīng)用程序的名稱,開發(fā)模式下應(yīng)用程序的默認端口是8080。
五、使用Eclipse
1、打開Eclipse IDE
打開 Eclipse 并選擇 File → New → Project… → 選項,如以下屏幕截圖所示。
現(xiàn)在,選擇 Maven → Maven project 選項。
注:如果未配置 Maven,則配置并創(chuàng)建項目。
選擇 Maven 項目后,單擊”下一步”,然后再次單擊”下一步”按鈕。
之后將看到一個屏幕,您應(yīng)該在其中選擇配置選項。 配置完成后,您將看到以下屏幕。
2、目錄配置
第一步完成后,您應(yīng)該單擊添加遠程目錄。 然后添加以下更改,如下面的屏幕截圖所示。
現(xiàn)在,添加了 Apache Tapestry 目錄。 然后,選擇過濾器選項 org.apache.tapestry Quickstart 5.4.1,如下所示。
然后單擊”下一步”,將出現(xiàn)以下屏幕。
3、配置GroupId、ArtifactId、版本和包
向 Tapestry 目錄配置添加以下更改。
然后單擊”完成”按鈕,現(xiàn)在我們已經(jīng)創(chuàng)建了第一個 skeleton 應(yīng)用程序。 第一次使用 Maven 時,項目創(chuàng)建可能需要一段時間,因為 Maven 會下載 Maven、Jetty 和 Tapestry 的許多 JAR 依賴項。 Maven 完成后,您將在 Package Explorer 視圖中看到一個新目錄 MyFirstApplication。
4、使用Jetty服務(wù)器運行應(yīng)用程序
您可以使用Maven直接運行Jetty。 在 Package Explorer 視圖中右鍵單擊 MyFirstApplication 項目并選擇 Run As → Maven Build…,您將看到如下所示的屏幕。
在配置對話框中,輸入目標選項”jetty:run”,然后單擊”運行”按鈕。
Jetty 初始化后,您將在控制臺中看到以下屏幕。
5、在網(wǎng)絡(luò)瀏覽器中運行
鍵入以下 URL 以在 Web 瀏覽器中運行應(yīng)用程序:https://loclhost:8080/MyFirstApplication
6、停止Jetty服務(wù)器
要停止 Jetty 服務(wù)器,請單擊控制臺中的紅色方形圖標,如下所示。
-
廣告合作
-
QQ群號:4114653