一,解釋:
WebService是一種跨編程語言和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)。
所謂跨編程語言和跨操作平臺(tái),就是說服務(wù)端程序采用java編寫,客戶端程序則可以采用其他編程語言編寫,反之亦然!跨操作系統(tǒng)平臺(tái)則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運(yùn)行。
所謂遠(yuǎn)程調(diào)用,就是一臺(tái)計(jì)算機(jī)a上的一個(gè)程序可以調(diào)用到另外一臺(tái)計(jì)算機(jī)b上的一個(gè)對象的方法,譬如,銀聯(lián)提供給商場的pos刷卡系統(tǒng),商場的POS機(jī)轉(zhuǎn)賬調(diào)用的轉(zhuǎn)賬方法的代碼其實(shí)是跑在銀行服務(wù)器上。再比如,amazon,天氣預(yù)報(bào)系統(tǒng),淘寶網(wǎng),校內(nèi)網(wǎng),百度等把自己的系統(tǒng)服務(wù)以webservice服務(wù)的形式暴露出來,讓第三方網(wǎng)站和程序可以調(diào)用這些服務(wù)功能,這樣擴(kuò)展了自己系統(tǒng)的市場占有率,往大的概念上吹,就是所謂的SOA應(yīng)用。
WebService平臺(tái)需要一套協(xié)議來實(shí)現(xiàn)分布式應(yīng)用程序的創(chuàng)建。任何平臺(tái)都有它的數(shù)據(jù)表示方法和類型系統(tǒng)。要實(shí)現(xiàn)互操作性,WebService平臺(tái)必須提供一套標(biāo)準(zhǔn)的類型系統(tǒng),用于溝通不同平臺(tái)、編程語言和組件模型中的不同類型系統(tǒng)。Web service平臺(tái)必須提供一種標(biāo)準(zhǔn)來描述Web service,讓客戶可以得到足夠的信息來調(diào)用這個(gè)Web service。最后,我們還必須有一種方法來對這個(gè)Web service進(jìn)行遠(yuǎn)程調(diào)用,這種方法實(shí)際是一種遠(yuǎn)程過程調(diào)用協(xié)議(RPC)。為了達(dá)到互操作性,這種RPC協(xié)議還必須與平臺(tái)和編程語言無關(guān)
二,WebService平臺(tái)技術(shù)
XML+XSD,SOAP和WSDL就是構(gòu)成WebService平臺(tái)的三大技術(shù)。
XML+XSD:
WebService采用HTTP協(xié)議傳輸數(shù)據(jù),采用XML格式封裝數(shù)據(jù)(即XML中說明調(diào)用遠(yuǎn)程服務(wù)對象的哪個(gè)方法,傳遞的參數(shù)是什么,以及服務(wù)對象的返回結(jié)果是什么)。XML是WebService平臺(tái)中表示數(shù)據(jù)的格式。除了易于建立和易于分析外,XML主要的優(yōu)點(diǎn)在于它既是平臺(tái)無關(guān)的,又是廠商無關(guān)的。
SOAP:
WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時(shí),發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議。SOAP提供了標(biāo)準(zhǔn)的RPC方法來調(diào)用Web Service。
SOAP協(xié)議 = HTTP協(xié)議 + XML數(shù)據(jù)格式
SOAP協(xié)議定義了SOAP消息的格式,SOAP協(xié)議是基于HTTP協(xié)議的,SOAP也是基于XML和XSD的,XML是SOAP的數(shù)據(jù)編碼方式。打個(gè)比喻:HTTP就是普通公路,XML就是中間的綠色隔離帶和兩邊的防護(hù)欄,SOAP就是普通公路經(jīng)過加隔離帶和防護(hù)欄改造過的高速公路。
WSDL:
WebService務(wù)器端首先要通過一個(gè)WSDL文件來說明自己家里有啥服務(wù)可以對外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個(gè)url地址表示,服務(wù)通過什么方式來調(diào)用。
WSDL(Web Services Description Language)就是這樣一個(gè)基于XML的語言,用于描述Web Service及其函數(shù)、參數(shù)和返回值。它是WebService客戶端和服務(wù)器端都能理解的標(biāo)準(zhǔn)格式。因?yàn)槭腔赬ML的,所以WSDL既是機(jī)器可閱讀的,又是人可閱讀的,這將是一個(gè)很大的好處。一些最新的開發(fā)工具既能根據(jù)你的Web service生成WSDL文檔,又能導(dǎo)入WSDL文檔,生成調(diào)用相應(yīng)WebService的代理類代碼。
WSDL文件保存在Web服務(wù)器上,通過一個(gè)url地址就可以訪問到它。客戶端要調(diào)用一個(gè)WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:1.注冊到UDDI服務(wù)器,以便被人查找;2.直接告訴給客戶端調(diào)用者。
三,WebService開發(fā)
WebService開發(fā)可以分為服務(wù)器端開發(fā)和客戶端開發(fā)兩個(gè)方面:
服務(wù)端開發(fā):把公司內(nèi)部系統(tǒng)的業(yè)務(wù)方法發(fā)布成WebService服務(wù),供遠(yuǎn)程合作單位和個(gè)人調(diào)用。(借助一些WebService框 架可以很輕松地把自己的業(yè)務(wù)對象發(fā)布成WebService服務(wù),Java方面的典型WebService框架包括:axis,xfire,cxf等,java ee服務(wù)器通常也支持發(fā)布WebService服務(wù),例如JBoss。)
客戶端開發(fā):調(diào)用別人發(fā)布的WebService服務(wù),大多數(shù)人從事的開發(fā)都屬于這個(gè)方面,例如,調(diào)用天氣預(yù)報(bào)WebService服務(wù)。
WebService的工作調(diào)用原理:對客戶端而言,我們給這各類WebService客戶端API傳遞wsdl文件的url地址,這些API就會(huì)創(chuàng)建出底層的代理類,我調(diào)用這些代理,就可以訪問到webservice服務(wù)。代理類把客戶端的方法調(diào)用變成soap格式的請求數(shù)據(jù)再通過HTTP協(xié)議發(fā)出去,并把接收到的soap數(shù)據(jù)變成返回值返回。對服務(wù)端而言,各類WebService框架的本質(zhì)就是一個(gè)大大的Servlet,當(dāng)遠(yuǎn)程調(diào)用客戶端給它通過http協(xié)議發(fā)送過來soap格式的請求數(shù)據(jù)時(shí),它分析這個(gè)數(shù)據(jù),就知道要調(diào)用哪個(gè)java類的哪個(gè)方法,于是去查找或創(chuàng)建這個(gè)對象,并調(diào)用其方法,再把方法返回的結(jié)果包裝成soap格式的數(shù)據(jù),通過http響應(yīng)消息回給客戶端。
目前:對web service的認(rèn)知就到這里了!