成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSF和AJAX企業(yè)級(jí)開(kāi)發(fā)之路(一)

開(kāi)發(fā) 后端
本文介紹JSF和AJAX企業(yè)級(jí)開(kāi)發(fā)之路,以及為什么JSF要與AJAX整合?

我的目在JSF和AJAX的整合。不管你選擇什么版本的JSF,與AJAX的整合對(duì)于構(gòu)建企業(yè)級(jí)應(yīng)用程序來(lái)說(shuō)是一個(gè)不錯(cuò)的選擇。我會(huì)給大家展示這兩種技術(shù)結(jié)合的方法,我特意增加了一些新內(nèi)容——因?yàn)樵谶@之前,已經(jīng)有了JSF和AJAX的實(shí)際測(cè)試方法,但這種測(cè)試方法出現(xiàn)并不只局限于與JSF整合的AJAX應(yīng)用,任何AJAX應(yīng)用程序都可以使用.最后,我還會(huì)陳述一下如何評(píng)價(jià)JSF和AJAX的解決方案. 現(xiàn)在,我發(fā)現(xiàn)JSF與最初的2001年所處的情況驚人的相似——那個(gè)時(shí)就已經(jīng)有許許多多的web框架,真可謂是百家爭(zhēng)鳴,而JSF在其中脫穎而出,以絕對(duì)優(yōu)勢(shì)成為JCP標(biāo)準(zhǔn).但現(xiàn)在,這種局面再次出現(xiàn)了.在過(guò)去的六年,我們始終緊跟時(shí)代的步伐,但仍然還有大量的web框架鏖戰(zhàn)在我們周?chē)歉鶕?jù)從采用JSF技術(shù)的網(wǎng)站數(shù)據(jù)以及供應(yīng)商為之提供的工具和組件數(shù)量來(lái)看,JSF還是在不斷增長(zhǎng)且在市場(chǎng)上仍有一席之地,因此許多供應(yīng)商也相繼推出了JSF和AJAX整合方案.在今天下午2:30的小組討論中,我和來(lái)自ICEsoft的Steve Maryka會(huì)一同出席,大家也許已經(jīng)知道Steve已經(jīng)推出一套相當(dāng)漂亮的JSF和AJAX整合方案.屆時(shí)我會(huì)以Sun代表身份出現(xiàn),當(dāng)然除Steve外,還有很多知名人士,我會(huì)將他們的姓名列在幻燈片上.但不管怎樣,我只想給你們提供一些信息,以便當(dāng)你看完這些不同的解決方案后,捫心自問(wèn):哪一個(gè)方案是最佳的?它有什么特性?這些特性可以滿足我的企業(yè)要求嗎? 

“企業(yè)級(jí)”已經(jīng)是一個(gè)被過(guò)度濫用的術(shù)語(yǔ)了.那么按照我自己的理解,企業(yè)級(jí)指的是健壯,可伸縮,易于測(cè)試以及被業(yè)界證明可用性(industry proven)等.它需要被開(kāi)發(fā)人員證明切實(shí)可行!JSF滿足上述要求,因?yàn)閯偛盼宜v的大量的站點(diǎn)和大量的供應(yīng)商支持足以證明這一點(diǎn).另一個(gè)關(guān)于“企業(yè)級(jí)”的說(shuō)法是:易于使用,易于開(kāi)發(fā),當(dāng)然也包括易于測(cè)試.TDD(測(cè)試驅(qū)動(dòng)開(kāi)發(fā))我的確喜歡,當(dāng)我在領(lǐng)導(dǎo)團(tuán)隊(duì)開(kāi)發(fā)一個(gè)JSF實(shí)現(xiàn)時(shí),我們所做的一切都采用了TDD,并且效果顯著.當(dāng)然,“企業(yè)級(jí)的工具”也需要同時(shí)能夠滿足開(kāi)發(fā)人員的需求.這一切往往在職場(chǎng)上扮演重要角色:你會(huì)雇用什么樣的人才?他們所掌握的技能能夠勝任這個(gè)開(kāi)發(fā)工具嗎?現(xiàn)存的開(kāi)發(fā)工具是否又能滿足他們的要求呢?并且最后一點(diǎn)我要強(qiáng)調(diào)的是:良好的可擴(kuò)展性觀念.當(dāng)你所遇到的問(wèn)題越來(lái)越多時(shí),你所依賴(lài)的解決方案也要不斷的提供抽象來(lái)解決這些不斷增長(zhǎng)的問(wèn)題,此時(shí)JSF作為一個(gè)基于組件和多個(gè)擴(kuò)展的解決方案,支持抽象和組件化滿足了可擴(kuò)展性.這就是我所定義的“企業(yè)級(jí)”概念. 

