webService基礎(chǔ)總結(jié)
WebService是一種跨編程語言和跨操作系統(tǒng)平臺的遠(yuǎn)程調(diào)用技術(shù)
所謂跨編程語言和跨操作平臺,就是說服務(wù)端程序采用java編寫,客戶端程
序則可以采用其他編程語言編寫,反之亦然!跨操作系統(tǒng)平臺則是指服務(wù)端程序和客戶端程序可以在不同的操作系統(tǒng)上運(yùn)行。除了WebService外,常見的遠(yuǎn)程調(diào)用技術(shù)還有RMI(Remotemethodinvoke)
和CORBA,由于WebService的跨平臺和跨編程語言特點(diǎn),因此比其他兩種技術(shù)應(yīng)用更為廣泛,但性能略低。
WebService使用SOAP協(xié)議實(shí)現(xiàn)跨編程語言和跨操作系統(tǒng)平臺
WebService采用HTTP協(xié)議傳輸數(shù)據(jù),采用XML格式封裝數(shù)據(jù)(即XML中
說明調(diào)用遠(yuǎn)程服務(wù)對象的哪個方法,傳遞的參數(shù)是什么,以及服務(wù)對象的返回結(jié)果是什么)。WebService通過HTTP協(xié)議發(fā)送請求和接收結(jié)果時,發(fā)送的請求內(nèi)容和結(jié)果內(nèi)容都采用XML格式封裝,并增加了一些特定的HTTP消息頭,以說明HTTP消息的內(nèi)容格式,這些特定的HTTP消息頭和XML內(nèi)容格式就是SOAP協(xié)議(simpleobjectaccessprotocol,簡單對象訪問協(xié)議)。SOAP協(xié)議=HTTP協(xié)議+XML數(shù)據(jù)格式
HTTP協(xié)議和XML是被廣泛使用的通用技術(shù),各種編程語言對HTTP協(xié)議和
XML這兩種技術(shù)都提供了很好的支持,WebService客戶端與服務(wù)器端使用什么編程語言都可以完成SOAP的功能,所以,WebService很容易實(shí)現(xiàn)跨編程語言,跨編程語言自然也就跨了操作系統(tǒng)
WebService客戶端要調(diào)用一個WebService服務(wù),首先要有知道這個服務(wù)的
地址在哪,以及這個服務(wù)里有什么方法可以調(diào)用,所以,WebService務(wù)器端首先要通過一個WSDL文件來說明自己家里有啥服務(wù)可以對外調(diào)用,服務(wù)是什么(服務(wù)中有哪些方法,方法接受的參數(shù)是什么,返回值是什么),服務(wù)的網(wǎng)絡(luò)地址用哪個url地址表示,服務(wù)通過什么方式來調(diào)用。WSDL(webservicedescriptionlanguage)是基于XML格式的,它是WebService
客戶端和服務(wù)器端都能理解的標(biāo)準(zhǔn)格式,其中描述的信息可以分為what,where,how等部分!
WSDL文件保存在Web服務(wù)器上,通過一個url地址就可以訪問到它?蛻
端要調(diào)用一個WebService服務(wù)之前,要知道該服務(wù)的WSDL文件的地址。WebService服務(wù)提供商可以通過兩種方式來暴露它的WSDL文件地址:
注冊到UDDI服務(wù)器,以便被人查找直接告訴給客戶端調(diào)用者,例如,在自己網(wǎng)站給出信息或郵件告訴。
擴(kuò)展閱讀:webservice基礎(chǔ)知識與學(xué)習(xí)心得
Webservice基礎(chǔ)知識
常見術(shù)語WSDL
WSDL即"WebServicesDescriptionLanguage"簡稱,是一種平臺中立,語言中立并且能夠在Internet上自由傳輸?shù)牟捎肵ML描述的語言。
Operation
Operation即定義在WSDL中的方法,它包含輸入消息(inputmessage)和輸出消息(outputmessage),而消息是由一個或多個塊(part)組成。塊Part要么是自己定義在其他schema中的消息參數(shù),要么是來自
Porttype
Porttype也是WSDL中的節(jié)點(diǎn)之一,它可以形象的理解為一個Javaclass,此時Operation就是Javaclass中的方法
Binding
因消息在Internet中傳輸?shù)母袷胶蛥f(xié)議不同,Binding是對特殊消息格式和協(xié)議的一個封裝,Binding也是WSDL中的節(jié)點(diǎn)之一。
Port
Port說明WebService部署在哪個端口,Port也是WSDL中的節(jié)點(diǎn)之一。
Targetnamespace
Targetnamespace可以形象理解為Javapackage,它沒有任何意義,唯一的用途是來唯一標(biāo)示W(wǎng)ebService,使之全局唯一Endpoint
Endpoint是WebService的詳細(xì)訪問地址(比如::30000/meoms/services/EOMSBulletinUpService),它是可以訪問的,而Targetnamespace雖然采用URL的形式命名,但是不可以訪問的,一般訪問會出錯。
ApacheCXF,ApacheAxis2andMetrofromSunMicrosystems
ApacheCXF,ApacheAxis2andMetrofromSunMicrosystems只不過是針對Java的一些WebService處理工具,作用是在客戶端傳遞消息過來時,把它轉(zhuǎn)化為服務(wù)端Java類并請調(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開發(fā)
前提:
已經(jīng)取得WSDL,WSDL可以自己開發(fā),現(xiàn)在Eclipse有專門插件支持,可以直接拖動節(jié)點(diǎn)來開發(fā)即可,如果是客戶端,一般對方會提供他們的WSDL,但如果自己是服務(wù)端,要么是自己定義WSDL,要么是第三方提供。
以下例子都是采用AXIS開發(fā)。AXIS安裝和配置安裝
在下載axis-bin-1_2_1.zip,解壓后即安裝完成。注意:
下載的axis缺少jar包:activation.jar和mail.jar,請自己加上。
配置
增加環(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ù)說明
輸入命令“avaorg.apache.axis.wsdl.WSDL2Javah”,參數(shù)說明如下-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ù)說明
命令:
Javaorg.apache.axis.wsdl.WSDL2JavaWSDL存放位置參數(shù)說明:
-o輸出文件存放起始目錄
-d部署服務(wù)訪問范圍,可選值為"Application","Request","Session"
-s生成服務(wù)端,無此項(xiàng)的話一般默認(rèn)為客戶端,但也可以自己實(shí)現(xiàn)接口使之成為服務(wù)端
-S是否生成deployd.wsdd和undeployd.wsdd文件,值為true或false-p生成文件包名,如果不加,默認(rèn)以WSDL中namespace來命名包名
生成客戶端
命令:C:\\Users\\Administrator>javaorg.apache.axis.wsdl.WSDL2Java-peoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice
C:\\Users\\Administrator\\Desktop\\部省接口規(guī)范\\EOMSDispatchUpService.wsdl說明:
-peoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice定義生成文件包名為eoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice生成文件如下:
客戶端調(diào)用服務(wù)
EOMSDispatchUpService_ServiceLocatorlocator=newEOMSDispatchUpService_ServiceLocator();EOMSDispatchUpServiceBindingStubbinding=locator.getEOMSDispatchUpService(“對方服務(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說明:
-o.默認(rèn)輸出在C:\\Users\\Administrator目錄下面-dRequest部署時訪問范圍-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;
啟動tomcat
瀏覽器中輸入:8888/axis,截圖如下:
點(diǎn)擊List,彈出界面如下:
生成service-config.wsdd
注意:tomcat一定要啟,axisjar包一定要配置好命令:javaorg.apache.axis.client.AdminClient-l
:8888/axis/services/EOMSDispatchDownServicedeploy.wsdd說明:
-l:8888/axis/services/EOMSDispatchDownService因我的tomcat端口已經(jīng)被我修改為8888,但默認(rèn)部署在端口8080,所以這里必須加參數(shù)-L來制定部署的端口。圖示:
再次訪問試一下:
服務(wù)發(fā)布成功,此時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í)可以自己寫
…….
中的配置信息,如下:
也可以完成部署,此時都可以不管deploy.wsdd、undeploy.wsdd和service-congig.wsdd
友情提示:本文中關(guān)于《webService基礎(chǔ)總結(jié)》給出的范例僅供您參考拓展思維使用,webService基礎(chǔ)總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。