国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
InfoQ: Java程序員學(xué)習(xí)Flex和BlazeDS的十三個理由

本文列述了13個Java程序員應(yīng)當(dāng)學(xué)習(xí)Flex和BlazeDS的理由,討論了為什么Flex結(jié)合BlazeDS是開發(fā)RIA的最佳組合之一。無論是高度交互的網(wǎng)站還是以Java為后端的企業(yè)應(yīng)用,這項組合都是最佳選擇之一。更重要的是,這項組合能同時為開發(fā)員和企業(yè)帶來高回報(ROI)。

在闡述Java程序員應(yīng)當(dāng)學(xué)習(xí)BlazeDS的13條理由時,我以一個假想的蘇打分派系統(tǒng)來展示如何讓已有的Java程序轉(zhuǎn)變?yōu)镽IA應(yīng)用。通過這個例子,我同時還會講解到BlazeDS在已有Java應(yīng)用或新建Java應(yīng)用中的多種不同用法。

理由一:開源

Flex軟件開發(fā)工具箱(SDK)的核心是個開源框架,專門用來開發(fā)、維護那些在不同瀏覽器、不同操作系統(tǒng)下界面都相同的RIA應(yīng)用。Flex發(fā)布采用的是Mozilla公共許可證(Mozilla Public License)。編譯后的Flex應(yīng)用在Adobe Flash平臺下運行。

BlazeDS是連接Flex和Java的索橋,是項針對遠(yuǎn)程調(diào)用和消息傳遞的開源技術(shù)。在Java應(yīng)用服務(wù)器上,它以servlet的形式存在,因此可以在任何標(biāo)準(zhǔn)Java網(wǎng)絡(luò)應(yīng)用中運用它。BlazeDS以LGPL(Lesser GNU Public License)公共許可證書發(fā)布。在發(fā)布BlazeDS的同時,Adobe還公布了AMF(ActionScript Message Format)規(guī)格說明,BlazeDS、Java和Flex客戶端間以這種簡潔的二進制格式實現(xiàn)通信。

理由二:完善的社區(qū)支持

Flex社區(qū)非常活躍,社區(qū)貢獻了大量項目。Flex.org,這個配以社區(qū)新聞的Adobe站點幾乎每天都有新的社區(qū)貢獻;Yahoo!上的Flex用戶組的成員也已經(jīng)超過了11000。

再比如Google Code上的Flexlib項目,已經(jīng)提交了大量的開源UI組件。Swiz和Mate項目貢獻了優(yōu)化事件處理的框架;還有Gorilla Logic貢獻了自動化UI測試的Flex Monkeym項目。

理由三:帶來廣闊的就業(yè)前景

據(jù)Adobe的Flex“傳道士”——James Ward看來,F(xiàn)lex高級開發(fā)員的市場需求非常大,學(xué)習(xí)Flex能讓你擁有極具市場競爭力的開發(fā)技能。

理由四:更高的業(yè)務(wù)效益回報

總體上,開發(fā)企業(yè)web應(yīng)用不是個輕松的活,這基本上是眾所周知的事實。Flex和BlazeDS提供的不僅僅是功能強大的開發(fā)工具,而且開發(fā)技術(shù)本身相對也非常簡單。開發(fā)效率可以得到大幅度的提升,產(chǎn)品因此可以很快推向市場。Flex和Flash帶來的用戶體驗也相對更有魅力,對增加流量、提高用戶轉(zhuǎn)化率(conversion rate)很有幫助。

很經(jīng)典的一個例子是Borders連鎖書店。他們最近發(fā)布了帶有“魔法書架”的新網(wǎng)站,這個網(wǎng)站采用Flash接口來模擬書籍借閱的過程。Borders 發(fā)現(xiàn)這一模擬借閱非常明顯地提到了用戶轉(zhuǎn)換率:“借助這個Flash驅(qū)動的接口,用戶可以瀏覽書籍、DVD和CD的封面,用戶轉(zhuǎn)換率比其他沒有此項功能的網(wǎng)站高出62%”。

