Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理
本來這第二篇打算講解“開發(fā)第一個基于XFire的webservice”的內(nèi)容來著。但是想想。開發(fā)實例只是局限于了會用的層面上。如果想真正的理解webservice還是需要挖掘其原理。所以本篇文章我想還是和大家一起來學習一下webservice的原理吧。知其原理,應用直接就是小case了。在學習webservice的原理之前。我想還是有必要弄清另一個概念—SOA.這個概念在很多學術(shù)論文和文章中經(jīng)常和webservice一起被提起。剛開始我一直不理解這兩個概念的關(guān)系。所以我們先來看一下SOA.
????????SOA是英文Service-Oriented?Architecture,即面向服務(wù)架構(gòu)的縮寫。?在有關(guān)書籍中他是這個定義的:SOA指為了解決在Internet環(huán)境下業(yè)務(wù)集成的需要,通過連接能完成特定任務(wù)的獨立功能實體實現(xiàn)的一種軟件系統(tǒng)架構(gòu)。從這個定義中定義者希望表達的前提有下面兩點:
?
1)?軟件系統(tǒng)架構(gòu):SOA不是一種語言,也不是一種具體的技術(shù)而是一種軟件系統(tǒng)架構(gòu),它嘗試給出在特定環(huán)境下推薦采用的一種架構(gòu),從這個角度上來說,它更像一種模式(Pattern)。因此它與很多已有的軟件技術(shù)比如面向?qū)ο蠹夹g(shù),是互補的而非互斥的。它們分別面向不同的應用場景,用來滿足不同的特定需求。?
2)?SOA的使用范圍:需求決定同時也限制功能。SOA并不是包治百病的萬靈丹,它最主要的應用場合在于解決在Internet環(huán)境下的不同商業(yè)應用之間的業(yè)務(wù)集成問題。
從上面的定義其實我們不難發(fā)現(xiàn)。其實webservice簡單來說就是SOA的一種體現(xiàn)形式。下面我們來看一下有關(guān)webservice的原理解釋
WebService是一種跨編程語言和跨操作系統(tǒng)平臺的遠程調(diào)用技術(shù)
???????所謂遠程調(diào)用,就是一臺計算機a上的一個程序可以調(diào)用到另外一臺計算機b上的一個對象的方法,譬如,銀聯(lián)提供給商場的pos刷卡系統(tǒng)(采用交互提問的方式來加深大家對此技術(shù)的理解)。
??????遠程調(diào)用技術(shù)有什么用呢?商場的POS機轉(zhuǎn)賬調(diào)用的轉(zhuǎn)賬方法的代碼是在銀行服務(wù)器上,還是在商場的pos機上呢?什么情況下可能用到遠程調(diào)用技術(shù)呢?例如,amazon,天氣預報系統(tǒng),淘寶網(wǎng),校內(nèi)網(wǎng),百度等把自己的系統(tǒng)服務(wù)以webservice服務(wù)的形式暴露出來,讓第三方網(wǎng)站和程序可以調(diào)用這些服務(wù)功能,這樣擴展了自己系統(tǒng)的市場占有率,往大的概念上吹,就是所謂的SOA應用。
??????所謂跨編程語言和跨操作平臺,就是說服務(wù)端程序采用Java編寫,客戶端程序則可以采用其他編程語言編寫,反之亦然!跨操作系統(tǒng)平臺則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運行。
??????除了WebService外,常見的遠程調(diào)用技術(shù)還有RMI(Remote?method?invoke)和CORBA,由于WebService的跨平臺和跨編程語言特點,因此比其他兩種技術(shù)應用更為廣泛,但性能略低。
?
WebService使用SOAP協(xié)議實現(xiàn)跨編程語言和跨操作系統(tǒng)平臺
?????WebService?采用HTTP協(xié)議傳輸數(shù)據(jù),采用XML格式封裝數(shù)據(jù)(即XML中說明調(diào)用遠程服務(wù)對象的哪個方法,傳遞的參數(shù)是什么,以及服務(wù)對象的返回結(jié)果是什么)。?WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時,發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明?HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議(simple?object?access?protocol,簡單對象訪問協(xié)議)?。
SOAP協(xié)議=?HTTP協(xié)議+?XML數(shù)據(jù)格式
SOAP協(xié)議是基于HTTP協(xié)議的,兩者的關(guān)系就好比高速公路是基于普通公路改造的,在一條公路上加上隔離欄后就成了高速公路。商店的服務(wù)員只要收到了錢就給客戶提供貨物,商店服務(wù)員不用關(guān)心客戶是什么性質(zhì)的人,客戶也不用關(guān)心商店服務(wù)員是什么性質(zhì)的人。同樣,WebService?客戶端只要能使用HTTP協(xié)議把遵循某種格式的XML請求數(shù)據(jù)發(fā)送給WebService服務(wù)器,WebService服務(wù)器再通過HTTP協(xié)議返回遵循?某種格式的XML結(jié)果數(shù)據(jù)就可以了,WebService客戶端與服務(wù)器端不用關(guān)心對方使用的是什么編程語言。
? ? ? ?HTTP協(xié)議和XML是被廣泛使用的通用技術(shù),各種編程語言對HTTP協(xié)議和XML這兩種技術(shù)都提供了很好的支持,WebService客戶端與服務(wù)器端使用什么編程語言都可以完?成SOAP的功能,所以,WebService很容易實現(xiàn)跨編程語言,跨編程語言自然也就跨了操作系統(tǒng)平臺
?
WSDL文件
? ? ? 好比我們?nèi)ド痰曩I東西,首先要知道商店里有什么東西可買,然后再來購買,商家的做法就是張貼廣告海報。WebService客戶端要調(diào)用一個?WebService服務(wù),首先要有知道這個服務(wù)的地址在哪,以及這個服務(wù)里有什么方法可以調(diào)用,所以,WebService務(wù)器端首先要通過一個?WSDL文件來說明自己家里有啥服務(wù)可以對外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個url地?址表示,服務(wù)通過什么方式來調(diào)用。
? ? WSDL(webservicedescription?language)是基于XML格式的,它是WebService客戶端和服務(wù)器端都能理解的標準格式,其中描述的信息可以分為what,where,how等部分!?
??????WSDL文件保存在Web服務(wù)器上,通過一個url地址就可以訪問到它。客戶端要調(diào)用一個WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:
1.注冊到UDDI服務(wù)器,以便被人查找
2.直接告訴給客戶端調(diào)用者,例如,在自己網(wǎng)站給出信息或郵件告訴。
WebServices體系架構(gòu)?
下面我們就來看一下Web?Services的體系結(jié)構(gòu)--面向服務(wù)的體系結(jié)構(gòu)。如圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Web?Services的體系結(jié)構(gòu)
從上圖可以看出,SOA結(jié)構(gòu)中共有三種角色:
(1)?Service?provider:服務(wù)提供商,發(fā)布自己的服務(wù),并且對使用自身服務(wù)的請求進行響應。
(2)?Service?broker:服務(wù)注冊中心,注冊已經(jīng)發(fā)布的Service?provider,對其進行分類,并提供搜索服務(wù),這是可搜索的服務(wù)描述注冊中心,服務(wù)提供者在此發(fā)布他們的服務(wù)描述。在靜態(tài)綁定開發(fā)或動態(tài)綁定執(zhí)行期間,服務(wù)請求者查找服務(wù)并獲得服務(wù)的綁定信息(在服務(wù)描述中)。對于靜態(tài)綁定的服務(wù)請求者,服務(wù)注冊中心是體系結(jié)構(gòu)中的可選角色,因為服務(wù)提供者可以把描述直接發(fā)送給服務(wù)請求者。同樣,服務(wù)請求者可以從服務(wù)注冊中心以外的其它來源得到服務(wù)描述,例如本地文件、FTP?站點、Web?站點、廣告和服務(wù)發(fā)現(xiàn)(Advertisement?and?Discovery?of?Services,ADS)或發(fā)現(xiàn)?Web?服務(wù)(Discovery?of?Web?Services,DISCO)。
(3)?Service?Requester:服務(wù)請求者,利用Service?broker查找所需的服務(wù),然后使用該服務(wù)
SOA體系結(jié)構(gòu)中的組件必須具有上述一種或多種角色。在這些角色之間使用了三種操作:
(1)?Publish操作:使Service?Provider可以向Service?Broker注冊自己的功能及訪問接口
(2)?Find操作:使Service?Requester可以通過Service?Broker查找特定種類的服務(wù)。
(3)?Bind操作:使Service?Requester能夠真正使用Service?provider。
為支持結(jié)構(gòu)中的三種操作(publish、find和bind),SOA需要對服務(wù)進行一定的描述,這種服務(wù)描述(Service?Description)應具有下面幾個重要特點:首先,它要聲明Service?provider的語義特征。Service?broker使用語義特征將Service?provider進行分類,以幫助具體服務(wù)的查找。Service?requester根據(jù)語義特征來匹配那些滿足要求的Service?provider。(因此,語義特征中重要的一點就是對Service?provider的分類。)其次,服務(wù)描述應該聲明接口特征,以訪問特定的服務(wù)。最后,服務(wù)描述還應聲明各種非功能特征,如安全要求,事務(wù)要求,使用Service?provider的費用等等。接口特征和非功能特征也可以用來幫助Service?requester對Service?provider的查找。
?
Web?服務(wù)的構(gòu)件
Web?Services的構(gòu)件可以通過下圖給出了清晰的描述。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?web?Services構(gòu)件模型
? ? ? ? ? ? ? ? ? ? ? ? ??
(1)?服務(wù)在這里,Web?服務(wù)是一個由服務(wù)描述來描述的接口,服務(wù)描述的實現(xiàn)就是該服務(wù)。服務(wù)是一個軟件模塊,它部署在由服務(wù)提供者提供的可以通過網(wǎng)絡(luò)訪問的平臺上。服務(wù)存在就是要被服務(wù)請求者調(diào)用或者同服務(wù)請求者交互。當服務(wù)的實現(xiàn)中利用到其它的Web?服務(wù)時,它也可以作為請求者。當然更為重要的是:我們需要發(fā)現(xiàn)服務(wù),這就要借助UDDI等技術(shù)來完成。
(2)?服務(wù)描述服務(wù)描述包含服務(wù)的接口和實現(xiàn)的細節(jié)。其中包括服務(wù)的數(shù)據(jù)類型、操作、綁定信息和網(wǎng)絡(luò)位置。還可能包括可以方便服務(wù)請求者發(fā)現(xiàn)和利用的分類及其它元數(shù)據(jù)。服務(wù)描述可以被發(fā)布給服務(wù)請求者或服務(wù)注冊中心。Web?服務(wù)體系結(jié)構(gòu)解釋了如何實例化元素和如何以一種可以互操作的方式實現(xiàn)這些操作。這一部分是通過WSDL——Web?Services描述語言來實現(xiàn)。
(3)?消息格式這部分通常指的就是Web?Services的內(nèi)容需要進行展示所要支持消息格式,它用SOAP——簡單對象訪問協(xié)議,即在分散或分布式的環(huán)境中交換信息的簡單的協(xié)議,是一個基于XML的協(xié)議。
(4)?編碼任何發(fā)布出去的Web?Services都要求以XML文件的形式,展現(xiàn)給用戶或請求者,因為XML相當于另一個層面上的接口,不同的商家或單位都可通過將提供商發(fā)布的基于XML的Web?Services數(shù)據(jù)提取出來,然后與自己的相關(guān)系統(tǒng)或軟件產(chǎn)品集成,也就相當于提供商實現(xiàn)Web?Services的同時也會使用者定義了一個標準。
(5)?傳輸這一部分就是計算機網(wǎng)絡(luò)的應用,即提供商的Web?Services最終會以什么渠道傳輸,比如:HTTP、SMTP等。
?
推薦閱讀:一步一步學習webservice(三)開發(fā)第一個基于XFire的webservice
參考:http://blog.csdn.net/eefesa/article/details/1890094
------------------------------------------------------------------------------------------------------------
《Java程序員由笨鳥到菜鳥》電子版書正式發(fā)布,歡迎大家下載
http://blog.csdn.net/csh624366188/article/details/7999247
from:?http://blog.csdn.net/csh624366188/article/details/8224492
總結(jié)
以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java程序员从笨鸟到菜鸟之(五)jav
- 下一篇: Java程序员从笨鸟到菜鸟之(一百零九)