webService基礎(chǔ)總結(jié)
WebService是一種跨編程語(yǔ)言和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù)
所謂跨編程語(yǔ)言和跨操作平臺(tái),就是說(shuō)服務(wù)端程序采用java編寫,客戶端程
序則可以采用其他編程語(yǔ)言編寫,反之亦然!跨操作系統(tǒng)平臺(tái)則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運(yùn)行。除了WebService外,常見(jiàn)的遠(yuǎn)程調(diào)用技術(shù)還有RMI(Remotemethodinvoke)
和CORBA,由于WebService的跨平臺(tái)和跨編程語(yǔ)言特點(diǎn),因此比其他兩種技術(shù)應(yīng)用更為廣泛,但性能略低。
WebService使用SOAP協(xié)議實(shí)現(xiàn)跨編程語(yǔ)言和跨操作系統(tǒng)平臺(tái)
WebService采用HTTP協(xié)議傳輸數(shù)據(jù),采用XML格式封裝數(shù)據(jù)(即XML中
說(shuō)明調(diào)用遠(yuǎn)程服務(wù)對(duì)象的哪個(gè)方法,傳遞的參數(shù)是什么,以及服務(wù)對(duì)象的返回結(jié)果是什么)。WebService通過(guò)HTTP協(xié)議發(fā)送請(qǐng)求和接收結(jié)果時(shí),發(fā)送的請(qǐng)求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說(shuō)明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議(simpleobjectaccessprotocol,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)。SOAP協(xié)議=HTTP協(xié)議+XML數(shù)據(jù)格式
HTTP協(xié)議和XML是被廣泛使用的通用技術(shù),各種編程語(yǔ)言對(duì)HTTP協(xié)議和
XML這兩種技術(shù)都提供了很好的支持,WebService客戶端與服務(wù)器端使用什么編程語(yǔ)言都可以完成SOAP的功能,所以,WebService很容易實(shí)現(xiàn)跨編程語(yǔ)言,跨編程語(yǔ)言自然也就跨了操作系統(tǒng)
WebService客戶端要調(diào)用一個(gè)WebService服務(wù),首先要有知道這個(gè)服務(wù)的
地址在哪,以及這個(gè)服務(wù)里有什么方法可以調(diào)用,所以,WebService務(wù)器端首先要通過(guò)一個(gè)WSDL文件來(lái)說(shuō)明自己家里有啥服務(wù)可以對(duì)外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個(gè)url地址表示,服務(wù)通過(guò)什么方式來(lái)調(diào)用。WSDL(webservicedescriptionlanguage)是基于XML格式的,它是WebService
客戶端和服務(wù)器端都能理解的標(biāo)準(zhǔn)格式,其中描述的信息可以分為what,where,how等部分!
WSDL文件保存在Web服務(wù)器上,通過(guò)一個(gè)url地址就可以訪問(wèn)到它。客戶
端要調(diào)用一個(gè)WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過(guò)兩種方式來(lái)暴露它的WSDL文件地址:
注冊(cè)到UDDI服務(wù)器,以便被人查找直接告訴給客戶端調(diào)用者,例如,在自己網(wǎng)站給出信息或郵件告訴。
擴(kuò)展閱讀:webservice基礎(chǔ)知識(shí)與學(xué)習(xí)心得
Webservice基礎(chǔ)知識(shí)
常見(jiàn)術(shù)語(yǔ)WSDL
WSDL即"WebServicesDescriptionLanguage"簡(jiǎn)稱,是一種平臺(tái)中立,語(yǔ)言中立并且能夠在Internet上自由傳輸?shù)牟捎肵ML描述的語(yǔ)言。
Operation
Operation即定義在WSDL中的方法,它包含輸入消息(inputmessage)和輸出消息(outputmessage),而消息是由一個(gè)或多個(gè)塊(part)組成。塊Part要么是自己定義在其他schema中的消息參數(shù),要么是來(lái)自
Porttype
Porttype也是WSDL中的節(jié)點(diǎn)之一,它可以形象的理解為一個(gè)Javaclass,此時(shí)Operation就是Javaclass中的方法
Binding
因消息在Internet中傳輸?shù)母袷胶蛥f(xié)議不同,Binding是對(duì)特殊消息格式和協(xié)議的一個(gè)封裝,Binding也是WSDL中的節(jié)點(diǎn)之一。
Port
Port說(shuō)明WebService部署在哪個(gè)端口,Port也是WSDL中的節(jié)點(diǎn)之一。
Targetnamespace
Targetnamespace可以形象理解為Javapackage,它沒(méi)有任何意義,唯一的用途是來(lái)唯一標(biāo)示W(wǎng)ebService,使之全局唯一Endpoint
Endpoint是WebService的詳細(xì)訪問(wèn)地址(比如::30000/meoms/services/EOMSBulletinUpService),它是可以訪問(wèn)的,而Targetnamespace雖然采用URL的形式命名,但是不可以訪問(wèn)的,一般訪問(wèn)會(huì)出錯(cuò)。
ApacheCXF,ApacheAxis2andMetrofromSunMicrosystems
ApacheCXF,ApacheAxis2andMetrofromSunMicrosystems只不過(guò)是針對(duì)Java的一些WebService處理工具,作用是在客戶端傳遞消息過(guò)來(lái)時(shí),把它轉(zhuǎn)化為服務(wù)端Java類并請(qǐng)調(diào)用服務(wù)端提供的服務(wù)。
WSDL的兩種形式RPCstyle
RPC即"RemoteProcedureCall",特點(diǎn)是WSDL中輸入消息(inputmessage)和輸出消息(outputmessage)定義中采用完整的參數(shù)定義,參數(shù)定義不放在其他地方。
Documentstyle
Documentstyle特點(diǎn)是WSDL中輸入消息(inputmessage)和輸出消息(outputmessage)定義可以放在其他Schema定義中,現(xiàn)在通常采用這種方式。
Webservice開(kāi)發(fā)
前提:
已經(jīng)取得WSDL,WSDL可以自己開(kāi)發(fā),現(xiàn)在Eclipse有專門插件支持,可以直接拖動(dòng)節(jié)點(diǎn)來(lái)開(kāi)發(fā)即可,如果是客戶端,一般對(duì)方會(huì)提供他們的WSDL,但如果自己是服務(wù)端,要么是自己定義WSDL,要么是第三方提供。
以下例子都是采用AXIS開(kāi)發(fā)。AXIS安裝和配置安裝
在下載axis-bin-1_2_1.zip,解壓后即安裝完成。注意:
下載的axis缺少jar包:activation.jar和mail.jar,請(qǐng)自己加上。
配置
增加環(huán)境變量
AXIS_HOME=C:\\Users\\Administrator\\Desktop\\axis-1_2_1修改CLASSPATH,增加
%AXIS_HOME%\\activation.jar;%AXIS_HOME%\\axis.jar;%AXIS_HOME%\\axis-ant.jar;%AXIS_HOME%\\commons-discovery-0.2.jar;%AXIS_HOME%\\commons-logging-1.0.4.jar;%AXIS_HOME%\\jaxrpc.jar;%AXIS_HOME%\\log4j-1.2.8.jar;%AXIS_HOME%\\mail.jar;%AXIS_HOME%\\saaj.jar;%AXIS_HOME%\\wsdl4j-1.5.1.jar;
AXIS中WSDL2Java命令參數(shù)說(shuō)明
輸入命令“avaorg.apache.axis.wsdl.WSDL2Javah”,參數(shù)說(shuō)明如下-h,--help
printthismessageandexit-v,--verbose
printinformationalmessages-n,--noImports
onlygeneratecodefortheimmediateWSDLdocument-O,--timeout
timeoutinseconds(defaultis45,specify-1todisable)-D,--Debug
printdebuginformation-W,--noWrapped
turnoffsupportfor"wrapped"document/literal-q,--quiet
donotprintanyinformationalordebugmessages(excepterrors)-s,--server-side
emitserver-sidebindingsforwebservice-S,--skeletonDeploy
deployskeleton(true)orimplementation(false)indeploy.wsdd.Defaultisfalse.Assumes--server-side.-N,--NStoPkg=
mappingofnamespacetopackage-f,--fileNStoPkg
fileofNStoPkgmappings(defaultNStoPkg.properties)-p,--package
overrideallnamespacetopackagemappings,usethispackagenameinstead-o,--output
outputdirectoryforemittedfiles-d,--deployScope
addscopetodeploy.wsdd:"Application","Request","Session"-t,--testCase
emitjunittestcaseclassforwebservice-a,--all
generatecodeforallelements,evenunreferencedones-T,--typeMappingVersion
indicate1.1or1.2.Thedefaultis1.1(SOAP1.1JAX-RPCcompliant.1.2indicatesSOAP1.1encoded.)-F,--factory
nameofacustomclassthatimplementsGeneratorFactoryinterface(forextendingJavagenerationfunctions)-H,--helperGen
emitsseparateHelperclassesformetadata-B,--buildFile
emitAntBuildfileforwebservice-U,--user
usernametoaccesstheWSDL-URI-P,--password
passwordtoaccesstheWSDL-URI-X,--classpath
additionalclasspathelements-i,--nsInclude
includenamespaceingeneratedcode-x,--nsExclude
excludenamespacefromgeneratedcode-c,--implementationClassName
customnameofwebserviceimplementation-u,--allowInvalidURL
emitfileevenifWSDLendpointURLisnotavalidURL-w,--wrapArrays
PrefersbuildingbeanstostraightarraysforwrappedXMLarraytypes(defaultstooff).AXIS將WSDL轉(zhuǎn)化為Java文件、客戶端調(diào)用和服務(wù)端實(shí)現(xiàn)命令和常用參數(shù)說(shuō)明
命令:
Javaorg.apache.axis.wsdl.WSDL2JavaWSDL存放位置參數(shù)說(shuō)明:
-o輸出文件存放起始目錄
-d部署服務(wù)訪問(wèn)范圍,可選值為"Application","Request","Session"
-s生成服務(wù)端,無(wú)此項(xiàng)的話一般默認(rèn)為客戶端,但也可以自己實(shí)現(xiàn)接口使之成為服務(wù)端
-S是否生成deployd.wsdd和undeployd.wsdd文件,值為true或false-p生成文件包名,如果不加,默認(rèn)以WSDL中namespace來(lái)命名包名
生成客戶端
命令:C:\\Users\\Administrator>javaorg.apache.axis.wsdl.WSDL2Java-peoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice
C:\\Users\\Administrator\\Desktop\\部省接口規(guī)范\\EOMSDispatchUpService.wsdl說(shuō)明:
-peoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice定義生成文件包名為eoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice生成文件如下:
客戶端調(diào)用服務(wù)
EOMSDispatchUpService_ServiceLocatorlocator=newEOMSDispatchUpService_ServiceLocator();EOMSDispatchUpServiceBindingStubbinding=locator.getEOMSDispatchUpService(“對(duì)方服務(wù)地址”);binding.reportAppForm(封裝參數(shù));
生成服務(wù)端
命令:C:\\Users\\Administrator>javaorg.apache.axis.wsdl.WSDL2Java-o.-dRequest-s-Strue-peoms.npform.eomsdispatchnpform.localservice.server.dispatchdownservice
C:\\Users\\Administrator\\Desktop\\部省接口規(guī)范\\EOMSDispatchDownService.wsdl說(shuō)明:
-o.默認(rèn)輸出在C:\\Users\\Administrator目錄下面-dRequest部署時(shí)訪問(wèn)范圍-s生成服務(wù)端-Strue生成deployd.wsdd和undeployd.wsdd文件
-peoms.npform.eomsdispatchnpform.localservice.server.dispatchdownservice定義生成文件包名為eoms.npform.eomsdispatchnpform.localservice.server.dispatchdownservice生成文件如下:
服務(wù)端代碼填充
一是自己實(shí)現(xiàn)EOMSDispatchDownServicePortType.java接口,但要修改部署文件service-config.wsdd文件中服務(wù)實(shí)現(xiàn)類;
二是直接填充EOMSDispatchDownServiceBindingStub.java,其實(shí)此類也只不是實(shí)現(xiàn)了EOMSDispatchDownServicePortType.java接口而已,只是不用修改部署文件。AXIS服務(wù)部署文件拷貝
拷貝解壓后的axis文件axis-1_2_1\\axis-1_2_1\\webapps下面axis文件到tomcat目錄Tomcat-5.5.25\\webapps下面;
將編譯后的class文件拷貝到Tomcat-5.5.25\\webapps\\axis\\WEB-INF\\classes目錄下面;將剛才服務(wù)端生成的deploy.wsdd拷貝到Tomcat-5.5.25\\webapps\\axis\\WEB-INF;
啟動(dòng)tomcat
瀏覽器中輸入:8888/axis,截圖如下:
點(diǎn)擊List,彈出界面如下:
生成service-config.wsdd
注意:tomcat一定要啟,axisjar包一定要配置好命令:javaorg.apache.axis.client.AdminClient-l
:8888/axis/services/EOMSDispatchDownServicedeploy.wsdd說(shuō)明:
-l:8888/axis/services/EOMSDispatchDownService因我的tomcat端口已經(jīng)被我修改為8888,但默認(rèn)部署在端口8080,所以這里必須加參數(shù)-L來(lái)制定部署的端口。圖示:
再次訪問(wèn)試一下:
服務(wù)發(fā)布成功,此時(shí)Tomcat-5.5.25\\webapps\\axis\\WEB-INF新增加文件server-config.wsdd
部署服務(wù)
1.只要拷貝server-config.wsdd中的
…….
到要部署服務(wù)的項(xiàng)目中的server-config.wsdd即可完成服務(wù)的部署。
2.其實(shí)可以自己寫
…….
中的配置信息,如下:
也可以完成部署,此時(shí)都可以不管deploy.wsdd、undeploy.wsdd和service-congig.wsdd
友情提示:本文中關(guān)于《webService基礎(chǔ)總結(jié)》給出的范例僅供您參考拓展思維使用,webService基礎(chǔ)總結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。