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