楊 健,張曉玲,楊鄧奇
(大理學院數學與計算機學院,云南大理 671003)
移動學習是一種在移動計算設備幫助下的能夠在任何時間任何地點開展的學習,其所使用的移動計算設備必須能夠有效呈現學習內容,并提供教師與學習者之間的雙向交流〔1〕。目前高等學校在校生平均人手擁有一臺甚至多臺的便攜式移動設備(智能手機、平板電腦、PDA等),而在日常課程學習的間歇和各種各樣的等待時間里,這些移動設備除了作為通信設備來使用以外,似乎唯一的功能就是上網、娛樂。這也使得大好的時間和便攜的學習工具(資源)被浪費,沒有用于專業技能知識的提高上。利用移動學習作為高校教學的輔助學習手段可以進一步提高學生充分利用各種學習時間的能力〔2-3〕。
另一方面,作為兩大移動平臺操作系統之一的Android,盡管諸如碎片化、安全漏洞等問題讓其屢遭詬病,但截至2014 年7 月,其市場份額卻一舉超越iOS,成為市場占有率最大的移動平臺操作系統。在Android 下開發移動學習系統首選的語言工具是Java。此外,Google 以及其他開源軟件組織也為Android 平臺下Java 應用軟件的開發提供了良好的支持,如 Eclipse for ADT(Android Development Toolkit)等。在Android下開發基于Java的移動學習系統,在移動平臺前端開發方案的選擇上有兩個:使用瀏覽器作為瘦客戶端或開發自有的Java 客戶端界面。這兩種方案各有優缺點:前者不需要開發客戶端軟件,只需要安裝瀏覽器即可,但受制于瀏覽器的功能,無法提供移動學習系統中應當有的各種多媒體交互學習能力,且界面表現和跳轉等受到一定的限制;后者雖然需要開發前端App 軟件,但可以根據需要提供各種音視頻及復雜的交互能力,從而進一步提高學習者的學習效果。
本文考慮建立Android 系統下的移動學習系統,主要應用環境是為在校學生提供移動學習服務,通過多媒體展現形式提高學生學習興趣,同時建立學習過程中教師與學生的互動交流,從而增強學生的學習效果。論文提出了系統結構和功能,并詳細介紹系統中前端和后端的遠程信息交換方案。內容主要包括:首先將介紹Android 系統下基于Java的移動學習系統功能和結構,接下來將針對本系統中用于遠程信息交換的Web Service 開發和訪問提供解決方案,最后一節進行總結并提出需要進一步解決的問題。
考慮到移動設備在存儲、計算和續航能力上所受的約束,應盡可能地將復雜的耗能的計算任務進行分解,并形成類似于C/S(客戶/服務器)模式的結構,其中客戶端(移動設備)面向用戶展示學習內容、通知公告,同時提供交互界面,而服務器端則使用PC界面提供給管理員和教師進行輔助管理及學習內容、測驗試題和公告的管理〔4-5〕。根據本系統的需求進行分析,得出系統的功能模塊。見圖1。

圖1 系統功能圖
上述系統功能中,學習者使用移動設備登錄客戶端系統進行學習,各模塊中最重要的就是學習、測驗和交流互動3 個子系統,而這3 個子系統在實現中是相互提供功能的。例如,學習過程中可能調用測驗子系統進行知識點相關例題的選擇,還可以直接針對當前知識點向教師進行提問,或者查看教師對以前問題的回答;而學習交流論壇中,也可通過學習知識點的鏈接來確定交流的主題。服務端系統是在PC 機上建立Java EE 應用來實現的,并且通過無線網絡給客戶端提供所需的信息(主要包括學習的知識點、試題、公告通知和學習相關多媒體文件的傳輸)。服務器端的使用者除了教師以外,還需要有教務系統的管理員來完成非教學所需的信息管理相關操作。
從圖1中可以看到,本系統的兩大子系統之間需要進行頻度較高的、數據量較大的信息交換,在客戶端與服務器之間需要有高效的信息傳輸方法。為了讓客戶端的Android 應用與遠程服務器之間進行交互,一種方法是借助于Java 的RMI(Remote Method Invocation)技術,但這要求遠程服務器程序必須采用Java 實現,不利于以后后臺服務端的擴展。當然,也可以借助于CORBA(Common Object Request Broker Architecture)技術,但這種技術過于復雜。除此之外,Web Service是一個較好的選擇。
系統采用Web Service 作為客戶端與遠程服務器信息交互手段,由于系統前端為Android應用,后端為Java EE應用服務器,因而建立如圖2所示的整合架構圖。

