top
Loading...
下一代WEB開發模式Tapestry簡介
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。(首月免費)

前言

由于internet技術的廣泛流行,越來越多的程序開發模式正在從C/S向B/S轉換,由于B/S模式具有瘦客戶端的優點——無須安裝客戶端程序,這就大大減輕了軟件升級的費用,所有的業務邏輯和數據庫存儲都放在服務端,從而提高了系統的可維護性。而且由于HTTP協議是一個開放式的標準,因此只要是支持HTTP協議的瀏覽器都可以運行,再結合目前的XML技術,可以方便地實現跨平臺的分布式應用。

但B/S架構有其天生的缺點:無狀態性。這其實并不是B/S程序的錯,而是由于B/S程序是建立在http協議的基礎上的,因此程序無法維護各個客戶端的狀態,不過所幸的是這個問題現在已經解決了。

現行的B/S開發的另一大缺陷是:代碼和HTML頁面揉和在一起了,對程序員和美工非常不利,而且對代碼的維護簡直是一場惡夢,這相信是許多Web開發者的一種體會。而C/S結構就沒有這種缺陷,因為它是基于組件的,比如VB,你有多得數不清的ActiveX控件來完成一些復雜的界面。

也許你看到這里,心里在盤算著:還是用C/S算了,省得這么多麻煩,但是一個不敢于嘗試新技術的公司往往是一個被新技術淘汰的公司。

為了解決上述問題,apache組織開發了一個基于JSP的MVC模式的實現:struts。它將WEB表現層分為model-view-controller幾個部分,通過一個servlet來對web的流程進行控件,這與單純的JSP或ASP相比確實進步了不少,因為利用struts能清楚地界定web的流程,而且不提倡使用<% …. %>語句,轉而代之的是taglib技術。但它始終沒有擺脫代碼和HTML頁面揉和的問題,而且它的原理對于JSP初學者來說比較復雜,taglib庫不夠豐富,而且taglib也不像組件那樣能夠繼承。

于是,新一代的WEB開發方法應運而生,它們最典型的就是開發方法是基于組件的,其中最具代表性的就是Tapestry。

為什么要用Tapestry?

Tapestry現在已經屬于Apache的Jakarta項目下了,你可以訪問http://jakarta.apache.org/tapestry 來訪問更多的信息。

Tapestry是一個強有力、開放源碼、基于Java的用于開發高端WEB應用的framework。它是JSP的一種替代方法,使用Tapestry,可以讓你的頁面看不到一句JSP代碼,這使頁面看起來非常干凈。它可以用很少的代碼來構造一個極端復雜的WEB應用。

Tapestry使用了類似于傳統C/S的開發方法:基于組件的開發。使用tapestry,你就可以得到以下好處:

1、非常高的代碼復用性,因為在tapestry中,任何事物都可以看作一個可復用的組件。

2、將JSP開發者從繁瑣的JSP代碼中解脫出來,取而代之的是真正面像對像方法,而不是URL解析。

3、對頁面國際化的充分支持

4、精確地錯誤報告,可以將錯誤定位到源程序中的行,取代了JSP中那些莫名奇妙地錯誤提示。

充分支持團隊開發,美工人員和JAVA開發人員可以融洽地相處,互相都不依賴于對方。

你也許會問:如果tapestry是基于組件的,那么它的組件是怎樣構成的呢?它是由一個定義文件(以XML的格式)、一個HTML模板、一個JAVA類。Tapestry的組件可以組合在一起形成一個更大的組件或邏輯頁面。

Tapestry的工作原理如下:在web.xml文件中定義一個名為ApplicationServlet的servlet來進行處理所有的http請求,這和struts有點相似,不過它主要職責是負責引導整個tapestry核心,啟動日志功能,讀取配置文件,創建工作引擎來指派客戶請求。ApplicationServlet主要是通過它的配置文件來進行自身管理的,你可以通過在web.xml中定義一個名為org.apache.tapestry.specification-path的初始參數來指定這個配置文件,當然如果你覺得這樣麻煩,那你也可以不指定配置文件,但tapestry會自動尋找與此servlet同名的配置文件,例如在web.xml中的定義如下:

<servlet>
<servlet-name>Registration</servlet-name>
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>

那么Tapestry會自動尋找一個名為Registration.application的配置文件,如果用戶沒有定義此文件,那么Tapestry將不能正常啟動。

為了便于理解,我舉一個大家都熟知的例子:用戶注冊模塊。首先生成一個注冊頁面,等待用戶的輸入,然后進行合法性檢查,如果通過,就顯示下一個頁面。如下所示



也許你會說,咦,這不是和JSP的表單差不多的嗎?是的,雖然看上去差不多,但原理大不一樣,由于它是基于組件的,所以Name、DOB、Address、City、State、Zip和Register按鈕都是單獨的組件,而不是普通的表單了。

這時你肯定會說:唉,也不過如此嘛,就算是基于組件的思想設計出來的東西也不過爾爾,這幾個文本框這么簡單,何必費這么大的勁把它們包裝成組件呢?呵呵,不知你注意到DOB這個文本框沒有?它和其它幾個有些不一樣,它的右邊多了一個小按鈕,如果點擊此按鈕,出現的結果會讓你瞠目結舌!

酷吧?如果你曾經是一個JSP程序員,你的腦海里馬上會閃過這樣一個念頭:一定是用javascript做的! 如果你這樣想的話,那你就大錯特錯了,因為本人的javascript還沒達到這種水平,如果我告訴你完成這樣一個組件,只需要在配置文件中加入通俗易懂的幾個xml元素的時候,你是否會覺得這真的很神奇呢?

是的,這就是Tapestry的魅力所在,Tapestry主要設計者Howard Lewis Ship的目的就是最大限度地解放JSP程序員的勞動量,讓他們有更多的時間花在客戶的需求和程序的邏輯設計上,而不是花在和美工人員互相解決矛盾沖突上,你可能會急不可待的問:那我們是否可以動手試一試了呢?是的,當然可以,但在動手之前,我要先介紹一些關于tapestry的概念,并試著開發一個最簡單的“hello,world”程序來讓你熟悉一下它的配置。因為它是一個framework,如果你對它的結構不是很清楚的話,我想你肯定無法充分地利用它的。

一個Tapestry組件一般稱作JWC(Java Web Component),它能與其它JWC一起組合,生成實例,進行配置。比如你剛才看到的那個不可思議的組件就是一個DatePicker組件,剛才的那個頁面是一個Page組件,Tapestry自帶了很多的JWC組件,這些組件不僅僅只是GUI組件,還有可能是帶控制功能的組件,比如foreach組件能夠提供循環的功能,同時tapestry還提供了一個簡單的方法來制作用戶自定義的組件,所有的Tapestry應用的表示層都是由這些JWC構成的。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