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