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