圖2 客戶端Android應用與服務器端的整合架構
Web Service 是本系統中最為重要的組成部分,由后臺的Java EE 應用來提供服務,供移動客戶端調用,從而實現移動客戶端與服務端的信息交互。下面著重介紹Web Service的基本概念,并提出本系統中的Web Service的構建方法。
2.1 Web Service 及關鍵技術根據W3C(萬維網聯盟)對 Web Service 的定義〔6〕,Web Service 技術使得在不同機器上的不同應用可以相互交換數據或集成,且無須借助附加的、專門的第三方軟件或硬件。由于基于一些常規的產業標準以及已有的一些技術,諸如標準通用標記語言下的子集XML、HTTP等,Web Service很容易部署。
Web Service涉及的關鍵技術有:
1)XML:可擴展標記語言,是表示Web Service中服務器與客戶端相互交換信息的基本格式。
2)SOAP:簡單對象訪問協議。一個SOAP 消息包含如下3 個主要元素:a.為描述信息內容和如何處理內容定義了框架(Envelope 元素);b.將程序對象編碼成為XML 對象的規則(Header 元素,包含SOAP 的頭信息);c.執行遠程過程調用(RPC)的約定(Body元素,包含所有的調用和響應信息)。
3)WSDL:Web Service 描述語言,通過 XML 描述Web Service,供服務調用者使用。
4)UDDI:統一描述、發現和整合協議,是一套用于Web Service發布和發現的規范。
Java 本身提供了對Web Service 的支持,建立了如 JAX-WS 規范和面向 RESTful(Representational State Transfer)Web服務的JAX-RS規范等。現有實現這些規范的框架也已有較多,典型的開源框架如Apache 的 Axis2/Axis、CXF 等。這些技術不但可以用于非常方便地對外提供Web服務,也可用于簡化調用Web服務的客戶端編程。
2.2系統Web Service 實現由于本系統服務器端由Java EE 應用實現,就需要Web 服務能與后端的Servlet、Spring 等框架無縫結合。現有Web Service框架中,能與Java EE的控制器Spring框架較好結合的有 Axis2、Axis 和 CXF。其中,Axis 本質上是一個SOAP 引擎,提供創建服務器端、客戶端和網關SOAP 操作的基本框架。Axis2 則是下一代的Axis,具有更強的靈活性并可擴展到新的體系結構。CXF也是Apache基金會發布的Web Service實現框架〔7-8〕,支持多種Web Services 的標準。此外,CXF 框架實現Web Service 時,既支持WSDL 優先開發,也支持從Java 的代碼優先開發模式,并且支持Spring 2.0更加簡化的XML 配置方式;同時,它還是一種可插撥架構,支持 XML 和非 XML 的類型(例如 JSON 或CORBA)綁定,使得其具有更好的可兼容性。
2.2.1 服務端的Web Service 實現 考慮到本文的移動學習系統是在已有的Java EE 應用基礎上構建,服務器上的業務流程由Spring 框架來實現,而CXF 與Spring 的結合通過XML 配置文件的更改就可實現,所以采用CXF作為本系統中Web Service的實現框架。這里不再介紹CXF 和Spring 的類庫安裝,假設Spring 和CXF 已經作為編譯類庫導入到項目中。為了讓Spring 支持CXF 提供的Web Service的發布,需要在Spring 的配置文件中添加對CXF 的支持,并在Web配置界面中添加對Web Service調用時Servlet的映射。
其中,在Spring 配置文件中,除了在<beans…>中添加CXF的名字空間和規范的定義以外,還需要使用<import resource…>節點導入CXF 的配置文件cxf.xml、cxf-extension-soap.xml 和 cxf-servlet.xml,同時,配置Web Service 的實現類,如下面Spring 的配置文件代碼所示:

在Java EE 的配置文件web.xml 中,為了使對Web Service 的訪問自動轉向CXF 框架,需要定義CXF 框架的引用Servlet,并指向服務類org.apache.cxf.transport.servlet.CXFServlet。同時,還要定義訪問這個Servlet的URL模式,例如“/services/*”。通過這樣的配置,客戶端對Web服務的請求URL應形如“http://.../services/...”,從而在服務器端轉入通過CXF框架提供的Web服務的實現類的處理。此外,在服務器端的Web 服務實現類之前要使用@Web-Service標注,如下面代碼:

可以注意到@WebService 標注有endpointInterface 等幾個屬性,其中targetNamespace 對應著客戶端創建SOAP 對象時應指定的Namespace。在這種形式的Web服務中,并沒有在部署之前提供服務的描述WSDL文件,因為這種情況下,CXF是根據服務提供類動態生成Web服務的描述。
2.2.2 Android 移動客戶端的Web Service 訪問 在上述的Web 服務實現方式下,Android 客戶端要做的就是使用URL 請求服務,并將返回結果解析為SOAP 對象,然后讀取SOAP 對象中包含的信息即可。根據請求的URL 也可以看出,包裝信息的SOAP 消息是通過HTTP 協議傳輸的。為了在Android 下對HTTP 傳輸的Web Service 消息更容易進行處理,Google公司提供了Ksoap2包。使用Ksoap2包調用Web Service分為如下幾個步驟:
1)創建 HttpTransportSE 對象,該對象使用HTTP協議完成網絡上的數據傳輸任務;
2)創建SOAP 的封裝對象SoapSerializationEnvelope 和SoapObject 對象,同時為后者設置需要傳遞給遠程服務器的參數;
3)設置SOAP 的封裝對象SoapSerializationEnvelope 的 bodyOut 屬性,將上面創建的 SoapObject 對象作為傳出SOAP消息體;
4)調用HttpTransportSE 對象的 call()方法,從而發送Web Service請求;
5)調用完成后,訪問SOAP 封裝對象的bodyIn屬性,獲得一個SoapObject 對象,這也就是以SOAP對象格式封裝的Web Service的返回消息。
在上述步驟中,還要注意的一個問題是,Android 4及以后版本環境下,不允許應用程序的主線程訪問網絡,因此,需要將網絡訪問部分放在新建的線程中調用。
本文探討在Android 下創建C/S 模式的移動學習系統,為了在客戶端和服務器端進行信息傳輸,使用Web Service 提供服務。考慮到前端和后端的可擴展性,服務器采用Java EE 來實現,為了能跟其中的Spring 框架較好集成,在服務器端的Web Service用了Apache 的CXF框架。系統測試表明,CXF框架能很好地跟業務流程框架Spring 集成,創建具有良好的可擴展性的Web 服務端。下一步的工作包括:
1)建立基于RESTful架構的Web Service在移動學習系統中的應用。由于基于SOAP/WSDL 的Web Service 是RPC(遠程過程調用)式的,僅僅將HTTP協議當做一種傳輸協議來使用,還依賴于XML這種冗余度較高的文本格式,因此這種Web Service應用性能較為低下,不適合大流量的Web 應用〔9〕。相比之下,RESTful Web Service,是一種面向資源的架構,采用標準的HTTP 方法,HTTP 協議在其中不只是作為傳輸協議,而是作為信息的載體,無需引入SOAP 消息傳輸層,避免了各種封裝產生的資源消耗,從而更加快捷、方便。
2)此外,移動學習系統中的文字性學習內容不僅僅是字符(或漢字),還應當考慮數學公式等非字符型學習內容的表現〔10〕,以及客戶端和服務端的該種類型信息的交流。在系統中實現數學公式相關的學習內容表示和編輯,是本文另一個后續工作。
〔1〕Dye A. Mobile Education:A Glance at The Future〔J/OL〕.(2012-01-15)〔2014-12-20〕. http://www. dye. no/articles/a_glance_at_the_future/index.html.
〔2〕宋巍.開放大學移動學習平臺設計與實現〔J〕.沈陽師范大學學報:自然科學版,2014,32(1):107-110.
〔3〕鄭兆華,彭金蓮,邱錫光,等.移動互聯網在高校教育中的應用〔J〕.計算機教育,2014(5):80-83.
〔4〕劉帥,李建偉,勾學榮.互動式移動學習系統的設計與開發〔J〕. 北京郵電大學學報:社會科學版,2014,16(6):111-116.
〔5〕李芙玲,白磊,陳超.基于Java技術的手機移動學習平臺的設計與開發〔J〕. 華北科技學院學報,2014,11(10):75-78.
〔6〕W3C Working Group. Web Services Glossary〔EB/OL〕.(2004-02-11)〔2014-12-20〕. http://www. w3. org/ TR/2004/NOTE-ws-gloss-20040211/#webservice.
〔7〕Apache Software Foundation. Apache CXF:An Open-Source Services Framework〔CP/OL〕.(2014-12-11)〔2014-12-30〕.http://cxf.apache.org/docs/index.html.
〔8〕梁曉,俞立,洪榛. 基于J2EE 的旅游票務分銷管理系統〔J〕.計算機系統應用,2014(2):52-59.
〔9〕韓陸.Java RESTful Web Service 實戰〔M〕.北京:機械工業出版社,2014:1-8.
〔10〕洪留榮.一種應用于移動學習環境中的數學公式標記語言〔J〕.計算機系統應用,2010(10):117-121.