一言以蔽之:WebService是一種跨編程語言和跨操做系統平臺的遠程調用技術。java
所謂跨編程語言和跨操做平臺,就是說服務端程序採用java編寫,客戶端程序則能夠採用其餘編程語言編寫,反之亦然!跨操做系統平臺則是指服務端程序和客戶端程序能夠在不一樣的操做系統上運行。web
所謂遠程調用,就是一臺計算機a上 的一個程序能夠調用到另一臺計算機b上的一個對象的方法,譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉帳調用的轉帳方法的代碼實際上是跑在銀 行服務器上。編程
再好比,amazon,天氣預報系統,淘寶網,校內網,百度等把本身的系統服務以webservice服務的形式暴露出來,讓第三方網站和程 序能夠調用這些服務功能,這樣擴展了本身系統的市場佔有率,往大的概念上吹,就是所謂的SOA應用。服務器
其實能夠從多個角度來理解 WebService,網絡
從表面上看,WebService就是一個應用程序向外界暴露出一個能經過Web進行調用的API,框架
也就是說能用編程的方法經過 Web來調用這個應用程序。咱們把調用這個WebService的應用程序叫作客戶端,而把提供這個WebService的應用程序叫作服務端。編程語言
從深層次 看,WebService是創建可互操做的分佈式應用程序的新平臺,是一個平臺,是一套標準。它定義了應用程序如何在Web上實現互操做性,你能夠用任何 你喜歡的語言,分佈式
在任何你喜歡的平臺上寫Web service ,只要咱們能夠經過Web service標準對這些服務進行查詢和訪問。 函數
WebService平臺須要一套協議來實現分佈式應用程序的建立。工具
任何平臺都有它的數據表示方法和類型系統。
要實現互操做性,WebService平臺 必須提供一套標準的類型系統,用於溝通不一樣平臺、編程語言和組件模型中的不一樣類型系統。
Web service平臺必須提供一種標準來描述 Webservice,讓客戶能夠獲得足夠的信息來調用這個Web service。
最後,咱們還必須有一種方法來對這個Webservice進行遠程調用,這種方法實際是一種遠程過程調用協議(RPC)。
爲了達到互操做性,這種RPC協議還必須與平臺和編程語言無關。
XML+XSD,SOAP和WSDL就是構成WebService平臺的三大技術。
XML+XSD:
WebService採用HTTP協議傳輸數據,採用XML格式封裝數據(即XML中說明調用遠程服務對象的哪一個方法,傳遞的參數是什麼,以及服務對象的 返回結果是什麼)。
XML是WebService平臺中表示數據的格式。除了易於創建和易於分析外,XML主要的優勢在於它既是平臺無關的,又是廠商無關的。
無關性是比技術優越性更重要的:軟件廠商是不會選擇一個由競爭對手所發明的技術的。
XML解決了數據表示的問題,但它沒有定義一套標準的數據類型,更沒有說怎麼去擴展這套數據類型。
例如,整形數到底表明什麼?16位,32位,64位?這 些細節對實現互操做性很重要。
XML Schema(XSD)就是專門解決這個問題的一套標準。它定義了一套標準的數據類型,並給出了一種語言來擴展這套數據類型。
WebService平臺就是用XSD來做爲其數據類型系統的。當你用某種語言(如VB.NET或C#)來構造一個Web service時,爲了符合WebService標準,全部你使用的數據類型都必須被轉換爲XSD類型。
你用的工具可能已經自動幫你完成了這個轉換,但你極可能會根據你的須要修改一下轉換過程。
SOAP:
WebService經過HTTP協議發送請求和接收結果時,發送的請求內容和結果內容都採用XML格式封裝,並增長了一些特定的HTTP消息頭,以說明 HTTP消息的內容格式,這些特定的HTTP消息頭和XML內容格式就是SOAP協議。
SOAP提供了標準的RPC方法來調用Web Service。
SOAP協議 = HTTP協議 + XML數據格式
SOAP協議定義了SOAP消息的格式,SOAP協議是基於HTTP協議的,SOAP也是基於XML和XSD的,XML是SOAP的數據編碼方式。
打個比喻:HTTP就是普通公路,XML就是中間的綠色隔離帶和兩邊的防禦欄,SOAP就是普通公路通過加隔離帶和防禦欄改造過的高速公路。
WSDL:
比如咱們去商店買東西,首先要知道商店裏有什麼東西可買,而後再來購買,商家的作法就是張貼廣告海報。
WebService也同樣,WebService客戶端要調用一個WebService服務,首先要有知道這個服務的地址在哪,以及這個服務裏有什麼方法能夠調用,因此,WebService務器端首先要經過一個WSDL文件來講明本身家裏有啥服務能夠對外調用,服務是什麼(服務中有哪些方法,方法接受的參數是什麼,返回值是什麼),服務的網絡地址用哪一個url地址表示,服務經過什麼方式來調用。
WSDL(Web Services Description Language)就是這樣一個基於XML的語言,用於描述WebService及其函數、參數和返回值。
它是WebService客戶端和服務器端都 能理解的標準格式。由於是基於XML的,因此WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。
WSDL 文件保存在Web服務器上,經過一個url地址就能夠訪問到它。
客戶端要調用一個WebService服務以前,要知道該服務的WSDL文件的地址。
WebService服務提供商能夠經過兩種方式來暴露它的WSDL文件地址:1.註冊到UDDI服務器,以便被人查找;2.直接告訴給客戶端調用者。
一個Web Service服務器,本質上和一個Web服務器是相同的。
它主要作下面這些事:
--> 監聽網絡端口(監聽服務端口)
--> 接收客戶端請求(接收SOAP請求)
--> 解析客戶端請求(解析SOAP消息,將SOAP消息轉換爲數據對象)
--> 調用業務邏輯 (調用Web Service實現類的特定操做,參數是由SOAP消息轉換而來的數據對象)
--> 生成響應 (將返回值轉換爲SOAP消息)
--> 返回響應 (返回SOAP響應)
WebService開發能夠分爲服務器端開發和客戶端開發兩個方面:
服務端開發:把公司內部系統的業務方法發佈成WebService服務,供遠程合做單位和我的調用。
(藉助一些WebService框架能夠很輕鬆地把本身的業務對象發佈成WebService服務,
Java方面的典型WebService框架包括:axis,xfire,cxf 等,java ee服務器一般也支持發佈WebService服務,例如JBoss。)
客戶端開發:調用別人發佈的WebService服務,大多數人從事的開發都屬於這個方面,例如,調用天氣預報WebService服務。
(使用廠商的WSDL2Java之類的工具生成靜態調用的代理類代碼;
使用廠商提供的客戶端編程API類;
使用SUN公司早期標準的jax-rpc開發包;
使用 SUN公司最新標準的jax-ws開發包。)
WebService 的工做調用原理:
對客戶端而言,咱們給這各種WebService客戶端API傳遞wsdl文件的url地址,這些API就會建立出底層的代理類,我調用這些代理,就能夠訪問到webservice服務。代理類把客戶端的方法調用變成soap格式的請求數據再經過HTTP協議發出去,並把接收到的soap數據變成返回值返回。
對服務端而言,各種WebService框架的本質就是一個大大的Servlet,當遠程調用客戶端給它經過http協議發送過來 soap格式的請求數據時,它分析這個數據,就知道要調用哪一個java類的哪一個方法,因而去查找或建立這個對象,並調用其方法,再把方法返回的結果包裝成 soap格式的數據,經過http響應消息回給客戶端。