瀏覽器的局限性
那么當(dāng)前的解決方法有什么問題嗎?假如應(yīng)用程序運(yùn)轉(zhuǎn)正確且答應(yīng)用戶是有生產(chǎn)力的,那么可能沒什么錯誤。但是曾經(jīng)有很多web開發(fā)員抱怨當(dāng)使用瀏覽器作為客戶機(jī)時會限制性能。 這是一些當(dāng)前開發(fā)web應(yīng)用程序時碰到的問題:
1.瀏覽器以不一致的方式解釋scripting 語言, 譬如java 語言。 這迫使開發(fā)員多次寫同樣的代碼來調(diào)節(jié)各個瀏覽器。
2.簡單用戶接口會影響到譬如選中, 基于向?qū)У谋韱? 和大表格數(shù)據(jù)集的處理,這使得在瀏覽器上需要更多額外的代碼。
3.Html 是有限的,靜態(tài)的標(biāo)記語言是無法是擴(kuò)展的。
4. 在用戶接口之內(nèi)進(jìn)行事件處理可能是富挑戰(zhàn)性的。 因?yàn)楸环答伒腍TML 頁一次只能被顯示一頁, 而事件沒有回到服務(wù)器之前又是無法更新其它頁的。
5. 只能通過Cookie來達(dá)到連續(xù)的應(yīng)用狀態(tài),Cookie它是不支持對象的。
6.使用瀏覽器開發(fā)偶然連接的客戶機(jī)幾乎是不可能。
很多Web開發(fā)員都知道這個事實(shí): 當(dāng)前工具設(shè)置有局限性。當(dāng)在瀏覽器上工作時開發(fā)員必須查找解決方法。 對于開發(fā)員和用戶來說用一臺瘦客戶機(jī)是承受不了當(dāng)前的性能的。
Rich Internet applications
為了克服這些局限性, 考慮用RIA來開發(fā)。 如今RIA給用戶一臺胖客戶機(jī)來擴(kuò)展瀏覽器所承受不了的性能。 最普遍應(yīng)用的J2.EE 的RIA 客戶機(jī)是Java 和Flash。 當(dāng)開發(fā)大型的數(shù)據(jù)中心的應(yīng)用程序時, RIAs 真的是很強(qiáng)的。開發(fā)RIA的幾個可行方法是JDNC (JDesktop Network Components), Laszlo, Thinlet, Java Web Start, 和Macromedia Flex。
RIA能解決問題前面已經(jīng)說過了。 下面是RIAs的一些特征:
1. RIAs提供了和瀏覽器一樣的UI組件, 而且它還提供新的本地的更加豐富的組件。 比如包括一個數(shù)字步進(jìn), 滑動控制, 一個軸向數(shù)據(jù)網(wǎng)格要素和菜單欄。
2.成熟的RIA應(yīng)用答應(yīng)布局治理器由如下構(gòu)成,譬如制表符瀏覽器, 折疊,樹結(jié)構(gòu)和其它能和AWT and Swing開發(fā)相媲美的布局控制。
3.RIAs 提供拖放能力。
4.RIA 里的語言是一致的,它貫穿于所有客戶機(jī), 不必為不同的實(shí)施而重寫。
5.在用戶接口,不必每個action都是請求/回應(yīng)模式。通過富互聯(lián)網(wǎng)應(yīng)用,用戶與UI 相互對話,假如需要也只需要向服務(wù)器發(fā)出請求。 RIAs 會運(yùn)用HTTP 協(xié)議方法把數(shù)據(jù)提交給應(yīng)用服務(wù)器。但是, 通常更好的用RIAs的機(jī)制是遠(yuǎn)程, 它會根據(jù)RIA 來支持不同的方式。RIAs提供擴(kuò)展的與HTTP進(jìn)行通訊的協(xié)議。
6.事件處理橫跨多個組件是可能的。
7.RIAs 答應(yīng)您不使用Httpsession就可以在客戶機(jī)存儲更多信息。 這減少了在應(yīng)用服務(wù)器里所占的內(nèi)存。
8.狀態(tài)的連續(xù)廣播, 通常是以對象的形式,它提供了創(chuàng)建偶然連接的客戶機(jī)的可能性。
RIA是相當(dāng)新的技術(shù),它介紹了開發(fā)時涉及到的應(yīng)用。 它不能解決所有應(yīng)用, 它是要依靠某種實(shí)現(xiàn)。 但是, 假如您認(rèn)為您的應(yīng)用可受益于一個更加富有的UI 設(shè)計(jì), 那么RIA 也許就可以為您服務(wù)。 本文現(xiàn)在將集中于一個RIA 解決方法, Macromedia Flex, 并且集中討論一下。
Macromedia Flex
Macromedia Flex是RIA的一臺商業(yè)表示層服務(wù)器。因?yàn)檫@是Flex applications.用的環(huán)境,所以必需要安裝Flash插件。 多數(shù)瀏覽器已經(jīng)裝備了Flash插件,對于RIA來說這也有助于正當(dāng)使用Flex。 我們來討論一下不用Java 插件而使用Flash插件來與J2.EE 應(yīng)用服務(wù)器通話的意義所在。
開發(fā)員使用二個核心語言創(chuàng)建Flex應(yīng)用。 第一核心語言是Mxml, 即Macromedia Flex Markup Language,它擁有一套豐富的XML 標(biāo)簽,這些標(biāo)簽答應(yīng)開發(fā)員設(shè)計(jì)用戶接口。 MXML 也可以被認(rèn)為是XUL, 或XML UI 語言。不同于HTML,這些標(biāo)簽是可以擴(kuò)展的, 它擁有應(yīng)用程序所需要的額外能力。 其他MXML 結(jié)構(gòu)可以被叫做遠(yuǎn)程對象, 在model中存儲返回的數(shù)據(jù), 并且對MXML 構(gòu)件可以自定義您自己的感觀。
第二個Flex開發(fā)核心語言是ActionScript 2.0, 它是一個ECMA 支持的語言,與Javascript 語言類似。 ActionScript 原理是被編碼在MXML 頁里面的。 這是較強(qiáng)的面向?qū)ο蟮恼Z言,這對于java開發(fā)者來說是比較熟悉的。 ActionScript 而且有很大的事件處理能力,它答應(yīng)應(yīng)用程序回應(yīng)動態(tài)用戶交互。 由于ActionScript 運(yùn)行在Flash插件里面,所以它不同于在瀏覽器里進(jìn)行JavaScript編碼,不需要重寫幾個同樣編碼的版本來支持不同的瀏覽器。MXML 和ActionScript 是基于文本的語言, 可以寫在一個簡單文本編輯器或 一個IDE 工具譬如Eclipse, 或一個更加老練的工具象由Macromedia 公司的Flex Builder里。 假如您接觸過Java, XML, 和scripting 語言譬如JavaScript 語言的話, 那么您在學(xué)習(xí)Flex時就要稍微轉(zhuǎn)下彎了。
Flex服務(wù)器負(fù)責(zé)把MXML 和ActionScript 組件轉(zhuǎn)換成以.SWF 文件的形式的Flash字節(jié)碼。這個過程類似于用Java Web應(yīng)用容器把jsp 文件編譯成servlets。在Flash運(yùn)行環(huán)境下,SWF 文件被執(zhí)行在客戶機(jī)里。 Flex服務(wù)器提供其它服務(wù)譬如緩存, 并發(fā), 和處理遠(yuǎn)程對象請求。
給您現(xiàn)有的結(jié)構(gòu)介紹一個RIA 框架
現(xiàn)在你對RIA 概念的已經(jīng)有些了解了, 讓我們看看怎么把RIA 引入到您現(xiàn)有的結(jié)構(gòu)中去。 其中我們也將著重論述怎樣把RIA表現(xiàn)在一個層狀應(yīng)用中。 此外, 也會講到當(dāng)用Flex與一些普遍的公開的框架的結(jié)合開發(fā)時存在的一些潛在的問題。 這些實(shí)例將有助于引入RIA 到您的結(jié)構(gòu)中去。
就讓我們先由辨認(rèn)層狀結(jié)構(gòu)開始。一個結(jié)構(gòu)可能包括以下幾層: 表示層, 業(yè)務(wù)代表層,業(yè)務(wù)綜合服務(wù)層, 和持久層。 這是各自層的基本實(shí)現(xiàn):
Flex + Business Delegates + SPRing Framework + Hibernate
接下去的內(nèi)容將集中講解每一層。
我現(xiàn)有的MVC 表示層是怎么樣的?
在Web應(yīng)用程序中表示層是用來給用戶傳遞用戶界面, 處理后端服務(wù)請求, 并且存儲信息數(shù)據(jù)模型用的。對剛接觸RIA的開發(fā)員最初可能會傾向于重新使用現(xiàn)有的Struts。 但是, 象Flex這些開發(fā)產(chǎn)品都提供了他們自己的MVC 結(jié)構(gòu)。 難道您真地需要維護(hù)一個包括二個MVC 結(jié)構(gòu)的表示層嗎?
以下是當(dāng)Flex客戶機(jī)通過Struts組件向Java 服務(wù)器作出請求時的實(shí)例。在被更高層接收之前,F(xiàn)lex客戶機(jī)的請求會先被發(fā)送到Struts表示框架。 圖1 顯示了哪些是不做的:
圖1 。怎樣不集成Flex and Struts和其它Java組件。
表示框架譬如Struts是由HTTP傳送HTML 請求來運(yùn)行的。 當(dāng)用Flex客戶機(jī)來使用HTTP 協(xié)議時, 開發(fā)員就會出于對性能和面向?qū)ο蟮膬?yōu)點(diǎn)考慮,通過HTTP來使用遠(yuǎn)程對象而反對提交請求的方式。 所以, 有序化的使用這兩個表示框架會提供協(xié)議配錯。 除非您有特定需要直接地用RIA來集成Strut ,這樣才可以避免。 圖2 顯示一個當(dāng)使用Flex 和 Struts時更好的解決方法
圖2 。 介紹Flex 和 Struts與其它Java 組件
圖2 建議怎么安排分離的Flex組件 和 Struts組件共存。 但這是有條件的,這需要在當(dāng)應(yīng)用程序請求并行RIA 組件和輕量Struts組件的時候。
開發(fā)員應(yīng)該運(yùn)用RIA 客戶機(jī)來做點(diǎn)什么。對于那些熟悉頁面請求應(yīng)答模式的傳統(tǒng)Web開發(fā)員來說,這是一個明確的思想上的轉(zhuǎn)變。象Flex這樣的RIA 產(chǎn)品并非像Struts一樣是請求或回應(yīng)驅(qū)動。 RIA 客戶機(jī)負(fù)責(zé)在任何情況下更新UI而不必回到服務(wù)器。
當(dāng)使用RIA時Struts不只是您唯一想的事了。 熟悉這類型技術(shù)需要時間。 在經(jīng)歷這些曲折以后, 最大的問題是Java服務(wù)器端組件的綜合化。 這也并非是針對RIA概念。
新聞熱點(diǎn)
疑難解答
圖片精選