Tapestry框架概述
Tapestry帶來了真正的Java web應用程序OOP編程,摘自《深入淺出Tapestry》中的一句話。這本書也是我學習Tapestry的參考之一,其他參考資料如《Tapestry in action》《enjoy web de v with tapestry》《Tapestry開發指南》等等也非常不錯。
在此,把在學習Tapestry過程當中當中的一些經驗和大家分享。
Tapestry與其他諸如struts springMVC JSF等framework之間的比較在此不做贅述了,既然選擇花時間來看我的這片文章我想你也一定有興趣了解一下這門技術。當然希望你能對基于MVC的java web有所了解,這會對你Tapestry的學習有很大的幫助。
1 搭建環境(windows)
??? 1. 建議選擇?http://tapestry.apache.org/download.html? 4.1.5 binary (zip) 下載到本地之后解壓到任意目錄,在本文中路徑為:D:\env\tapestry-project-4.1.5?
??????? D:\env\tapestry-project-4.1.5\lib下包含了開發一個Tapestry應用的全部jar包
??? 2. myeclipse6.0。
????
??? 3. 下面讓我們來開發一個簡單的 Tapestry 應用:
??? ??? 啟動 myeclipse ,新建 java web project.
??????? 展開工程(myt4pro1)右鍵點擊JRE System library 選擇 build path >> configure build path. 新對話框中選擇 libraries 選項卡,點擊 add library>>user library>>user libraries>>new ,起一個名字本文中為 T4-lib 然后點擊 add JARs 將 D:\env\tapestry-project-4.1.5\lib 目錄下的全部jar文件導入. 然后選中 T4-lib 點擊finish 。
??????? 修改web-inf下web.xml文件,如下:
<web-app?version="2.4"
??? xmlns="http://java.sun.com/xml/ns/j2ee"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
??? http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
????????????
<display-name>myt4pro</display-name>
<servlet>
????<servlet-name>myts</servlet-name>
????<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
????<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
????<servlet-name>myts</servlet-name>
????<url-pattern>/app</url-pattern>
</servlet-mapping>?
</web-app>
??? 4. 在WebRoot目錄下(web-inf同級目錄),創建Home.html。(必須叫Home.html,Tapestry程序入口)代碼如下:
????
??? 5. 在web-inf目錄下創建名為 Home.page 的xml文件。如下:
<!DOCTYPE?page-specification?PUBLIC?
"-//Apache?Software?Foundation//Tapestry?Specification?4.0//EN"?
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<page-specification?class="myts.Home">
?????????
</page-specification>
??? 6. 最后在 myts 包下寫一個java類:
import?org.apache.tapestry.html.BasePage;
????????
public?abstract?class?Home?extends?BasePage{
?????public?String?getT4start(){
??? ????return?"hello?,Tapestry4..";
???? }
}
??? 7. 啟動tomcat 在瀏覽器輸入 http://localhost:8080/myt4pro1/app 應該看到如下頁面
????
??????? hello ,Tapestry4..
????????
??? 8. 該例子的目錄結構如下:
????
2.Tapestry框架概述
??? 一個基于Tapestry的web應用可能包含了以下幾種文件:應用規范文件,hivemind配置文件,HTML模板文件,頁面規范文件,頁面類文件,組件包規范文件,組件規范文件,組件類文件,動態腳本文件。下面一個一個來詳細講述。
????
??????? 1. 三種配置文件(應用程序規范文件,hivemodule配置文件,組件包規范文件)
????
??????? 1.1 應用程序規范文件:是一個以應用程序servlet名稱命名的,以“.application”為擴展名的xml文件。一個web應用只能有一個應用程序規范文件。他制定了應用程序的各種細節配置,頁面和組件配置,組件包配置等等。如果我們不為應用程序配置應用程序規范文件,Tapestry會為我們提供一個默認的。
<!DOCTYPE?application?PUBLIC?
"-//Apache?Software?Foundation//Tapestry?Specification?4.0//EN"
?"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
?????????????
<application?name="myt4pro">
????<meta?key="org.apache.tapestry.page-class-packages"?value="myts"/>
????<library?id="contrib"?specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
</application>
??? ??? ????
??? ??? ??? <application>為根標簽元素,name制定了serlvet名稱。
??????????? <meta>用于配置應用程序細節。在此我們為應用程序配置頁面類的默認定義包路徑。那么Tapestry將自動在myts路徑下尋找頁面類。
??????????? <library>導入了外部組件包
????????????
??????? 1.2 hivemind配置文件:HiveMind框架是一個依賴注入微核心框架,Tapestry框架構建在HiveMind之上。如果你的程序業務層沒有用到hivemind,不必配置hivemodule文件。下面給了一個為應用程序配置Friendly URL的例子:
????<module?id="myt4pro"?version="1.0.0">
??? ????<contribution?configiration-id="tapestry.url.ServiceEncoders"?/>
??? ??? ????<direct-service-encoder?id?="direct"?stateless-extension="direct"?stateful-extension="sdirect"?/>
??? ??? ????<direct-service-encoder?id?="action"?stateless-extension="action"?stateful-extension="saction"?/>
??? ??? ????<page-service-encoder?id="page"?extension="page"?service="page"?/>
??? ??? ????<page-service-encoder?id="external"?extension="external"?service="external"?/>
??? ??? ????<asset-encoder?id="asset"?path="/assets"?/>
??? ??? ????<extension-encoder?id="ext"?id="ext"?extension="svc"?after="*"/>
????</contribution>
</module>
???? ??? 1.3 組件包規范文件: 為了跨項目積累組件,我們可以將組件打成jar包,然后通過在應用程序規范文件中引入組件包的方式,調用組件包中的自定義組件。組件包規范文件的后綴為“.library”的XML文件,命名任意。
????????
??????? 2. Tapestry頁面的組成
??????? 2.1 HTML模板:HTML模板就是標準的靜態HTML頁面,在HTML模板中我們通過jwcid(Java Web Component ID)標簽屬性調用Tapestry組件。例如上例中的:?????????
????????????
??? ??? 在上面的代碼中,調用了Tapestry的官方組件Insert,value屬性是Insert組件的參數之一。"@"符號用于區分jwcid是一個組件類型還是一個組件ID,如果是一個組件ID,tapestry將在HTML模板對應的頁面規范中尋找對應該組件ID的組件調用配置。(亦可這樣理解,"@"為官方組件,無"@"為自定義組件,自定義組件需要在“.page”文件中詳細配置該組件的用法。)
????????????
??????? 2.2 頁面規范:是以頁面名稱命名且后綴是.page的XML文件,這個后綴為.page的XML文件必須聲明Tapestry的頁面規范DOCTYPE。
??????????? 例如在上例中:
???? ??? ?? 也可以這樣來表示:
??????????? HTML模板:
??? ??? ??? 頁面規范:
???????????????
<!DOCTYPE?page-specification?PUBLIC
?"-//Apache?Software?Foundation//Tapestry?Specification?4.0//EN"
?"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
????????????????
<page-specification?class="myts.Home">
????<component?id="test"?type="Insert">
??? ????<binding?name="value"?value="t4start"?/>
????</component>
</page-specification>
??????? 2.3 頁面類:必須繼承org.apache.tapestry.html.BasePage類,如:
import?org.apache.tapestry.html.BasePage;
????????????
????public?abstract?class?Home?extends?BasePage{
????public?String?getT4start(){
??? ????return?"hello?,Tapestry4..";
??? }
}
??? ??? 3. Tapestry組件的組成
??????? 在Tapestry中,一個組件通常由HTML模板,組件規范,組件類,動態腳本文件4個文件組成,除了組件規范以外,其他三個文件都不是必須的。
????
??? ??? 4. ognl
??????? OGNL是 Object Graph Navigation Language 的簡稱,是一種綁定方式的表達式語言。
??????? OGNL是OpenSymphony的一個開源項目。
??????? OGNL最重要的也是最根本的作用是簡化調用Java類中的getter/setter方法,同時,他也是一種功能單一且易于使用的表達式語言,OGNL表達式就式該語言的全部。對于OGNL如何與模板對象綁定,Tapestry已經實現,我們不需要關心。同時,雖然OGNL表達式帶有運算功能,但是Tapestry框架將頁面邏輯全部放到了頁面類中,因此根本沒必要使用OGNL表達式來處理頁面邏輯。
????????
??????? 舉幾個例子便于理解:
????????
??????? 4.1 簡化調用Java屬性。
??? ??? ??? ognl:test
??????????? java類:
????return?"test";
}
?? ????
??? ??? 4.2 逐層訪問java對象方法
??????????? ognl:user.value
??????????? java類:
????return?new?User();
}
public?class?User{
??? public?String?getValue(){
?? ?? ??return?"test"
??? }
}
??????? 4.3 訪問java對象中的方法
??????????? ognl:makeTest
??????????? java類:
??? System.out.println("test");
}
最后,讓我們來回顧一下Tapestry框架的整個調用過程:Home.html -> Home.page -> Home.class
源:http://prowl.iteye.com/blog/476525
總結
以上是生活随笔為你收集整理的Tapestry框架概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51job招聘网(如何评价51job这个
- 下一篇: 贝壳找房怎么取消委托找房