何曉桃鄭文豐
(1.廣東工業大學計算機學院,廣東廣州510006;2.廣東省科普信息中心,廣東廣州510040)
傳統網絡程序的開發是基于頁面的、服務器端數據傳遞的模式,把網絡程序的表示層建立于HTML頁面之上,功能單一、人機交互性差、安全性不高。傳統的基于頁面的系統已經漸漸不能滿足網絡瀏覽者的更高的、全方位的體驗要求。隨著Web技術的不斷發展,Web開發有了新的發展分支,即包含豐富用戶體驗的應用,這就是富互聯網應用(Rich Internet Applications,縮寫為RIA)。
Flex是RIA領域中的典型代表。Flex是一個針對企業級富互聯網應用的表示層解決方案。具體地說,Fles是一種應用程序框架,主要用于客戶端程序的開發。一個完整的Flex程序由MXML代碼和ActionScript代碼組成。MXML是一種基于XML的標記語言,在Flex技術中,MXML用于設計用戶界面,實現豐富的Flex表現層。從作用上來說,MXML和HTML的功能是基本一致的,都是設計用戶界面,但MXML提供了較HTML更為豐富的界面組件,并且在開發上更為結構化,條理更加清晰。MXML的編寫同樣類似于HTML,它通過標簽來定義和描述組件。ActionScript基于ECMAScript,是為Adobe Flash設計的面對對象的程序設計語言,在Flex開發中,ActionScript的基本作用類似于傳統網頁開發中的JavaScript,同時,ActionScript還要負責Flex程序的邏輯控制和業務建模。
XML是Extensible Markup Language的縮寫,稱之為可擴展標記語言。它具有開放性、簡單性、互操作性、自我描述性、可擴展性、內容和顯示分離、本地計算、個性化數據視圖、數據集成性等多種特點。其中數據集成性是指使用XML,可以描述和集成來自多種應用程序的不同格式的數據,使其能夠傳遞給其它應用程序,做進一步的處理。
本文正是利用XML的數據集成性,采用Flex作為表示層,J2EE作為后臺程序,以MySQL作為數據存儲,設計一套在線試題系統RIA。它改變傳統的在線試題管理系統的基于HMTL的表現層,提供了RIA應用的良好用戶體驗。
Flex技術遵循業界標準,采用XML(即可擴展標記語言)數據文檔綁定用戶界面組件,讓數據盡可能保持數據庫中的模式傳送到客戶端。XML文檔成為用戶界面組件和服務器端數據傳送到客戶端數據庫中進行通信的中介,即從數據庫獲得數據生成XML文檔傳送到用戶界面組件給用戶,或將用戶改動生成的數據生成XML文檔提供到服務器端解析后存入數據庫。Flex技術標準使得它很容易就跟外部XML文件進行通信。而且XML文件簡單小巧、存儲方便、檢索快速,Flex加載外部XML文件的代碼簡單快捷。同時Flex提供了一系列獨特的功能,包括:豐富的表現力、高執行效率、豐富媒體支持、脫機支持等。
通過Flex的HTTPService方式訪問服務器端數據,使遠程過程調用與服務器環境,如PHP、Adobe ColdFusion和Microsoft ASP.NET進行交互。獲得服務器端數據之后,以XML格式返回,再經過Flex解析后在頁面上顯示出來。

圖1 Flex與XML的集成應用
在線試題的題型包括單選題、多選題、判斷題、填空題和問答題。題目通過一個獨立的XML文件來描述。基于Flex的表現層通過XML對象訪問數據文件XML,并將XML文件中的數據解析后在界面上顯示出來。
針對單選題、多選題、判斷題、填空題和問答題5中題型分別設計5個XML文件:Choice.xml、MultipleChoice:xml、Judgement.xml、Filling.xml和Answer.xml用來存儲五種題型的試題信息,如題干、各備選項、正確答案以及解析。其XML文件具體的內容包括:題干、選項、答案和解析。單選題的XML文件描述如下所示:

其中<chapter>結點存放章節信息,<ti>存放的是一道題的試題信息,<title>存放的是題干信息,<body>存放的是各備選項信息,<answer>存放的是答案信息,<explain>存放的是試題解析。其它XML文件都是用相同的節點存放試題信息,這里就不列舉出來了。
RIA系統的后端,不限定何種服務端技術,使用PHP、J2EE、ASP.NET都可以。本文中使用PHP作為服務器端應用程序的開發語言,使用MySQL數據庫存儲所有的試題和相關信息。基于Flex技術的RIA系統通過Flex中內置的HTTPService組件訪問服務器端數據,采用POST方法調用一個PHP頁,關鍵代碼如下所示:


該PHP頁通過HTTP協議POST方式獲得提交的參數,并查詢MySQL數據庫,獲得所需數據,然后將結果數據以XML的結構通過HTTP響應形式返回給Flex頁面。
在RPC組件調用服務之后,服務返回的數據將放置在lastResult對象中。默認情況下,HTTPService組件和Web-Service組件操作的resultFormat屬性值為object,而返回的數據以ActionScript對象的簡單樹形式來表示。Flex解釋Web服務或HTTP服務返回的XML數據,以便相應地表示基本類型(如String、Number、Boolean和Date)。要使用強類型對象,您必須使用Flex所創建的對象樹來填充這些對象。
WebService和HTTPService組件均返回作為復雜類型的匿名Object和Array。如果makeObjectsBindable為true(默認值),則Object將包裝在mx.utils.ObjectProxy實例中,而數組將包裝在mx.collections.ArrayCollection實例中。

在處理返回結果時,如果不確信服務調用的結果是包含數組還是單個對象,您可以使用mx.utils.ArrayUtil類的toArray()方法將其轉換為數組,如前所示。如果將toArray()方法傳遞給單個對象,則該方法會返回一個數組,而該對象是唯一的Array元素。如果向方法傳遞一個數組,則該方法將返回同一個數組。
RIA(富互聯網應用程序)是將桌面應用程序的交互式用戶體驗與傳統的Web應用的部署靈活性和低成本相結合起來的下一代的網絡應用程序。Flex是一個輕量級、跨平臺、跨設備的企業級RIA應用程序的表示層解決方案,同時也是跨多個應用程序服務器平臺(PHP、J2EE和.NET)和客戶端操作系統(Windows、Mac OS、Linux等)。XML可以描述和集成來自多種應用程序的不同格式的數據,通過XML的自描述性和集成性,可以作為Flex和應用程序之間的數據傳遞的載體。Flex結合XML技術讓現有的Web技術得到了極大的保留,提高產品設計師和開發工程師的“開發體驗”,強化設計端和開發端的整合,使富互聯網應用程序(RIA)帶給用戶前所未有的用戶體驗。
[1]戴侃,楊小虎.基于J2EE和FLEX技術構建RIA系統的探索與實現[J].微電子學與計算機,2003,23(5):22-23.
[2]Adobe System.Flex Documentation[EB/OL].http://solution.myadobe.com.cn/.
[3]陳顯軍,魏祖寬.基于Flex的XML數據通信與應用研究[J].計算機與現代化,2008,03.
[4]楊占波等.Flex3RIA開發詳解與精深實踐一企業級Web應用與AIR桌面應用[M].北京:清華大學出版社,2009.
[5]陳燕等.基于XML和Flex的網絡考試系統的設計與實現[J].電子商務,2010,06.