那么我所指的AJAX,也在這里告訴給大家吧:web應(yīng)用程序通過(guò)使用異步機(jī)制與服務(wù)端進(jìn)行交互,并且動(dòng)態(tài)更新瀏覽器所顯示頁(yè)面的外觀和行為.這么來(lái)定義AJAX我覺(jué)得還是有稍稍有點(diǎn)生硬.如果你與ICEsoft接觸過(guò),你會(huì)發(fā)現(xiàn)他們已經(jīng)有了AJAX的“推”模式,使用了大量技術(shù)可以異步的將內(nèi)容通過(guò)瀏覽器發(fā)送出去.大家熟知的Comet就是這種編程模式的一種實(shí)踐,它在與AJAX整合時(shí)非常有用,不過(guò)今天我沒(méi)有在幻燈片上提供任何關(guān)于它的信息,但是可以很明確地的說(shuō):Comet就是為與AJAX整合,當(dāng)然也包括與JSF的整合.

好了,說(shuō)完了的目的后,正式開(kāi)始我們今天的議程吧.為什么JSF要與AJAX整合?為什么我會(huì)強(qiáng)調(diào)AJAX對(duì)于web應(yīng)用程序來(lái)說(shuō)是必須的?JSF和AJAX的整合方法有很多.其中JSF本身的設(shè)計(jì)和特性就使得它適合協(xié)同AJAX進(jìn)行開(kāi)發(fā).下面是我們調(diào)查到的一些問(wèn)題和解決方案.

一個(gè)解決這些問(wèn)題的方案來(lái)自于Project Dynamic Faces(JSF的一個(gè)AJAX擴(kuò)展)和MCP(Mozilla Control Program,使用JUnit或TestNG來(lái)自動(dòng)測(cè)試web應(yīng)用程序的一個(gè)包).這是一個(gè)很早就有的解決方案,當(dāng)時(shí)我還在www.mozilla.org工作時(shí)已經(jīng)有些Alpha級(jí)的技術(shù)來(lái)自動(dòng)測(cè)試AJAX程序.現(xiàn)在我手頭上有一些關(guān)于它的demo。

所有的web應(yīng)用程序必須經(jīng)過(guò)下列過(guò)程.為確保萬(wàn)無(wú)一失(motherhood applepie:美國(guó)黑話或政治家慣用的說(shuō)語(yǔ)),你需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)驗(yàn)證,需要一種機(jī)制來(lái)指定頁(yè)面流程(page flow),需要整合數(shù)據(jù)庫(kù).當(dāng)然,你也許還會(huì)用持久層技術(shù),比直接就可用的JAP和Hiberante.你還需要alphabet soup,國(guó)際化,本地化,以及易于訪問(wèn).而這說(shuō)到的最后一點(diǎn),自AJAX它誕生以來(lái),就一直是開(kāi)發(fā)人員的痛.AJAX的反對(duì)者們大聲嚷嚷:“好啊,你別想向政府部門(mén)賣(mài)出任何AJAX應(yīng)用程序,因?yàn)橛蠸ection 508法案.”的確,有大量的實(shí)事擺在了面前,但不管怎么樣,web應(yīng)用程序必須是易于訪問(wèn)的.即使當(dāng)你在制作頁(yè)面的時(shí)候,你也需要考慮到對(duì)多語(yǔ)言的支持,以及基于CSS的樣式設(shè)計(jì).同樣,它還需要保證,不管在單元測(cè)試還是系統(tǒng)測(cè)試級(jí)別上都要求是可測(cè)試的.最后一點(diǎn)就是用戶體驗(yàn)了,所有這一切來(lái)來(lái)回回最終還是從開(kāi)發(fā)人員到測(cè)試人員然后再到達(dá)最終用戶.

現(xiàn)在,各種不同整合JSF和AJAX的方法都是為了降低復(fù)雜度。我現(xiàn)在為這些解決方案亮起了紅燈。(這些解決方案都)有很多的贊成和反對(duì)的聲音,但亮起的紅燈表明反對(duì)占了上風(fēng)。那么我要說(shuō)的第一個(gè)整合JSF的方式就是直接使用Naked AJAX(未經(jīng)過(guò)任何封裝的AJAX),你打算一切靠自己,什么都打算自己寫(xiě)! Frank Zammetti寫(xiě)了一本書(shū),他發(fā)明了“Naked AJAX”這個(gè)術(shù)語(yǔ),指的是你不使用任何AJAX框架,全部由自己親自來(lái)完成。如果你這么做,你會(huì)深入的理解AJAX底層的技術(shù),因此很可能你在職業(yè)上炙手可熱并且這也一切也確實(shí)是你想要得到的話,那么我不得不說(shuō)你太有才了。

