国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

表現(xiàn)層框架Struts/Tapestry/JSF比較

2019-11-18 15:37:53
字體:
供稿:網(wǎng)友

  Struts/Tapestry/JSF是目前J2EE表現(xiàn)層新老組合的框架技術(shù)。從誕生時(shí)間上看,Struts應(yīng)該比較早,使用得非常廣泛,Tapestry 3.0逐漸引起廣泛的重視,正當(dāng)Tapestry即將大顯身手時(shí)期,SUN推出JSF標(biāo)準(zhǔn)技術(shù),雖然JSF一開始推出尚不成熟,留出了一段空白期,但是隨著JSF1.1標(biāo)準(zhǔn)推出,JSF開始正面出擊,粉面隆重登場了。

  其實(shí),JSF和Tapestry也并不是那種頭碰頭的相同競爭性技術(shù),兩者還是各有側(cè)重點(diǎn)的,不過比較細(xì)微,但是這種細(xì)微點(diǎn)在實(shí)現(xiàn)一個(gè)大工程時(shí)可能帶來不同的感受和變化。

  首先,我們從一個(gè)高度來抽象一下表現(xiàn)層框架應(yīng)有的技術(shù)架構(gòu),下圖可以說所有表現(xiàn)層框架技術(shù)都必須實(shí)現(xiàn)的功能架構(gòu)圖:

表現(xiàn)層框架Struts/Tapestry/JSF比較(圖一)

  當(dāng)然,我們不必廢話羅嗦MVC模式,MVC模式是基準(zhǔn)模式,現(xiàn)在框架技術(shù)已經(jīng)不必再拼是否是MVC模式了。 在上圖MVC模式基礎(chǔ)上,一個(gè)表現(xiàn)層框架無外乎要實(shí)現(xiàn)圖中的三個(gè)功能:

  1.在當(dāng)前頁面能夠顯示一個(gè)組件對(duì)象的內(nèi)容;而不是象純jsp那樣,需要在Jsp頁面寫入“調(diào)用對(duì)象方法”的java代碼。

  2.當(dāng)用戶按下頁面的提交按扭或鏈接后,事件發(fā)生,這時(shí)應(yīng)該觸發(fā)服務(wù)器端并將當(dāng)前頁面的參數(shù)提交給服務(wù)器。這種機(jī)制表現(xiàn)在Form表單提交和有參數(shù)的鏈接<a href=""></a>

  3.從一個(gè)頁面視圖直接跳轉(zhuǎn)到另外一個(gè)頁面視圖,單純的導(dǎo)航作用。

  我們通過下表來比較這 三種框架在實(shí)現(xiàn)上圖各個(gè)功能時(shí)技術(shù)細(xì)節(jié),從而得出他們的異同點(diǎn)和偏重點(diǎn)。

 StrutsTapestry3.0JSF在View顯示的組件要求

組件必須繼續(xù)ActionForm

分顯式調(diào)用和隱式調(diào)用
組件必須繼續(xù)BaseComponent普通POJO
無需繼續(xù)
Managed Bean組件在View顯示粒度View頁面只能顯示與表單對(duì)應(yīng)的ActionForm,配置中Action ActionForm 頁面一般只能1:1:1關(guān)系。可將組件嵌入頁面任何一行,對(duì)使用組件數(shù)量無限制。同Tapestry頁面分區(qū)tiles使用Tiles標(biāo)簽庫實(shí)現(xiàn),需要另外tiles-def.xml配置文件組件有自己的視圖頁面,通過調(diào)用組件即直接實(shí)現(xiàn)多個(gè)頁面組合。強(qiáng)大自然的頁面組合是其特點(diǎn)。通過組件+標(biāo)簽庫實(shí)現(xiàn)Subview,但如需重用Layout,還要結(jié)合Tiles.頁面跳轉(zhuǎn)使用標(biāo)簽庫Html:link中寫明目標(biāo)URL,URL名稱需要對(duì)照配置文件的path命名,與組件Action耦合。URL名稱是目標(biāo)的組件名稱,不涉及URL和路徑等操作,方便穩(wěn)固。類似Struts,也需要在配置文件中查找,與組件分離。參數(shù)傳遞使用html:link時(shí)傳遞參數(shù)超過一個(gè)以上處理麻煩。直接調(diào)用組件,直接賦予參數(shù),沒有參數(shù)個(gè)數(shù)限制參數(shù)分離傳遞給組件事件觸發(fā)通過表單提交submit激活,不能細(xì)化到表單里字段。能夠給于表單每個(gè)字段貼一個(gè)事件,事件組件必須實(shí)現(xiàn)PageListener接口同Tapestry,事件組件必須實(shí)習(xí)ActionListener 接口

  Struts組件編程模型

  Struts實(shí)現(xiàn)組件編程時(shí)有一些復(fù)雜:經(jīng)常為一個(gè)頁面中需要引入多個(gè)組件而頭疼,因?yàn)镾truts中無法直接引入多個(gè)組件,必須繞一些圈子:

  一般分兩種情況:假如同一個(gè)Action就可以對(duì)付這些組件,那么在這種情況下有兩個(gè)辦法:

  1.將這多個(gè)組件裝入一個(gè)ActionForm中,如使用MapForm等機(jī)制;

  2.手工將多個(gè)組件裝入request/session等scope中,然后根據(jù)其名稱在jsp中獲得。

  這兩個(gè)方法都有缺點(diǎn): 第一種辦法經(jīng)常一個(gè)ActionForm弄得面目全非,變成一個(gè)大雜燴,違反了OO分派封裝的原則;第2種辦法其實(shí)又回到j(luò)sp編程;

  第二種情況,假如這些組件必須有預(yù)先由不同的Action來處理,每個(gè)組件必須經(jīng)過Action -->ActionForm流程,在這種情況下有兩種辦法:

  1.使用Tiles, 不同流程輸出到同一個(gè)頁面的不同區(qū)域。是一種并行處理方式。

  2. 對(duì)多個(gè)流程首尾相連,第一Action forward結(jié)果是第二個(gè)Action,最后輸出一個(gè)Jsp,在這個(gè)jsp中就可以使用前面多個(gè)流程的多個(gè)ActionForm了,這屬于串行方式。

  Struts組件模型缺點(diǎn)

  Struts組件編程必須限定在Action/ActionForm/JSP這三個(gè)框框中做文章,難度相對(duì)比較大,而Tapestry/JSF則沒有太多這些技術(shù)框框限制,兩者在組件編程方面更讓編程者自由一些,方便一些,這也是組件型框架的優(yōu)勢吧。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌邑市| 霞浦县| 安化县| 抚宁县| 天台县| 青州市| 额尔古纳市| 永康市| 英吉沙县| 天等县| 新营市| 塘沽区| 盘山县| 茶陵县| 澄迈县| 平和县| 靖宇县| 威宁| 潞西市| 涪陵区| 泰安市| 岳西县| 永昌县| 漳平市| 四川省| 江城| 乌鲁木齐县| 凤台县| 云安县| 金阳县| 岐山县| 凤冈县| 灌阳县| 虞城县| 滕州市| 西吉县| 当雄县| 额尔古纳市| 佛学| 商城县| 青神县|