王 崟
(南京信息職業(yè)技術(shù)學院計算機與軟件學院,江蘇 南京 210023)
隨著Internet 的迅猛發(fā)展,越來越多的Web 應用系統(tǒng)被建立起來,利用各種Web 技術(shù)可以輕松地在Internet 環(huán)境下實現(xiàn)電子商務、電子政務等多種應用。然而這些地理位置不同,數(shù)據(jù)組織形式不同,操作系統(tǒng)平臺不同的應用之間,往往需要集成和交互。Web Service 能夠使得運行在不同機器上的不同應用無須借助附加的、專門的第三方軟件或者硬件,就可相互交換數(shù)據(jù)或集成。隨著Web Service 的廣泛應用,一些高職院校專門開設(shè)了Web Service 課程,或者在Web 開發(fā)課程中加入了Web Service 開發(fā)的相關(guān)內(nèi)容。本人通過六年的基于Java的Web Service 教學經(jīng)驗以及實際項目經(jīng)驗,淺談對這門課程教學的幾點思考。
根據(jù)Web Service 目前的應用情況和高職類學生對應的就業(yè)崗位的需要,Web Service 課程的教學有三個重點:
(1)Web 服務理論和協(xié)議,包含SOA 體系架構(gòu)、SOAP 協(xié)議、WSDL文檔閱讀三個部分,這一部分是Web 服務開發(fā)和訪問的根基。在學習開發(fā)和部署Web Service 之前,必須先讓學生理解基本的Web 服務理論和協(xié)議,原因如下:
首先,Web Service 作為實現(xiàn)面向服務的體系結(jié)構(gòu)(SOA)的一種技術(shù)架構(gòu),其本身是獨立于任何平臺和語言的。Java,.NET,Python,PHP等語言都有其開發(fā)Web 服務的技術(shù),而學生的語言基礎(chǔ)通常比較單一,因此在web Service 課程中只會教授一種語言下某些開發(fā)技術(shù)。在這種情況下,基本理論和協(xié)議就變得十分重要,其重要性甚至要超過某個具體技術(shù),因為學生在日后的工作中可能使用到其它開發(fā)語言和平臺,理論和協(xié)議掌握了,才能知其然更知其所以然,更容易遷移到其它語言和框架下的開發(fā)。
其次,Web 服務的開發(fā)框架非常多,發(fā)展也很快,課程不可能介紹一種語言平臺下的所有開發(fā)框架的使用,但是不同的開發(fā)框架都遵循Web 服務的基本理論和協(xié)議。因此學生深入理解Web 服務理論和協(xié)議之后,掌握一種框架的使用,工作后如果要使用其他框架會更加容易。
(2)閱讀WSDL 文檔訪問指定服務
由于Web Service 的一大用途是異構(gòu)系統(tǒng)間的集成或者數(shù)據(jù)交換,如果兩個系統(tǒng)是兩個獨立的公司或者組織開發(fā)的,它們相互之間不可能直接暴露業(yè)務邏輯和實現(xiàn)給對方。在這種情況下,兩個系統(tǒng)通過Web 服務進行數(shù)據(jù)交換的時候,雙方只能拿到對方服務的WSDL文檔,從這個服務的描述文檔中獲得訪問對方的服務的方法,因此閱讀WSDL 文檔對于Web 服務的訪問者來說是非常重要的能力。
在充分理解了WSDL 文檔之后,學生就能夠編寫服務訪問代碼訪問服務,獲得結(jié)果。學生應該掌握In-Out Messaging(請求/響應)服務的訪問,包括同步方式調(diào)用和異步調(diào)用方式。One Way Messaging(單向)服務的訪問,包括In-Only 方式和Robust In-Only 方式。
(3)將已有的程序代碼發(fā)布成Web 服務
教學中應該讓學生學會將任意的函數(shù)功能轉(zhuǎn)換成Web 服務,熟練掌握Web 服務的部署,以及不同服務的部署配置文件的編寫。
Web Service 課程一般開設(shè)在Java Web 課程之后,學生已經(jīng)學過如何開發(fā)網(wǎng)站,用到的主要技術(shù)就是HTML,JSP 等。在學生的腦海中WEB 應用就是做網(wǎng)站,因為他們平時業(yè)余生活中接觸的最主要的WEB 就是各類網(wǎng)站,他們的思想中沒有其它形式的WEB 應用。
當課程首次提到Web 服務這個概念時,對學生來說非常抽象,缺乏網(wǎng)站的直觀性,因此很難在課程初期建立起Web 服務的概念,這樣會導致課程的學習的目的性不強。
理論協(xié)議雖然重要,但是在教學過程也能明顯地感受到學生的熱情不大。主要的原因如下:
(1)理論協(xié)議的介紹在Web Service 課程的開始階段,這時候?qū)W生還沒有完全建立起Web 服務的概念,學生不知道這些理論和協(xié)議究竟有什么用,相互有何關(guān)聯(lián),對之后學習開發(fā)和訪問有何影響,學習目的性不強。
(2)SOA 理論聽起來挺有道理,但是學生并未實際感受過那些使用場合,并不能真的體會出這種體系結(jié)構(gòu)的優(yōu)點和用途。
(3)SOAP 協(xié)議作為Web 服務傳輸消息的基本協(xié)議,雖然SOAP消息架構(gòu)簡單,但學生對于互聯(lián)網(wǎng)上的“消息”一詞并沒有直觀的感受,對學生來說還是非常抽象的,學生還是比較能接受更直觀一些的知識。
(4)WSDL 語法復雜而枯燥,文檔很長,學生必須經(jīng)過大量的練習才能讀懂一篇WSDL 文檔,而讀懂一篇WSDL 對學生來說并沒有很大的成就感,因為只有到了服務訪問階段,才是真正檢驗WSDL 文件閱讀正確性的時候。
以Java 語言為例,Java 平臺的開源Web Service 開發(fā)框架非常多,有AXIS、AXIS2、CXF、XFire 等等,這些框架都在不同時期、不同場合有著廣泛的應用。而且發(fā)展很快,一個框架可能出來后紅火一陣子就銷聲匿跡了,或者進階到了新版本。而在實際的應用中,也并非一個階段所有的公司都用同一個框架做開發(fā),存在多個框架并存的現(xiàn)象。在教學中,不可能教學生使用每一個框架,甚至不可能隨著技術(shù)的更新,每年都教授全新的框架,因此在教學內(nèi)容的選擇上需要仔細斟酌,選擇一個有代表性并且能夠充分體現(xiàn)Web Service 特性的開發(fā)框架。
學習Web Service 有一些必備的前驅(qū)知識,學生要對XML 基本語法和名稱空間有一定了解,要能閱讀簡單的Schema 文檔,能夠編程訪問XML 文檔,要有基本的語言開發(fā)基礎(chǔ),能夠使用Web 服務器,如TOMCAT 等。如果這些前驅(qū)知識不到位,會影響Web Service 的學習。
在Web 服務入門階段,不能只灌輸概念、定義、優(yōu)缺點、應用場合等理論知識。如果學生覺得自己從未接觸過這個技術(shù),平時也從未用到過,他們的學習興趣會下降。事實上,每個學生一定體驗過Web 服務,只是他們沒有意識到。這時應該總結(jié)學生接觸過的Web 服務的場合,用問題引導學生逐漸理解web 服務的使用場合,例如下面的一系列問題:購物網(wǎng)站是如何查詢到某家快遞公司的物流的?購物網(wǎng)站上查物流的時候,有沒有跳轉(zhuǎn)到物流網(wǎng)站呢?購物網(wǎng)站可以訪問快遞公司的數(shù)據(jù)庫嗎?購物網(wǎng)站擁有快遞公司的數(shù)據(jù)庫嗎?購物網(wǎng)站和物流公司的系統(tǒng)是一定是同一個平臺和語言開發(fā)的嗎?問題層層遞進,讓學生去設(shè)想購物網(wǎng)站和快遞公司系統(tǒng)之間的數(shù)據(jù)是如何交換的。此外,還可以讓學生思考,為什么打開一個網(wǎng)站,網(wǎng)站上能顯示我們所在城市的天氣預報呢?這個網(wǎng)站是不是訪問到中央氣象臺的數(shù)據(jù)庫了?利用這些每個學生都認識的場景,引導學生去理解異構(gòu)系統(tǒng)的數(shù)據(jù)集成和交換,讓學生了解,通過本門課的學習,他們可以獲得解決這些問題的手段。
在講解SOAP 協(xié)議的時候,可以指導學生使用一些網(wǎng)絡(luò)監(jiān)聽工具,在訪問Web 服務的同時,監(jiān)聽應用程序向服務發(fā)出的SOAP 請求和接收到的SOAP 響應。雖然學生此時還不會開發(fā)和訪問Web 服務,但是可以直觀地看到應用程序和Web 服務交流時使用的消息,這對于理解SOAP 協(xié)議以及Web 服務的平臺無關(guān)性是非常有利的。
現(xiàn)在網(wǎng)上有很多免費的公用服務,例如天氣預報查詢、股票行情查詢、列車時刻表查詢、IP 地址查詢等服務,這些服務貼近日常生活,學生很有興趣。而且服務種類多,可以讓學生自由選擇自己感興趣的服務進行訪問。
Web 服務本身并不是一種新的編程技術(shù),而是一種Web 應用的構(gòu)建方式,反映了“面向服務的”編程方式,理論上來說,任何業(yè)務邏輯都可以發(fā)布成Web 服務。因此課程中不能把重心放在如何編寫Web服務的代碼上,對于某種服務開發(fā)框架來說,無論服務的代碼是簡單還是復雜,開發(fā)和部署的方式都是相似的。課程中只要把重點放在如何將代碼轉(zhuǎn)換成Web 服務,如何部署和管理就可以了。
Java 平臺上的Web 服務開發(fā)框架多,課程中選取一個框架作為主要的講授對象,將其講透,練熟。再簡單教學生另一個框架的使用,讓學生感受其差異和共同點。這樣可以讓學生知道雖然課上只教了市場上一小部分框架的使用,他們?nèi)蘸蠊ぷ饕参幢啬苤苯佑玫?,但是憑借這門課打下的基礎(chǔ),他們是可以很順利地遷移到其它開發(fā)框架,也可以鍛煉學生的自學能力。
在Web Service 課程之前應該開始XML 相關(guān)課程,課程內(nèi)容不需要多深,但是要教學生基本的XML 語法,XML 的名稱空間技術(shù),XML定義語言Schema,編程訪問XML 的基本接口DOM,DOM4J 或者JDOM。這些知識在介紹Web 服務理論、協(xié)議、開發(fā)部署的時候都會直接或間接被用到。
Web Service 已經(jīng)稱為IT 從業(yè)人員必須掌握的一門技術(shù)。本文列舉了高職院校Web Service 課程教學遇到的問題和難點,探討了解決問題、提高教學效果的方法。
[1]Michael P.Papazolou.Web 服務原理和技術(shù)[M].機械工業(yè)出版社,2010.