你必須親自處理所有的使用XMLHttpRequest的交互請(qǐng)求,這就要求你有扎實(shí)的JavaScript基本功,使用SetTimeout函數(shù)等以及一系列常人所不愿意使用的技術(shù)。到時(shí)候,你還不得不去解決跨瀏覽器之痛,而這種痛苦對(duì)于web開(kāi)發(fā)人員來(lái)說(shuō)已經(jīng)持續(xù)多年,最后為了與它有一個(gè)了斷,你還是陷入了開(kāi)發(fā)自己框架的沼澤之中。

第二個(gè)解決方案顯得更高級(jí)些,因?yàn)槟闶褂昧薐avaScript框架。現(xiàn)在已經(jīng)有大量可用的JS框架充斥在我們周?chē)热鏒ojo,DWR,Prototype等,這些框架也是今天要討論的內(nèi)容。但使用這些JS框架的話,你仍然需要去為你的web應(yīng)用程序編寫(xiě)代碼,而且一旦在JSF中使用了某個(gè)JS框架(比如說(shuō)Dojo)的話,你又要去編寫(xiě)那些侵入性代碼了。

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

Struts標(biāo)簽庫(kù)

在Struts中,經(jīng)常需要使用標(biāo)簽庫(kù)來(lái)顯示組件ActionForm中內(nèi)容,這就涉及到一個(gè)結(jié)合的問(wèn)題,標(biāo)簽庫(kù)是別人寫(xiě)的,參考Struts的標(biāo)簽庫(kù)用法,而組件是自己的,難度和麻煩就體現(xiàn)在這個(gè)結(jié)合點(diǎn)上。

JSF基本思路和Struts差不多,只不過(guò)換了不同標(biāo)簽庫(kù),也需要標(biāo)簽庫(kù)+組件的結(jié)合思考,不過(guò)因?yàn)榻M件這里是通用組件,沒(méi)有什么限制,所以這樣比Struts要輕松一些。

Tapestry使用了組件庫(kù)概念替代了標(biāo)簽庫(kù),沒(méi)有標(biāo)簽庫(kù)概念,這樣就沒(méi)有標(biāo)簽庫(kù)和自己的組件需要結(jié)合的問(wèn)題,都是組件的使用,組件中分Tapestry標(biāo)準(zhǔn)組件和自己定義的組件,這也是接觸了Jsp體系的人學(xué)習(xí)Tapestry面臨的一個(gè)思路轉(zhuǎn)換。

具體以頁(yè)面跳轉(zhuǎn)為例子,頁(yè)面跳轉(zhuǎn)是靠鏈接 實(shí)現(xiàn),鏈接是頁(yè)面經(jīng)常使用的元素。

Struts提供的html:link在頻繁使用就特別不方便,尤其在傳遞多個(gè)參數(shù)時(shí):其中html:link的page值,是跳轉(zhuǎn)對(duì)方頁(yè)面或 Action的path,這個(gè)path一般需要到struts-config.xml查找Action的相應(yīng)path,一旦配置文件path值修改,涉及到這個(gè)所有相關(guān)頁(yè)面都要修改。

JSF將鏈接概念劃分兩個(gè)方面:導(dǎo)航性質(zhì)和事件激活,在導(dǎo)航方面還是需要到配置faces-config查詢(xún)Navigation的from-outcome的值。

由于Tapestry沒(méi)有標(biāo)簽庫(kù)概念,只有組件或頁(yè)面兩個(gè)概念,因此,鏈接跳轉(zhuǎn)目標(biāo)要么是組件,要么是頁(yè)面,簡(jiǎn)潔簡(jiǎn)單,它沒(méi)有多余的path概念,就是組件名,也就是對(duì)象名稱(chēng),組件名稱(chēng)和path名稱(chēng)合二為一。

總結(jié)

JSF在很大程度上類(lèi)似Struts,而不是類(lèi)似Tapestry,可以說(shuō)是一種Struts 2.0,都是采取標(biāo)簽庫(kù)+組件的形式,只是JSF的組件概念沒(méi)有象Struts那樣必須繼承ActionForm的限制;JSF在事件粒度上要細(xì)膩,不象 Struts那樣,一個(gè)表單一個(gè)事件,JSF可以細(xì)化到表單中的每個(gè)字段上。