理由五:Flex是第一個專門為創(chuàng)建UI而設(shè)計的語言

大部分語言都不是在第一時間設(shè)計其對UI的支持。Java中Swing包的實現(xiàn)剛好是個很好的證明。也就是這個原因,很多像捆綁數(shù)據(jù)這樣的簡單動作在Swing當(dāng)中的實現(xiàn)就非常痛苦。用 Swing最大的問題在于,要想提高開發(fā)效率就必須要對其API了如指掌。

Flex剛好相反,它是專門為創(chuàng)建web UI而設(shè)計的。正如Bruce Eckel所說,F(xiàn)lex是第一個針對UI開發(fā)的領(lǐng)域特定語言(DSL)。用Flex構(gòu)建UI比其它諸如JSP、JSF、Swing等技術(shù)簡便得多。語言本身糅合了數(shù)據(jù)綁定、事件處理、控件布局以及其它一些UI常用開發(fā)技巧,就算對語言沒有深刻的理解也不會影響開發(fā)效率。

理由六:編程風(fēng)格近似于Java

你可以繼續(xù)使用現(xiàn)有的Java開發(fā)工具來開發(fā)Flex應(yīng)用。當(dāng)然也可以采用SDK中攜帶的免費命令行工具,Adobe Flex Builder(一個Eclipse插件),或最近的IntelliJ IDEA 8。

Flex提供的是一個有狀態(tài)環(huán)境,在這個環(huán)境中,數(shù)據(jù)從客戶端加載。這種編程模式更像是開發(fā)桌面客戶端而非HTML編程,這種風(fēng)格對于用過Java Swing編程的開發(fā)員來說應(yīng)該是相當(dāng)熟悉。

Flex是MXML(類似XML的UI標(biāo)記語言)和Adobe ActionScript(面向?qū)ο蟮慕馕稣Z言)的結(jié)合體。鑒于這種結(jié)合方式,F(xiàn)lex編程與Java非常相似,因為兩者用的都是熟知的面向?qū)ο蟮母拍睢?/p>

最理想的開發(fā)環(huán)境是把Flex應(yīng)用創(chuàng)建在web部署文件夾下。這樣一來,每次更新應(yīng)用之后都不需要重新部署,只要在瀏覽器下刷新一下就可以了。用Flex和BlazeDS開發(fā)后,開發(fā)效率絕對比之前有很大的提升。

理由七:BlazeDS可以在任何Java應(yīng)用服務(wù)器上運行

BlazeDS目前已發(fā)布了多個版本,其中的turnkey版本還包含了為BlazeDS配置的Apache Tomcat。本文中,我用的是二進制發(fā)布版本,其中含有一個WAR用來展示如何把應(yīng)用部署到各種應(yīng)用服務(wù)器上去。不用這個WAR的話,你也可以從中提取 JAR文件放到自己的項目中去。關(guān)于安裝BlazeDS的各種選項內(nèi)容,可以參見BlazeDS的wiki。

這里舉一個簡單的例子,比方說要在已有的一個簡單的蘇打調(diào)配系統(tǒng)中應(yīng)用BlazeDS。你只要把JAR文件放到項目文件夾下,然后就可以在應(yīng)用里直接用BlazeDS,可以部署到能夠部署應(yīng)用的任何地方。

在項目中添加BlazeDS,只需要完成下面兩個步驟:

  1. 解壓縮BlazeDS WAR文件的內(nèi)容:jar xvf blazeds.war。
  2. 把JAR文件都拷貝到項目的lib文件夾下:cp -R WEB-INF/lib /sodaSample。

理由八:可以在已有Java應(yīng)用中運用

比方說這個簡單的蘇打調(diào)配系統(tǒng),假設(shè)你想要擴展這個已開發(fā)好的服務(wù),讓其它Flex應(yīng)用可以遠(yuǎn)程調(diào)用。在現(xiàn)成的應(yīng)用中配置BlazeDS的基本步驟有:

  1. 修改WEB-INF/flex文件夾下的BlazeDS配置文件
  2. 在該應(yīng)用對應(yīng)的web.xml文件里定義MessageBrokerServlet和session監(jiān)聽器

