99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

8.1.Webservice原理

2023-07-03 17:23 更新
前面說過,BDF2-WEBSERVICE是基于Spring-WS構(gòu)建,所以如果您了解Spring-WS的開發(fā)流程,那么,一切就很容易實(shí)現(xiàn)。反之,如果您不了解Spring-WS或不太理解Webservice的運(yùn)行原理,那我們建議您先去了解一下。這里在開始開發(fā)一個Webservice之前,我們建議您去w3school上學(xué)習(xí)一下XSD語法及WSDL語法,熟悉這兩種類型的XML對于我們開發(fā)基于Spring-WS的Webservice來說是必須的,同時它也會幫助我們理解Webservice的整個運(yùn)行原理,總之有百利而無一害。不要害怕學(xué)習(xí),w3school上關(guān)于這兩種類型XML的教程寫的非常好,也非常簡單,先去學(xué)習(xí)一下吧。

從零開始學(xué)習(xí)Webservice開發(fā)并不是BDF2-WEBSERVICE的責(zé)任,但這里我們也會簡單介紹一下Webservice運(yùn)行原理,要想更為深入的學(xué)習(xí)Webservice,大家還需要去好好研究它的規(guī)范才行。


我們知道,Webservice主要特點(diǎn)是跨平臺,也就是我們通過JAVA暴露的Webservice可能通過Java的客戶端調(diào)用,也可以通過.net或php的客戶端調(diào)用,反之亦然。應(yīng)該說,這一點(diǎn)是吸引我們使用Webservice最重要的原因,那它是怎么實(shí)現(xiàn)這種跨平臺調(diào)用的呢?

Webservice規(guī)則通過傳輸固定格式的XML來解決跨平臺調(diào)用問題,那就是在用戶請求目標(biāo)Webservice時,需要將請求的內(nèi)容包裝成一個特定的XML格式:SOAP,也就是簡單對象訪問協(xié)議,這是一個特定基于XML格式的消息協(xié)議。調(diào)用客戶端將消息封裝成SOAP格式的XML,通過標(biāo)準(zhǔn)的HTTP協(xié)議向目標(biāo)Webservice發(fā)送一個標(biāo)準(zhǔn)的post請求,請求的內(nèi)容就是這個封裝好的SOAP格式的XML消息。Webservice服務(wù)端在收到這個客戶端提交上來的POST請求之后,會將請求的XML內(nèi)容以一個SOAP格式進(jìn)行解析,在解析并獲取到客戶端請求的SOAP格式的XML消息之后,接下來,Webservice服務(wù)端需要知道服務(wù)端的哪個類哪個方法可以接受并響應(yīng)這個請求。

一般來說,Webservice服務(wù)端有兩種方式用于匹配具體的用于響應(yīng)Webservice服務(wù)的類及方法:一個是根據(jù)請求的SOAP消息的XML的root的節(jié)點(diǎn)名稱及其采用的namespace;一個是根據(jù)從SOAP消息的header中取出的SOAPAction的值(對于Spring-WS來說,這兩種方法都支持),一旦找到了匹配的響應(yīng)Webservice服務(wù)的類及方法,那么它會檢查這個服務(wù)是否需要基于WS-Security的認(rèn)證,如果需要,那么它會嘗試從這個SOAP的header中獲取相關(guān)認(rèn)證信息,在通過認(rèn)證之后,按照匹配的響應(yīng)Webservice服務(wù)的類及方法的要求,將SOAP格式的XML消息的body部分解析成相應(yīng)的參數(shù)對象,交由匹配的響應(yīng)Webservice服務(wù)的類及方法去執(zhí)行處理。方法處理完成之后,如果有響應(yīng),那么Webservice服務(wù)端會將響應(yīng)的結(jié)果反序列化成一個標(biāo)準(zhǔn)的SOAP格式的XML,再這個XML回寫到客戶端,客戶端再對取到的SOAP格式的響應(yīng)結(jié)果進(jìn)行解析,從而完成整個Webservice調(diào)用。

可以看到,Webservice服務(wù)的請求與響應(yīng)的內(nèi)容皆以XML格式為載體,我們知道XML是一種跨平臺的消息傳遞格式,所有平臺都可以對其進(jìn)行解析、處理,所以Webservice也就可以進(jìn)行跨平臺調(diào)用。到目前為止,我們還沒有涉及到WSDL,實(shí)際上Webservice服務(wù)本身與WSDL并無關(guān)系,WSDL的全稱是Webservice描述語言,也就是說WSDL是用來描述目標(biāo)Webservice是什么樣的,用來告訴我們的客戶該怎么調(diào)用這個Webservice的。所以我們完全可以把WSDL理解成是某個Webservice服務(wù)的說明文檔或者是幫助文檔,沒有這個WSDL,我們的Webservice服務(wù)照樣可以正常運(yùn)行,也就是說WSDL存在與否不會對Webservice服務(wù)產(chǎn)生任何影響。但對于我們程序員來說,暴露的Webservice是給我們調(diào)用的,所以我們必須學(xué)會看懂WSDL,不然就不知道如何調(diào)用目標(biāo)Webservice,這也是我們開篇強(qiáng)調(diào)學(xué)習(xí)WSDL的重要原因。

開篇除了強(qiáng)調(diào)學(xué)習(xí)WSDL之外,我們還強(qiáng)調(diào)學(xué)習(xí)XSD,其實(shí)對于標(biāo)準(zhǔn)的Webservice而言是不需要了解XSD的,但我們這里強(qiáng)調(diào)學(xué)習(xí)XSD的原因是其可以幫助我們編寫WSDL文件。了解了WSDL之后,會發(fā)現(xiàn)其語法較為復(fù)雜,手工編寫起來難度很大,所以Spring-WS為我們提供了另外一種選擇,那就是通過編寫XSD來代替WSDL,Spring-WS會幫我們將XSD動態(tài)轉(zhuǎn)換成WSDL,相比WSDL,編寫XSD要簡單許多。
Webservice開發(fā)有兩種模式:一種稱之為contract-first;另一種是contract-last。關(guān)于這兩種模式的優(yōu)劣,Spring-WS官方文檔作了大篇幅的討論,感興趣可以去看看,這里就不再贅述了。Spring-WS采用的是contract-first模式,相比contract-last有眾多優(yōu)勢,具體大家可以看到Spring-WS官方文檔。

對于Spring-WS來說,基于contract-first模式開發(fā)Webservice首先要做的第一件事就是確定我們的WSDL,也就是把要把編寫的目標(biāo)Webservice描述清楚:其中包含請求當(dāng)中應(yīng)該包含哪些信息、響應(yīng)當(dāng)中應(yīng)該包含哪些信息、應(yīng)該采用什么樣的namespace等。所以這里的WSDL相當(dāng)于我們軟件開發(fā)當(dāng)中的需求文檔,把需求文檔寫清楚了,程序員才知道如何編寫具體的業(yè)務(wù)代碼,只是這里的需求文檔是WSDL,是一個XML文件,除此之外,它與需求文檔的在本質(zhì)完全相同。

例子是最好的教程,接下來我們就來編寫一個Webservice,并用SOAPUI來測試其是否可使用,按照Spring-WS的contract-first模式,我們首先來編寫一個用于描述Webservice內(nèi)容的WSDL,這里其實(shí)就是編寫一個XSD文件。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號