JSF只有在組件和事件機(jī)制這個(gè)概念上類(lèi)似Tapestry,但是不似Tapestry那樣是一個(gè)完全組件的框架,所以,如果你做一個(gè)對(duì)頁(yè)面要求靈活度相當(dāng)高的系統(tǒng),選用Tapestry是第一考慮。

Struts/JSF則適合在一般的數(shù)據(jù)頁(yè)面錄入的系統(tǒng)中,對(duì)于Struts和JSF的選用,我目前個(gè)人觀點(diǎn)是:如果你是一個(gè)新的系統(tǒng),可以直接從JSF開(kāi)始;如果你已經(jīng)使用Struts,不必轉(zhuǎn)換,如果需要切換,可以將JSF和Tapestry一起考慮。

另外,JSF/Tapestry不只是支持Html,也支持多種客戶端語(yǔ)言如WML或XUI等。

這三者之間關(guān)系:如果說(shuō)Struts是左派;那Tapestry則是右派;而JSF則是中間派,中庸主義是SUN聯(lián)盟的一貫策略。

當(dāng)然,你也可以發(fā)表你在實(shí)踐中這三者任何一個(gè)的使用感受,以使得后來(lái)者有一個(gè)比較。

【編輯推薦】

  1. JSF和Spring的集成
  2. JSF中使用自定義Navigation
  3. 簡(jiǎn)單介紹JSF應(yīng)用
  4. JSF動(dòng)態(tài)生成固定表頭和行標(biāo)的DataTable
  5. JSF和JSP是一對(duì)新的搭檔
責(zé)任編輯:佚名 來(lái)源: theserverside
相關(guān)推薦

2009-06-23 15:02:56

JSF和AJAX

2010-08-04 15:20:15

Flex企業(yè)級(jí)開(kāi)發(fā)

2013-09-02 10:28:09

NoSQL

2011-12-06 14:02:27

企業(yè)級(jí)移動(dòng)開(kāi)發(fā)

2010-04-07 08:55:00

OSGiSpring

2009-03-30 09:42:28

OSGiJavaJCP

2009-12-14 20:13:57

IBM

2012-05-15 15:21:29

企業(yè)級(jí)

2012-06-21 09:51:42

虛擬化

2013-08-28 09:24:09

企業(yè)級(jí)移動(dòng)信息化解決方案

2011-07-05 14:07:36

2013-12-08 21:16:21

BaaS企業(yè)級(jí)移動(dòng)移動(dòng)信息化

2017-03-21 10:22:09

移動(dòng)開(kāi)發(fā)

2024-03-11 09:50:09

模型開(kāi)發(fā)

2013-08-01 00:00:00

開(kāi)發(fā)企業(yè)級(jí)App出路

2015-08-21 09:06:53

SaaS

2013-11-01 09:25:19

大數(shù)據(jù)HadoopSpark

2009-07-24 13:37:29

SilverlightSilverlight

2020-07-06 07:50:13

Redis開(kāi)發(fā)運(yùn)維

2014-09-24 13:32:41

企業(yè)號(hào)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人在线a | 免费h在线 | 欧美日韩久久精品 | 久久精品免费 | 久久久久香蕉视频 | 成人黄色av网站 | 天天干天天操天天射 | 国产乱码精品1区2区3区 | 亚洲精品乱码久久久久久久久 | 91精品国产一区二区三区蜜臀 | 国产一级片免费在线观看 | 日韩欧美国产一区二区 | 中文视频在线 | 极品销魂美女一区二区 | 午夜精品一区二区三区在线 | 一区二区三区av | 男人阁久久 | 人人澡视频 | 国产高清精品一区 | 日韩中文字幕在线观看视频 | 亚洲天堂一区 | 成人亚洲精品 | 日韩在线观看中文字幕 | 久久精品亚洲成在人线av网址 | 精品久久久av | 亚洲视频二区 | 蜜桃视频在线观看免费视频网站www | 亚洲 欧美 日韩 精品 | 日韩精品免费 | 女人av| 精品久久久久久红码专区 | 2018中文字幕第一页 | 一级毛片成人免费看a | 亚洲欧洲av在线 | 91精品国产乱码久久久久久久 | 成人免费激情视频 | 国产日韩欧美一区 | 欧美亚洲国产成人 | 激情五月婷婷丁香 | 精品国产一级 | 久久网一区二区 |