配置好BlazeDS之后,再把蘇打調(diào)配服務(wù)添加到BlazeDS遠(yuǎn)程配置文件里,F(xiàn)lex客戶就能遠(yuǎn)程調(diào)用了。這個過程通過在配置文件里定義一個目的地(destination)、一個或多個信道(channel)來傳輸數(shù)據(jù)。基本的AMF信道定義在services.xml文件里。下面這段配置在 remoting-config.xml里定義了目的地(destination):

<destination id="sodaService" channels="my-amf"><properties><source>com.gorillalogic.sodaSample.SodaService</source></properties></destination>

通過在遠(yuǎn)程調(diào)用配置文件里定義端點(endpoint),F(xiàn)lex客戶端就可以調(diào)用任何一個基本的Java服務(wù)。

要是想把Java數(shù)據(jù)模型也傳送到Flex客戶端的話,只要在ActionScript類中定義好兩者間的映射:

[Bindable][RemoteClass(alias="com.gorillalogic.sodaSample.SodaModel")]

這段代碼告訴Flex,在遠(yuǎn)程調(diào)用的服務(wù)返回SodaModel的時候,把它映射到Flex的SodaModel。本例中的Flex客戶端顯示的就是如何調(diào)用這個Java服務(wù)。調(diào)用返回一個已經(jīng)填寫好預(yù)定信息的SodaModel

public function callSodaService():void {var sodaType:String = type.text;var sodaCount:int = parseInt(cnt.text);var flag:Boolean = preOpen.selected;remoteObject.getSoda(sodaType, sodaCount, flag);}private function resultHandler(event:ResultEvent):void {var sodaModel:SodaModel = event.result as SodaModel;}

Flex返回的結(jié)果是通用的result變量,可以直接映射到你的SodaModel。這里我就不深入討論怎么實現(xiàn)映射了,但其中值得提到的是要在編譯配置里聲明services-config.xml路徑,像這樣:

-locale en_US -services=/nsource/sodaSample/web/WEB-INF/flex/services-config.xml -context-root /

如果不添加這個路徑的話,你的Flex客戶端就沒發(fā)找到Java服務(wù)。同樣的方式,你還能把一個對象從客戶端傳遞回服務(wù)器端。比如,你可以把一個空的soda model發(fā)回服務(wù)器(審校注:原文這里寫的是客戶端,根據(jù)上下文判斷這里應(yīng)該是服務(wù)器端)。

理由九:可以通過Java來擴展和修改BlazeDS

假如你想添加特殊的日志來記錄蘇打調(diào)配服務(wù)被調(diào)用的情況,那么你可以擴展標(biāo)準(zhǔn)的Java適配器來添加日志功能。

首先,添加一個繼承了JavaAdapter的Java類:

