【JavaEE】WebService到底是什么?
一、序言
??大家或多或少都聽過WebService(Web服務(wù)),有一段時(shí)間很多計(jì)算機(jī)期刊、書籍和網(wǎng)站都大肆的提及和宣傳WebService技術(shù),其中不乏很多吹噓和做廣告的成分。但是不得不承認(rèn)的是WebService真的是一門新興和有前途的技術(shù),那么WebService到底是什么?何時(shí)應(yīng)該用?
???當(dāng)前的應(yīng)用程序開發(fā)逐步的呈現(xiàn)了兩種迥然不同的傾向:一種是基于瀏覽器的瘦客戶端應(yīng)用程序,一種是基于瀏覽器的富客戶端應(yīng)用程序(RIA),當(dāng)然后一種技術(shù)相對(duì)來(lái)說更加的時(shí)髦一些(如現(xiàn)在很流行的HTML5技術(shù)),這里主要講前者。
???基于瀏覽器的瘦客戶端應(yīng)用程序并不是因?yàn)槭菘蛻裟軌蛱峁└玫挠脩艚缑?#xff0c;而是因?yàn)樗軌虮苊饣ㄔ谧烂鎽?yīng)用程序發(fā)布上的高成本。發(fā)布桌面應(yīng)用程序成本很高,一半是因?yàn)閼?yīng)用程序安裝和配置的問題,另一半是因?yàn)榭蛻艉头?wù)器之間通信的問題。傳統(tǒng)的Windows富客戶應(yīng)用程序使用DCOM來(lái)與服務(wù)器進(jìn)行通信和調(diào)用遠(yuǎn)程對(duì)象。配置好DCOM使其在一個(gè)大型的網(wǎng)絡(luò)中正常工作將是一個(gè)極富挑戰(zhàn)性的工作,同時(shí)也是許多IT工程師的噩夢(mèng)。事實(shí)上,許多IT工程師寧愿忍受瀏覽器所帶來(lái)的功能限制,也不愿在局域網(wǎng)上去運(yùn)行一個(gè)DCOM。關(guān)于客戶端與服務(wù)器的通信問題,一個(gè)完美的解決方法是使用HTTP協(xié)議來(lái)通信。這是因?yàn)槿魏芜\(yùn)行Web瀏覽器的機(jī)器都在使用HTTP協(xié)議。同時(shí),當(dāng)前許多防火墻也配置為只允許HTTP連接。許多商用程序還面臨另一個(gè)問題,那就是與其他程序的互操作性。如果所有的應(yīng)用程序都是使用COM或.NET語(yǔ)言寫的,并且都運(yùn)行在Windows平臺(tái)上,那就天下太平了。然而,事實(shí)上大多數(shù)商業(yè)數(shù)據(jù)仍然在大型主機(jī)上以非關(guān)系文件(VSAM)的形式存放,并由COBOL語(yǔ)言編寫的大型機(jī)程序訪問。而且,目前還有很多商用程序繼續(xù)在使用C++、Java、Visual?Basic和其他各種各樣的語(yǔ)言編寫。現(xiàn)在,除了最簡(jiǎn)單的程序之外,所有的應(yīng)用程序都需要與運(yùn)行在其他異構(gòu)平臺(tái)上的應(yīng)用程序集成并進(jìn)行數(shù)據(jù)交換。這樣的任務(wù)通常都是由特殊的方法,如文件傳輸和分析,消息隊(duì)列,還有僅適用于某些情況的的API,如IBM的高級(jí)程序到程序交流(APPC)等來(lái)完成的。在以前,沒有一個(gè)應(yīng)用程序通信標(biāo)準(zhǔn),是獨(dú)立于平臺(tái)、組建模型和編程語(yǔ)言的。只有通過Web?Service,客戶端和服務(wù)器才能夠自由的用HTTP進(jìn)行通信,不論兩個(gè)程序的平臺(tái)和編程語(yǔ)言是什么。
?
二、WebService到底是什么?
???一言以蔽之:WebService是一種跨編程語(yǔ)言和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)。
???所謂跨編程語(yǔ)言和跨操作平臺(tái),就是說服務(wù)端程序采用java編寫,客戶端程序則可以采用其他編程語(yǔ)言編寫,反之亦然!跨操作系統(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è)對(duì)象的方法,譬如,銀聯(lián)提供給商場(chǎng)的pos刷卡系統(tǒng),商場(chǎ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ù)的形式暴露出來(lái),讓第三方網(wǎng)站和程序可以調(diào)用這些服務(wù)功能,這樣擴(kuò)展了自己系統(tǒng)的市場(chǎng)占有率,往大的概念上吹,就是所謂的SOA應(yīng)用。
???其實(shí)可以從多個(gè)角度來(lái)理解WebService,從表面上看,WebService就是一個(gè)應(yīng)用程序向外界暴露出一個(gè)能通過Web進(jìn)行調(diào)用的API,也就是說能用編程的方法通過Web來(lái)調(diào)用這個(gè)應(yīng)用程序。我們把調(diào)用這個(gè)WebService的應(yīng)用程序叫做客戶端,而把提供這個(gè)WebService的應(yīng)用程序叫做服務(wù)端。從深層次看,WebService是建立可互操作的分布式應(yīng)用程序的新平臺(tái),是一個(gè)平臺(tái),是一套標(biāo)準(zhǔn)。它定義了應(yīng)用程序如何在Web上實(shí)現(xiàn)互操作性,你可以用任何你喜歡的語(yǔ)言,在任何你喜歡的平臺(tái)上寫Web?service?,只要我們可以通過Web?service標(biāo)準(zhǔn)對(duì)這些服務(wù)進(jìn)行查詢和訪問。?
?? WebService平臺(tái)需要一套協(xié)議來(lái)實(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)、編程語(yǔ)言和組件模型中的不同類型系統(tǒng)。Web?service平臺(tái)必須提供一種標(biāo)準(zhǔn)來(lái)描述Web?service,讓客戶可以得到足夠的信息來(lái)調(diào)用這個(gè)Web?service。最后,我們還必須有一種方法來(lái)對(duì)這個(gè)Web?service進(jìn)行遠(yuǎn)程調(diào)用,這種方法實(shí)際是一種遠(yuǎn)程過程調(diào)用協(xié)議(RPC)。為了達(dá)到互操作性,這種RPC協(xié)議還必須與平臺(tái)和編程語(yǔ)言無(wú)關(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ù)對(duì)象的哪個(gè)方法,傳遞的參數(shù)是什么,以及服務(wù)對(duì)象的返回結(jié)果是什么)。XML是WebService平臺(tái)中表示數(shù)據(jù)的格式。除了易于建立和易于分析外,XML主要的優(yōu)點(diǎn)在于它既是平臺(tái)無(wú)關(guān)的,又是廠商無(wú)關(guān)的。無(wú)關(guān)性是比技術(shù)優(yōu)越性更重要的:軟件廠商是不會(huì)選擇一個(gè)由競(jìng)爭(zhēng)對(duì)手所發(fā)明的技術(shù)的。?
? XML解決了數(shù)據(jù)表示的問題,但它沒有定義一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,更沒有說怎么去擴(kuò)展這套數(shù)據(jù)類型。例如,整形數(shù)到底代表什么?16位,32位,64位?這些細(xì)節(jié)對(duì)實(shí)現(xiàn)互操作性很重要。XML Schema(XSD)就是專門解決這個(gè)問題的一套標(biāo)準(zhǔn)。它定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,并給出了一種語(yǔ)言來(lái)擴(kuò)展這套數(shù)據(jù)類型。WebService平臺(tái)就是用XSD來(lái)作為其數(shù)據(jù)類型系統(tǒng)的。當(dāng)你用某種語(yǔ)言(如VB.NET或C#)來(lái)構(gòu)造一個(gè)Web?service時(shí),為了符合WebService標(biāo)準(zhǔn),所有你使用的數(shù)據(jù)類型都必須被轉(zhuǎn)換為XSD類型。你用的工具可能已經(jīng)自動(dòng)幫你完成了這個(gè)轉(zhuǎn)換,但你很可能會(huì)根據(jù)你的需要修改一下轉(zhuǎn)換過程。
SOAP:
?? WebService通過HTTP協(xié)議發(fā)送請(qǐng)求和接收結(jié)果時(shí),發(fā)送的請(qǐng)求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議。SOAP提供了標(biāo)準(zhǔn)的RPC方法來(lái)調(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:
?? 好比我們?nèi)ド痰曩I東西,首先要知道商店里有什么東西可買,然后再來(lái)購(gòu)買,商家的做法就是張貼廣告海報(bào)。 WebService也一樣,WebService客戶端要調(diào)用一個(gè)WebService服務(wù),首先要有知道這個(gè)服務(wù)的地址在哪,以及這個(gè)服務(wù)里有什么方法可以調(diào)用,所以,WebService務(wù)器端首先要通過一個(gè)WSDL文件來(lái)說明自己家里有啥服務(wù)可以對(duì)外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個(gè)url地址表示,服務(wù)通過什么方式來(lái)調(diào)用。
?? WSDL(Web Services Description Language)就是這樣一個(gè)基于XML的語(yǔ)言,用于描述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ù)提供商可以通過兩種方式來(lái)暴露它的WSDL文件地址:1.注冊(cè)到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ù)對(duì)象發(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ù)。(使用廠商的WSDL2Java之類的工具生成靜態(tài)調(diào)用的代理類代碼;使用廠商提供的客戶端編程API類;使用SUN公司早期標(biāo)準(zhǔn)的jax-rpc開發(fā)包;使用SUN公司最新標(biāo)準(zhǔn)的jax-ws開發(fā)包。當(dāng)然SUN已被Oracle收購(gòu))
???WebService的工作調(diào)用原理:對(duì)客戶端而言,我們給這各類WebService客戶端API傳遞wsdl文件的url地址,這些API就會(huì)創(chuàng)建出底層的代理類,我調(diào)用這些代理,就可以訪問到webservice服務(wù)。代理類把客戶端的方法調(diào)用變成soap格式的請(qǐng)求數(shù)據(jù)再通過HTTP協(xié)議發(fā)出去,并把接收到的soap數(shù)據(jù)變成返回值返回。對(duì)服務(wù)端而言,各類WebService框架的本質(zhì)就是一個(gè)大大的Servlet,當(dāng)遠(yuǎn)程調(diào)用客戶端給它通過http協(xié)議發(fā)送過來(lái)soap格式的請(qǐng)求數(shù)據(jù)時(shí),它分析這個(gè)數(shù)據(jù),就知道要調(diào)用哪個(gè)java類的哪個(gè)方法,于是去查找或創(chuàng)建這個(gè)對(duì)象,并調(diào)用其方法,再把方法返回的結(jié)果包裝成soap格式的數(shù)據(jù),通過http響應(yīng)消息回給客戶端。
?
五、適用場(chǎng)合
1、跨防火墻通信:
?? 如果應(yīng)用程序有成千上萬(wàn)的用戶,而且分布在世界各地,那么客戶端和服務(wù)器之間的通信將是一個(gè)棘手的問題。因?yàn)榭蛻舳撕头?wù)器之間通常會(huì)有防火墻或者代理服務(wù)器。在這種情況下,使用DCOM就不是那么簡(jiǎn)單,通常也不便于把客戶端程序發(fā)布到數(shù)量如此龐大的每一個(gè)用戶手中。傳統(tǒng)的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁(yè)面,把應(yīng)用程序的中間層暴露給最終用戶。這樣做的結(jié)果是開發(fā)難度大,程序很難維護(hù)。如果中間層組件換成WebService的話,就可以從用戶界面直接調(diào)用中間層組件。從大多數(shù)人的經(jīng)驗(yàn)來(lái)看,在一個(gè)用戶界面和中間層有較多交互的應(yīng)用程序中,使用WebService這種結(jié)構(gòu),可以節(jié)省花在用戶界面編程上20%的開發(fā)時(shí)間。
2、應(yīng)用程序集成:
?? 企業(yè)級(jí)的應(yīng)用程序開發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語(yǔ)言寫成的、在不同平臺(tái)上運(yùn)行的各種程序集成起來(lái),而這種集成將花費(fèi)很大的開發(fā)力量。應(yīng)用程序經(jīng)常需要從運(yùn)行在IBM主機(jī)上的程序中獲取數(shù)據(jù);或者把數(shù)據(jù)發(fā)送到主機(jī)或UNIX應(yīng)用程序中去。即使在同一個(gè)平臺(tái)上,不同軟件廠商生產(chǎn)的各種軟件也常常需要集成起來(lái)。通過WebService,可以很容易的集成不同結(jié)構(gòu)的應(yīng)用程序。
3、B2B集成:
?? 用WebService集成應(yīng)用程序,可以使公司內(nèi)部的商務(wù)處理更加自動(dòng)化。但當(dāng)交易跨越供應(yīng)商和客戶、突破公司的界限時(shí)會(huì)怎么樣呢?跨公司的商務(wù)交易集成通常叫做B2B集成。WebService是B2B集成成功的關(guān)鍵。通過WebService,公司可以把關(guān)鍵的商務(wù)應(yīng)用“暴露”給指定的供應(yīng)商和客戶。例如,把電子下單系統(tǒng)和電子發(fā)票系統(tǒng)“暴露”出來(lái),客戶就可以以電子的方式發(fā)送訂單,供應(yīng)商則可以以電子的方式發(fā)送原料采購(gòu)發(fā)票。當(dāng)然,這并不是一個(gè)新的概念,EDI(電子文檔交換)早就是這樣了。但是,WebService的實(shí)現(xiàn)要比EDI簡(jiǎn)單得多,而且WebService運(yùn)行在Internet上,在世界任何地方都可輕易實(shí)現(xiàn),其運(yùn)行成本就相對(duì)較低。不過,WebService并不像EDI那樣,是文檔交換或B2B集成的完整解決方案。WebService只是B2B集成的一個(gè)關(guān)鍵部分,還需要許多其它的部分才能實(shí)現(xiàn)集成。
?? 用WebService來(lái)實(shí)現(xiàn)B2B集成的最大好處在于可以輕易實(shí)現(xiàn)互操作性。只要把商務(wù)邏輯“暴露”出來(lái),成為WebService,就可以讓任何指定的合作伙伴調(diào)用這些商務(wù)邏輯,而不管他們的系統(tǒng)在什么平臺(tái)上運(yùn)行,使用什么開發(fā)語(yǔ)言。這樣就大大減少了花在B2B集成上的時(shí)間和成本,讓許多原本無(wú)法承受EDI的中小企業(yè)也能實(shí)現(xiàn)B2B集成。
4、軟件和數(shù)據(jù)重用:????
????? 軟件重用是一個(gè)很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級(jí)的重用,一種形式是二進(jìn)制形式的組件重用。采用WebService應(yīng)用程序可以用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)“暴露”出來(lái),供其它應(yīng)用程序使用,達(dá)到業(yè)務(wù)級(jí)重用。
?
六、不適用場(chǎng)合
1、單機(jī)應(yīng)用程序:
????? 目前,企業(yè)和個(gè)人還使用著很多桌面應(yīng)用程序。其中一些只需要與本機(jī)上的其它程序通信。在這種情況下,最好就不要用WebService,只要用本地的 API就可以了。COM非常適合于在這種情況下工作,因?yàn)樗刃∮挚臁_\(yùn)行在同一臺(tái)服務(wù)器上的服務(wù)器軟件也是這樣。最好直接用COM或其它本地的API來(lái)進(jìn)行應(yīng)用程序間的調(diào)用。當(dāng)然WebService也能用在這些場(chǎng)合,但那樣不僅消耗太大,而且不會(huì)帶來(lái)任何好處。
2、局域網(wǎng)的同構(gòu)應(yīng)用程序:
????? 在許多應(yīng)用中,所有的程序都是用VB或VC開發(fā)的,都在Windows平臺(tái)下使用COM,都運(yùn)行在同一個(gè)局域網(wǎng)上。例如,有兩個(gè)服務(wù)器應(yīng)用程序需要相互通信,或者有一個(gè)Win32或WinForm的客戶程序要連接局域網(wǎng)上另一個(gè)服務(wù)器的程序。在這些程序里,使用DCOM會(huì)比SOAP/HTTP有效得多。與此相類似,如果一個(gè).NET程序要連接到局域網(wǎng)上的另一個(gè).NET程序,應(yīng)該使用.NETremoting。有趣的是,在.NETremoting 中,也可以指定使用SOAP/HTTP來(lái)進(jìn)行WebService調(diào)用。不過最好還是直接通過TCP進(jìn)行RPC調(diào)用,那樣會(huì)有效得多。
轉(zhuǎn)載于:https://www.cnblogs.com/qiuxiangmuyu/p/5996932.html
總結(jié)
以上是生活随笔為你收集整理的【JavaEE】WebService到底是什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring-profile设置
- 下一篇: [ZPG TEST 109] 兔子跳跃【