在Web應用框架中,MVC往往是實(shí)現Web應用前端分層的重要設計模式。由于Struts提供了優(yōu)異的控制
器,這使得它成為了事實(shí)上的Web框架標準。在Web MVC中,視圖層往往采用JSP和HTML技術(shù),而模型層可
用的技術(shù)比較多(比如EJB,JDO等等)。就技術(shù)而言,如果你用Struts來(lái)開(kāi)發(fā)Web應用,Struts為你提供了
優(yōu)異的控制器。但就視圖層的支持就有點(diǎn)讓人不敢恭維,因為用Struts的標記庫設計出來(lái)的頁(yè)面,一般
的美工人員,無(wú)法美化(不要小看美化工作,用戶(hù)接觸一個(gè)軟件時(shí),最先接觸的是界面)。
而Tapestry讓我心動(dòng)的地方就是:我開(kāi)發(fā)的主要精力都集中在業(yè)務(wù)邏輯上,而不用考慮界面,并且
軟件的界面工作可以交給美工。并且后期的軟件維護比較輕松,不用在面對煩人的“界面和業(yè)務(wù)邏輯混在一起的”
JSP。
Tapestry的開(kāi)發(fā)哲學(xué)是使得開(kāi)發(fā)者能夠以“對象、方法、屬性”思考Web應用,而不是傳統的“HTTP請求、
HTTP響應、會(huì )話(huà)(SESSION)、屬性、參數、URL”。在使用Tapestry時(shí)只要專(zhuān)注于對象、對象的方法和屬性。
比如:用戶(hù)在使用由Tapestry開(kāi)發(fā)的Web應用中,用戶(hù)的行為(比如:?jiǎn)螕鬠RL鏈接、提交表單)將觸發(fā)對象
屬性的變化,以及事件(對對象中方法的調用)的發(fā)生。而這些工作都是由Tapestry關(guān)注,開(kāi)發(fā)者只要借助
Tapestry提供的API,而不用理會(huì )底層的調用過(guò)程。這對交互性極強的Web應用十分適合。
另外開(kāi)發(fā)者在使用Tapestry的過(guò)程中,不般不需要開(kāi)發(fā)servlet,不用構建URL。一般情況下只要使用
Tapestry提供的現有組件,并配置相應的listener參數。通過(guò)listener參數指定的調用方法就可以訪(fǎng)問(wèn)后
端系統。
Tapestry開(kāi)發(fā)的應用由Page組成,即Web頁(yè)面。Page由組件組成,而組件又是由更小的組件組成。
對Tapestry而言,Page是特殊的組件,Page組件中不能再有Page組件。對于單個(gè)Page而言,各個(gè)組件的名字
都不相同,通過(guò)組件的ID能唯一標識組件。通過(guò)使用組件ID便形成了Tapestry組件對象模型。
通常Tapestry應用是由若干個(gè)頁(yè)面組成,每個(gè)頁(yè)面都是用Tapestry組件開(kāi)發(fā)的。而且組件一般都存在
已經(jīng)定義好的參數類(lèi)型,通過(guò)Web頁(yè)面能夠提供相應的參數值。請注意,這里的參數類(lèi)型同javaBean中的
參數類(lèi)型有所區別。對于javaBean而言,它的參數是單向的,即開(kāi)發(fā)者只能傳入值,而不能傳出參數。對于
Tapestry來(lái)說(shuō),方法參數是雙向的,可以讀出,也可以寫(xiě)入。
在Web應用中,處理表單數據是最為基礎,重要的內容。在Tapestry應用中,當用戶(hù)提交表單時(shí),處于
表單中的組件會(huì )從HTTP查詢(xún)參數中獲得值,并把這些值轉換為合適的類(lèi)型,然后更新對象的屬性。這個(gè)
過(guò)程在Tapestry中稱(chēng)為Rewind過(guò)程。當Tapestry將頁(yè)面傳給瀏覽器時(shí),稱(chēng)之為T(mén)apestry Render過(guò)程。
Tapestry頁(yè)面上的參數是用OGNL語(yǔ)言來(lái)表達的。
Tapestry中存在Engine、Visit、Global這幾個(gè)重要的概念。Global相當于JSP中的Application范圍。
Visit是作為Engine的屬性而存在的,而Engine又是存儲在HttpSession中,因此Visit也是存儲在
HttpSession中。
Visit和Engine都是在Tapestry的.application文件中配置的。比如:
<application name="XCharge" engine-class="org.apache.tapestry.engine.BaseEngine">
<description>add a description</description>
<property name="org.apache.tapestry.visit-class" value="charge.Visit"/>
</application>
聯(lián)系客服