Web服務(Web Services)是目前程序設計領域中的一項新技術,是一個嶄新的分布式計算模式,在不同系統平台之間具有互操作性,通過因特網,實現不同應用程序之間的遠程過程調用。下面介紹Java EE的Web服務原理和體系結構。
Web服務使用基於XML 的消息處理作為基本的數據通訊方式,消除使用不同組件模型、操作系統和編程語言的系統之間存在的差異,使異類系統能夠作為單個計算網絡協同運行。開發人員可以用象過去在創建分布式應用程序時使用組件一樣的方式創建將來自各種源的Web服務組合在一起的應用程序。
Web服務是建立在一些通用協議的基礎上,如HTTP,SOAP,XML,WSDL,UDDI等。這些協議在涉及到操作系統、對象模型和編程語言的選擇時,沒有任何傾向,因此將會有很強的生命力。
J2EE的Web服務工作原理
1.J2EE的Web服務模型
大家知道,普通Web服務的系統架構是面向服務的,服務的發布的發現是Web系統架構中首先要解決的主要問題。在java編程環境下,Web 服務通過JAXR(Java API for XML RegistrIEs)實現自身的發布。客戶使用同樣的JAXR API尋找服務,使用JAX-RPC綁定和調用Web服務。如下圖1所示:
圖 1
2.J2EE在消息發送層(SOAP)和傳輸協議層(HTTP)的工作過程
用下圖2可以說明,在具有Web服務功能的應用程序服務器上運行著一個標准的J2EE應用程序。在圖中的左上角是Java,C++或C#客戶機,現在,這個應用程序發出SOAP請求。該SOAP請求把Web服務操作封裝在一個XML有效載荷中,然後,通過HTTP協議傳送。在Web服務端,傳輸層繼續把該調用輸送劍SOAP服務端,然後,服務器就調用相應的已經展現為Web服務的J2EE功能。Web服務產生的任何響應都會被再編碼成為一個SOAP響應,並通過HTTP協議傳輸回客戶機去。
圖 2
從圖2中可以清楚地看出,利用消息發送層(Messaging layer) (SOAP)和傳輸協議層(Transoort Network laver) (HTTP)就可以完成應用程序內部的通信。應用程序內部通信的問題通過一些銷售商的專有技術(例如CORBA和DCOM等)以前就已經解決了。這些技術操作起來很麻煩,並且,也不能通過防火牆。因此,現在我們用SOAP,通過簡單的XML這個開放式的標准,就可以有效地實現應用程序內部的通信,不會使自己鎖定在某個銷售商的專有機制上。
3.J2EE在消息發送層(SOAP)、傳輸協議層(HTTP)和Web服務描述(WSDL)的工作過程
圖3顯示的是對前面所介紹的Web服務模式的簡單擴展;在圖3中只需要在兩個應用程序之間傳遞的SOAP消息之間存在著緊密的耦合。現在,有了一個附加的Web服務描述層,服務提供者就可以用建立和發行WSDL文檔的方法來描述他們的Web服務。WSDL文檔中不僅包含有該Web服務的抽象定義,而且也包含有實現(綁定)該Web服務的細節。
這意味著服務的消費者(即例子中的客戶應用程序)需要得到WSDL文檔,它不僅可以從這個文檔中得到包括Web服務的消息和數據類型的不同操作,而且還能夠重新得到該Web服務的終端(例如URL),SOAP消息可以在終端上交換。如果J2EE服務是通過SMTP消息展示功能的,那麼WSDL文檔也會描述這一點。
圖 3
4.J2EE使用UDDI、WSDL和SOAP三種技術的工作過程
在圖4中假設服務提供者已經決定把某項商業功能展示成Web服務。該Web服務駐留在一個基於Java的Web服務系統中。通過圖中的順序步驟看一下整個的工作機制。
圖 4
1)服務提供者的第一步是編寫WSDL文件。
當前市場上有好幾種工具,可以幫助我們用現有的對象定義產生出WSDL文件。然後,需要發布關於它自己的信息,把商業和這項Web服務的技術規范作為-個WSDL文件發布到中心UDDL注冊表。這樣,用寫WSDL文件的方法使得Web服務的描述占據了服務描述層。
但是,在Web服務棧中我們看到,發布的商業信息和WSDL文件表現的是Web服務棧中的服務發布層。
2)服務消費者應用程序可以發現它有興趣使用的Web服務。
發現不僅涉及到要搜索商業和它的服務,而且還要下載WSDL文件中所提到的技術規范。發現的步驟對應於Web服務棧中的服務發現層。
3)最後,服務消費者應用程序用WSDL文件來確定,為了與服務提供者的Web服務通信,需要傳送哪些消息,並且它還要決定綁定信息。為了達到這個目的,綁定信息就是HTTP上的SOAP。這個步驟對應於Web服務棧中的XML消息和傳輸層。
下圖5是對J2EE系統的Web服務體系結構整體描述。
圖 5