《企業(yè)級開發(fā)WEB服務的實現(xiàn)》由會員分享,可在線閱讀,更多相關《企業(yè)級開發(fā)WEB服務的實現(xiàn)(30頁珍藏版)》請在裝配圖網上搜索。
1、第三章第三章WEB服務(服務(WEB SERICE)原理)原理 課程內容課程內容Web Service的概念 Web Service的標準 什么是WSDL 什么是SOAP 什么是UDDI 簡單的Web Service的創(chuàng)建和客戶端的訪問WEB SERVICE的概述的概述 WEB服務產生背景服務產生背景(Cont.)Internet信息化應用需求信息化應用需求HTMLHTMLSOAP/WSDL/UDDISOAP/WSDL/UDDIAny time Any where Any device跨互聯(lián)網跨互聯(lián)網松散耦合松散耦合協(xié)同工作協(xié)同工作資源共享資源共享互連互連互通互通互操作互操作WEB服服務務的目
2、的目標標為了讓地理上分布在不同區(qū)域的計算機和設備一起工作,為用戶提供各種各樣的服務。用戶可以控制要獲取信息的內容、時間、方式,而不必像目前這樣,在無數(shù)個信息孤島中瀏覽,去尋找自己需要的信息。選擇目的地:天氣預報:匯率:飛機票價:雨雨雨雨Redmond$1.56$1,999.98NorthwindNorthwind 商務旅游網商務旅游網商務旅游網商務旅游網XML Web Service應用案例應用案例InternetInternet天氣預報天氣預報XML Web Service匯率匯率XML Web Service飛機票價飛機票價數(shù)據(jù)庫數(shù)據(jù)庫飛機票價飛機票價XML Web ServiceWeb
3、Service工作模式工作模式什么是什么是WEB SERVICE?Web Service的定義:一個Web Service就是一個可以被URI識別的軟件應用,它的接口可以被XML描述與發(fā)現(xiàn),并且可以通過基于Internet的協(xié)議直接支持,與其它基于XML消息的軟件應用交互。Web Service就是個對外的接口,里面有函數(shù)可供外部客戶調用(注意:里面同樣有客戶不可調用的函數(shù))。Web Service是建立可互操作的分布式應用程序的新平臺。Web Service平臺是一套標準,它定義了應用程序如何在Web上實現(xiàn)互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web Service,只要
4、我們可以通過Web Service標準對這些服務進行查詢和訪問。特點特點 Web Service傳遞的數(shù)據(jù)只能是序列化的數(shù)據(jù),典型的就是XML數(shù)據(jù)。Web Service是描述一組操作的接口,這些操作可以通過標準的XML消息在網絡上進行訪問。Web Service可看作是一些模塊化的應用程序,這些應用程序能在Web上描述、發(fā)布、定位和調用。Web Service描述了一種重要的分布式計算模型,與DCE、CORBA、RMI等方法不同,它更強調基于單個Internet標準來解決異構的分布式計算問題。Web Service定義了一種技術,用于描述被訪問的軟件組件、訪問組件的方法以及找到相關服務提供這
5、樣的發(fā)現(xiàn)方法。Web Service并不傾向于特定的編程語言和系統(tǒng)平臺。也就是說我們可以用多種語言來實現(xiàn)Web Service,比如C#或者是Java等等。WEB SERVICE技術技術 服務提供者(服務提供者(Service provider):對外提供服:對外提供服務,并且通過注冊來發(fā)布服務信息。務,并且通過注冊來發(fā)布服務信息。服務注冊器(服務注冊器(Service broker):提供服務的發(fā)):提供服務的發(fā)布和定位功能。布和定位功能。服務請求者(服務請求者(Service requester):通過服務代):通過服務代理查詢所需服務,并通過服務提供者綁定服務。理查詢所需服務,并通過服務
6、提供者綁定服務。WEB SERVICE的標準的標準Web服務服務=WDDL+SOAP+UDDIWSDL Web Service描述語言(WSDL)就是這樣一個基于XML的語言,用于描述Web Service及其函數(shù)、參數(shù)和返回值。因為是基于XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的。一些最新的開發(fā)工具既能根據(jù)你的Web Service生成WSDL文檔,又能導入WSDL文檔,生成調用相應Web Service的代碼。一個簡單的一個簡單的WSDL文件文件下面是了下面是了HelloWebService服務的服務的WSDL文件的部分內容。文件的部分內容。.WSDL文件的文件的根元素都是根元
7、素都是 元素包含一個元素包含一個或多個或多個元素元素 Hello WebService服務指定名稱服務指定名稱 SOAP SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),是用于交換XML編碼信息的輕量級協(xié)議。它有三個主要方面:XML-envelope為描述信息內容和如何處理內容定義了框架,將程序對象編碼成為XML對象的規(guī)則,執(zhí)行遠程過程調用(RPC)的約定。SOAP可以運行在任何其它傳輸協(xié)議上。SOAP消息:請求消息:請求 在客戶同在客戶同Hello Web服務消息交互過程中,將出現(xiàn)如下類似的請求消服務消息交互過程中,將出現(xiàn)如下類似的請求消息內容:息內
8、容:xmlns:soapenv=http:/schemas.xmlsoap.org/soap/envelope/xmlns:xsd=http:/www.w3.org/2001/XMLSchema"xmlns:ns1=http:/ws.session.examples/這就是在網絡上實際傳輸?shù)倪@就是在網絡上實際傳輸?shù)腟OAP消息,它包含兩部分內容:消息,它包含兩部分內容:其一:其一:HTTP POST請求頭信息;請求頭信息;其二:其二:XML文檔。文檔。含有含有元素元素 SOAP消息:響應消息:響應響應消息的內容也非常簡單:響應消息的內容也非常簡單:xmlns:soapenv=http:
9、/schemas.xmlsoap.org/soap/envelope/xmlns:xsd=http:/www.w3.org/2001/XMLSchemaxmlns:ns1=http:/ws.session.examples Hello,World!/return 顯然,這也是由顯然,這也是由HTTP頭和頭和XML文檔構成的。文檔構成的。XML文檔含有文檔含有SOAP信信封,此時,封,此時,SOAP信封表達了調用結果,即簡單字符串。信封表達了調用結果,即簡單字符串。UDDI UDDI 的目的是為電子商務建立標準;UDDI是一套基于Web分布式的、為Web Service提供的、信息注冊中心的實現(xiàn)
10、標準規(guī)范,同時也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實現(xiàn)標準。UDDI基于現(xiàn)成的標準,如可擴展標記語言(XML)和簡單對象訪問協(xié)議(SOAP)。UDDI的所有兼容實現(xiàn)都支持UDDI規(guī)范。公共規(guī)范是機構成員在開放的、兼容并蓄的過程中開發(fā)出來的。構建一個簡單的構建一個簡單的WEB SERVICEWEB SERVICE的實現(xiàn)的實現(xiàn) 以以Eclipse+MyEclipse5.0GA版本的集成開發(fā)工具為示例來講解,步驟如下:版本的集成開發(fā)工具為示例來講解,步驟如下:首先建立一個新的工程(首先建立一個新的工程(Project)選擇)選擇“Web Serv
11、ice Project”類型類型 編寫要導出的編寫要導出的pojo類,首先是接口類,首先是接口,之后是實,之后是實現(xiàn)類現(xiàn)類配置配置services.xml 文件文件部署、測試部署、測試客戶端調用客戶端調用Web服務服務 可以直接編寫可以直接編寫Java程序來調用程序來調用WebService,在調用之前首先要獲得,在調用之前首先要獲得接口類:接口類:IHelloWorldService.class,借助于接口類來創(chuàng)建服務。,借助于接口類來創(chuàng)建服務。核心代核心代碼如下:碼如下:public static void main(String args)Service srvcModel=new Ob
12、jectServiceFactory().create(IHelloWorldService.class);XFireProxyFactory factory=new FireProxyFactory(XFireFactory.newInstance().getXFire();String helloWorldURL=http:/localhost:8080/TestWebService/services/HelloWorldService;try IHelloWorldService srvc=(IHelloWorldService)factory.create(srvcModel,hell
13、oWorldURL);System.out.print(srvc.sayHello(Kedou);catch(Exception e)e.printStackTrace();本章總結本章總結Web Service的概念 Web Service的標準 什么是WSDL 什么是SOAP 什么是UDDI 簡單的Web Service的創(chuàng)建和客戶端的訪問 動手實踐:數(shù)學計算動手實踐:數(shù)學計算Webservice 應用應用(1)創(chuàng)建一個對數(shù)字進行簡單的加、減、乘、除操作的Web服務。(2)編寫客戶端程序進行測試。實現(xiàn)步驟實現(xiàn)步驟(1)新建一個)新建一個WebService工程工程,之后編寫業(yè)務操作,之后編
14、寫業(yè)務操作的接口類的接口類(2)實現(xiàn)該接口的業(yè)務)實現(xiàn)該接口的業(yè)務(3)在工程下的)在工程下的WebService目錄下的目錄下的services.xml文文件中配置件中配置Web服務服務(4)發(fā)布)發(fā)布Web服務。啟動服務器并測試服務是否部服務。啟動服務器并測試服務是否部署成功署成功(5)編寫客戶端進行測試)編寫客戶端進行測試(1)新建一個WebService,工程命名為NumOperator,之后編寫業(yè)務操作的接口類INumWebservice,代碼如下:package com.test.webservice;public interface INumWebservice public i
15、nt add(int num1,int num2);public int subtract(int num1,int num2);public int ride(int num1,int num2);public double divide(double num1,double num2);以上的INumWebservice接口中含有四個方法,分別代表不同的操作。其中相除的操作返回的值是double類型。(2)編寫以上接口的實現(xiàn)類:NumWebserviceImpl,代碼如下:package com.test.webservice;public class NumWebserviceImpl
16、implements INumWebservice public int add(int num1,int num2)return num1+num2;public int subtract(int num1,int num2)return num1-num2;public int ride(int num1,int num2)return num1*num2;public double divide(double num1,double num2)double d=0;if(num2!=0)d=num1/num2;return d;(3)配置Web服務,在工程下的WebService目錄下的
17、services.xml文件中添加如下代碼:NumWebservicecom.test.webservice.INumWebservicecom.test.webservice.NumWebserviceImplwrappedliteralapplication(4)之后發(fā)布Web服務。啟動服務器并測試服務是否部署成功,在IE瀏覽器中輸入:“http:/localhost:8080/NumOperator/services/NumWebservice?wsdl”如果能看到服務器自動生成的wsdl文件,即說明配置成功。(5)編寫客戶端進行測試,代碼如下:package com.test.webs
18、ervice.client;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import com.test.webservice.INumWebservice;public class TestHelloWorldService public static
19、void main(String args)Service srvcModel=new ObjectServiceFactory().create(INumWebservice.class);XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire();String helloWorldURL=http:/localhost:8080/+NumOperator/services/NumWebservice;try INumWebservice srvc=(INumWebservice)factory.create(srvcModel,helloWorldURL);System.out.println(測試兩數(shù)字相加:+srvc.add(17,64);System.out.println(測試兩數(shù)字相減:+srvc.subtract(105,26);System.out.println(測試兩數(shù)字相乘:+srvc.ride(215,46);System.out.println(測試兩數(shù)字相除:+srvc.divide(49,15);catch(Exception e)e.printStackTrace();