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