import flex.messaging.services.remoting.adapters.JavaAdapter.public class TimingJavaAdapter extends JavaAdapter  {

其次,重載invoke()方法:

public Object invoke(Message message) {RemotingMessage remotingMessage = (RemotingMessage) message;String operation = remotingMessage.getOperation();String destination = remotingMessage.getDestination();Logger.info("calling " + operation + " on destination " + destination);Object data = super.invoke(message);return data;}

這個方法中,你可以看到調(diào)用之后的操作和調(diào)用的目的地(destination)。這種方法也能用來處理其它一些問題,比如記錄向服務(wù)器發(fā)送調(diào)用需要多長時間。

理由十:HTML和JSP也能調(diào)用BlazeDS

從HTML和JSP也能調(diào)用BlazeDS,這種調(diào)用有幾種不同的實現(xiàn)方式,比如通過Browser Manager或fflashVarsf來實現(xiàn)。Flex應(yīng)用能夠讀取由HTML頁面設(shè)置的fflashVarsf。

比方說你想要通過HTML頁面來發(fā)送你的用戶名和準(zhǔn)備預(yù)定的蘇打類型,你可以在HTML頁面這樣設(shè)置flashVars

<object id='SodaSample' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab' height='100%' width='100%'><param name='src' value='SodaSample.swf'/><param name='flashVars' value='username=ryan&type=coke'/><embed name='mySwf' src='SodaSample.swf' pluginspage='http://www.adobe.com/go/getflashplayer' height='100%' width='100%' 	flashVars='username=ryan&type=coke'/></object>

然后,在Flex應(yīng)用中,你可以通過讀取應(yīng)用參數(shù)來獲取這些變量:

var username:String;if (Application.application.parameters.hasOwnProperty("username")) {username = Application.application.parameters.username;}

理由十一:Flex和BlazeDS的數(shù)據(jù)傳輸性能遠(yuǎn)勝于其它Ajax解決方案

目前使用的遠(yuǎn)程過程調(diào)用(RPC)都默認(rèn)選擇AMF二進制協(xié)議。AMF是個開放的標(biāo)準(zhǔn),而且相當(dāng)快。James Ward曾舉例比較過多種遠(yuǎn)程調(diào)用解決方案。盡管其它Ajax技術(shù)——比如Dojo——已經(jīng)能夠快速處理幾百行的數(shù)據(jù),但是用Flex和BlazeDS的話可以輕松搞定成千上萬行。(請參考James Ward's census,可以了解下各種不同的RIA數(shù)據(jù)加載技術(shù)的測評。)

理由十二:Java客戶端能夠直接調(diào)用BlazeDS

最新發(fā)布的BlazeDS當(dāng)中含有一個Java的AMF類,通過這個類,你可以在Java客戶端直接調(diào)用BlazeDS服務(wù)器。對于單元測試和加載測試來說,BlazeDS的這種調(diào)用方式非常實用。

理由十三:Spring下也能用

Adobe和Spring互相聯(lián)手,嘗試將雙方項目集成起來。他們發(fā)布的第一個Spring–BlazeDS集成版本就向大家展示了他們的良苦用心。Spring Bean能夠以遠(yuǎn)程服務(wù)的方式被調(diào)用,因此可以清除很多重復(fù)的配置文件。更多這方面的相關(guān)信息,可以參考該項目的主頁。

結(jié)論

開源的BlazeDS創(chuàng)建在Java基礎(chǔ)上,無論是對新的還是已有的Java服務(wù)器項目來說都是個很好的選擇。Flex、BlazeDS技術(shù)能夠提供高性能的遠(yuǎn)程通信,支持Flex和Java間的對象映射,因此是RIA開發(fā)的理想選擇。Flex和BlazeDS的開發(fā)新手,如果曾經(jīng)是Java開發(fā)員的話,會發(fā)現(xiàn)整個開發(fā)過程效率非常高,而且很容易掌握。

Flex加BlazeDS還是開發(fā)大型Java企業(yè)應(yīng)用的理想選擇。我們組開發(fā)的上個項目中,應(yīng)用涉及到50多個不同的界面,而且服務(wù)器和客戶端之間需要規(guī)律性地互傳幾千行的代碼。這類應(yīng)用幾乎沒法通過傳統(tǒng)的Ajax技術(shù)來實現(xiàn)。但是在引入了Flex和BlazeDS之后,我們在年內(nèi)就發(fā)布了第一個版本???,這就是這對動態(tài)組合為你的應(yīng)用開發(fā)項目帶來的過人之處。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
myeclipse如何安裝Flex builder4 插件
FlexBlazeDS在Java中進行AMF數(shù)據(jù)封裝通信
InfoQ: 使用BlazeDS和AMF構(gòu)建Web和桌面應(yīng)用
Flex新一代富客戶端技術(shù)淺析
Flex與Java通信 BlazeDS方式 最詳盡的解析
Flex論壇 Flex 2 ActionScript 3讀書清單
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服