欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
WebService學(xué)習,開(kāi)發(fā)總結--唐木之無(wú)線(xiàn)觀(guān)察

1, 什么是 Web 服務(wù)?

Web 是使應用程序可以以與平臺和編程語(yǔ)言無(wú)關(guān)的方式進(jìn)行相互通信的一項技術(shù)。Web 服務(wù)是一個(gè)軟件接口,它描述了一組可以在網(wǎng)絡(luò )上通過(guò)標準化的 XML 消息傳遞訪(fǎng)問(wèn)的操作。它使用基于 XML 語(yǔ)言的協(xié)議來(lái)描述要執行的操作或者要與另一個(gè) Web 服務(wù)交換的數據。一組以這種方式交互的 Web 服務(wù)在面向服務(wù)的體系結構(Service-Oriented Architecture,SOA)中定義了特殊的 Web 服務(wù)應用程序。

2, 什么是SOAP?

SOAPSimple Object Access Protocol )簡(jiǎn)單對象訪(fǎng)問(wèn)協(xié)議是在分散或分布式的環(huán)境中交換信息并執行遠程過(guò)程調用的輕量級協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類(lèi)型的對象或代碼,在任何平臺上,以任何一種語(yǔ)言相互通信。

SOAP包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內容是什么,是誰(shuí)發(fā)送的,誰(shuí)應當接受并處理它以及如何處理它們的框架;SOAP編碼規則(encoding rules),用于表示應用程序需要使用的數據類(lèi)型的實(shí)例;SOAP RPC表示(RPC representation),表示遠程過(guò)程調用和應答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。

應用中比較關(guān)注的是envelop,由一個(gè)或多個(gè)Header和一個(gè)Body組成。

SOAP在可互操作的基礎 Web 服務(wù)協(xié)議棧中的位置

3, 什么是Axis?

Axis本質(zhì)上就是一個(gè)SOAP引擎Apache Axis is an implementation of the SOAP),提供創(chuàng )建服務(wù)器端、客戶(hù)端和網(wǎng)關(guān)SOAP操作的基本框架。但Axis并不完全是一個(gè)SOAP引擎,它還包括:

是一個(gè)獨立的SOAP服務(wù)器。

是一個(gè)嵌入Servlet引擎(例如Tomcat)的服務(wù)器。

支持WSDL。

提供轉化WSDLJava類(lèi)的工具。

提供例子程序。

提供TCP/IP數據包監視工具。

4, Axis相比Soap v2的優(yōu)點(diǎn):

Axis是第三代Apache SOAP的實(shí)現,從2000年起,SOAP v2開(kāi)發(fā)小組開(kāi)始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來(lái)自W3C的各種XML標準。通過(guò)不斷地討論和代碼編寫(xiě),Axis目前相比SOAP V2取得了如下成果:

速度提高。 Axis通過(guò)基于事件的SAXXML文檔進(jìn)行處理,從而在速度和效率上比Apache SOAP有所提高。

靈活性提高。

穩定性提高。

提供面向組件的部署。

提供一個(gè)簡(jiǎn)潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨立。從而使基于何種協(xié)議傳輸的選擇更加靈活。

支持WSDL。包括WSDL和客戶(hù)端代碼生成等。

5, 什么是WSDL?

WSDLWeb Service Description LanguageWeb服務(wù)器描述語(yǔ)言是用XML文檔來(lái)描述Web服務(wù)的標準,是Web服務(wù)的接口定義語(yǔ)言,由Ariba、Intel、IBM、MS等共同提出,通過(guò)WSDL,可描述Web服務(wù)的三個(gè)基本屬性:

·服務(wù)做些什么——服務(wù)所提供的操作(方法)

·如何訪(fǎng)問(wèn)服務(wù)——和服務(wù)交互的數據格式以及必要協(xié)議

·服務(wù)位于何處——協(xié)議相關(guān)的地址,如URL

WSDL文檔以端口集合的形式來(lái)描述Web服務(wù),WSDL 服務(wù)描述包含對一組操作和消息的一個(gè)抽象定義,綁定到這些操作和消息的一個(gè)具體協(xié)議,和這個(gè)綁定的一個(gè)網(wǎng)絡(luò )端點(diǎn)規范。

WSDLWeb 服務(wù)概念性協(xié)議棧中的位置:

6, 什么是WSDD?

WSDD就是WEB服務(wù)分布描述(Web Service Deployment Descriptor, 它定義了WEB服務(wù)的接口,如服務(wù)名、提供的方法、方法的參數等信息。

7, 什么是UDDI?

UDDI就是統一描述、發(fā)現和集成(Universal Description, Discovery, and Integration)。UDDI用于集中存放和查找WSDL描述文件,起著(zhù)目錄服務(wù)器的作用。

Web 服務(wù)中的角色、操作和構件

  • 服務(wù)提供者。從企業(yè)的角度看,這是服務(wù)的所有者。從體系結構的角度看,這是托管訪(fǎng)問(wèn)服務(wù)的平臺。
  • 服務(wù)請求者。從企業(yè)的角度看,這是要求滿(mǎn)足特定功能的企業(yè)。從體系結構的角度看,這是尋找并調用服務(wù),或啟動(dòng)與服務(wù)的交互的應用程序。服務(wù)請求者角色可以由瀏覽器來(lái)?yè)?,由人或無(wú)用戶(hù)界面的程序(例如,另外一個(gè) Web 服務(wù))來(lái)控制它。
  • 服務(wù)注冊中心。這是可搜索的服務(wù)描述注冊中心,服務(wù)提供者在此發(fā)布他們的服務(wù)描述。在靜態(tài)綁定開(kāi)發(fā)或動(dòng)態(tài)綁定執行期間,服務(wù)請求者查找服務(wù)并獲得服務(wù)的綁定信息(在服務(wù)描述中)。對于靜態(tài)綁定的服務(wù)請求者,服務(wù)注冊中心是體系結構中的可選角色,因為服務(wù)提供者可以把描述直接發(fā)送給服務(wù)請求者。同樣,服務(wù)請求者可以從服務(wù)注冊中心以外的其它來(lái)源得到服務(wù)描述,例如本地文件、FTP 站點(diǎn)、Web 站點(diǎn)、廣告和服務(wù)發(fā)現(Advertisement and Discovery of Services,ADS)或發(fā)現 Web 服務(wù)(Discovery of Web Services,DISCO)。

8, AXIS的幾種服務(wù)類(lèi)型:

AXIS有四種service styles,分別是:RPC, Document, Wrapped, Message。最常用的就是RPCMessage。

RPCAXIS中是一個(gè)默認選項。當你部署的時(shí)候使用下列兩種方式: 或則 ,它遵循SOAP RPC和編碼規則。每個(gè)RPC都包括一個(gè)表示名稱(chēng)的外部接點(diǎn)和一些表示參數的內部接點(diǎn)。AXIS會(huì )根據規則將一個(gè)XMLWSDL文件)文件轉化成一個(gè)JAVA對象,并對對想賦上在文件中描述的值。也可以根據規則將一個(gè)JAVA對象轉化成XML文件。

Document

適合于老的XML schema。

Wrapped

DOCUMENT一樣,適合于老的XML schema。

在大多書(shū)情況下,你不許要擔心是DOCUMENT服務(wù)還是WRAPPED服務(wù)。

Message

以這種方式部署的話(huà),會(huì )使AXIS失去意義,它使你的代碼真正的用XML形式,而不需要轉化成JAVA對象。以這種方式部署的有以下四種服務(wù)方法:

public Element [] method(Element [] bodies);

public SOAPBodyElement [] method (SOAPBodyElement [] bodies);

public Document method(Document body);

public void method(SOAPEnvelope req, SOAPEnvelope resp);

幾種服務(wù)類(lèi)型的主要區別:

基于RPC(遠程過(guò)程調用)方式,這也是Web服務(wù)最常用的方式。面向消息/文檔的的類(lèi)型跟RPC不同的是它提供了一個(gè)更底層的抽象,要求更多的編程工作??蛻?hù)端可以傳入任何的XML文檔,得到的響應不一定是SOAPEnvelope,可以返回任何它所需要的東西,甚至不返回。雖然這對開(kāi)發(fā)者來(lái)說(shuō)非常的靈活,但是這種通訊類(lèi)型在實(shí)際的應用中并不常見(jiàn)。面向消息/文檔的Web服務(wù)主要適合于下面幾種情況,比如批量處理,基于表單的數據導入,有需要返回非XML數據時(shí),Web服務(wù)器實(shí)現中要求直接訪(fǎng)問(wèn)傳輸層等等

二, 開(kāi)發(fā),部署Web服務(wù):

首先下載并安裝tomcat4.x.及以上版本

然后到Axis主頁(yè)下載,現在最新版本是1.3 final,我們使用的是1.2.1 final,將解壓的axis中的webapps目錄下的axis拷貝到tomcat安裝路徑下的webapp下,將解壓的axislib下的jar文件拷貝到tomcat安裝目錄下commonlib下,并把他們加入到你的系統路徑中。

然后啟動(dòng)tomcat,

打開(kāi)IE,輸入:http://localhost:8080/axis,如果出現axis主頁(yè),說(shuō)明安裝axis成功。

部署web服務(wù) axis下部署web服務(wù)有以下兩種方式:

1. 即時(shí)部署(Instance Deployment)利用JWS文件

只需要將.java文件拷貝到axis目錄下,并將文件后綴改為.jws即可。

訪(fǎng)問(wèn)部署后的wsdl文件只需鍵入: http://localhost:8080/axis/filename.jws?wsdl

以下是WSDL的一個(gè)例子:

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions targetNamespace="http://service.kernel.gamebase.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.kernel.gamebase.com" xmlns:intf="http://service.kernel.gamebase.com" xmlns:tns1="http://vo.service.kernel.gamebase.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<wsdl:types> //描述消息中復雜數據類(lèi)型的使用

<schema targetNamespace="http://vo.service.kernel.gamebase.com" xmlns="http://www.w3.org/2001/XMLSchema">

<import namespace="http://service.kernel.gamebase.com"/>

<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>

<complexType name="UserGameGrade">//定義復雜類(lèi)型

<sequence>

<element name="MClassID" nillable="true" type="xsd:string"/>

<element name="gameID" nillable="true" type="xsd:string"/>

<element name="gradeType" type="xsd:int"/>

......

</sequence>

</complexType>

</schema>

......

</wsdl:types>

<wsdl:message name="getGameGradeRankResponse"> //定義操作的輸出參數

<wsdl:part name="getGameGradeRankReturn" type="tns1:GameGradeRank"/>

</wsdl:message>

<wsdl:message name="getGameGradeRankRequest"> //定義操作的輸入參數

<wsdl:part name="in0" type="xsd:string"/>

<wsdl:part name="in1" type="xsd:int"/>

<wsdl:part name="in2" type="xsd:int"/>

</wsdl:message>

......

<wsdl:portType name="GameGradeService"> // WSDL: portType 元素中定義了 Web 服務(wù)的操作。

<wsdl:operation name="getGameGradeRank" parameterOrder="in0 in1 in2"> //操作定義了輸入和輸出數據流中可以出現的 XML 消息

<wsdl:input message="impl:getGameGradeRankRequest" name="getGameGradeRankRequest"/>

<wsdl:output message="impl:getGameGradeRankResponse" name="getGameGradeRankResponse"/>

</wsdl:operation>

<wsdl:operation name="getUserGameGradeRank" parameterOrder="in0 in1 in2 in3 in4">

<wsdl:input message="impl:getUserGameGradeRankRequest" name="getUserGameGradeRankRequest"/>

<wsdl:output message="impl:getUserGameGradeRankResponse" name="getUserGameGradeRankResponse"/>

</wsdl:operation>

......

</wsdl:portType>

<wsdl:binding name="GameGradeServiceSoapBinding" type="impl:GameGradeService">//描述特定服務(wù)接口(WSDL: portType)的協(xié)議、數據格式、安全性和其它屬性

<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="getGameGradeRank">

<wsdlsoap:operation soapAction=""/>

<wsdl:input name="getGameGradeRankRequest">

<wsdlsoap:body namespace="http://service.kernel.gamebase.com" use="literal"/>

</wsdl:input>

<wsdl:output name="getGameGradeRankResponse">

<wsdlsoap:body namespace="http://service.kernel.gamebase.com" use="literal"/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="GameGradeServiceService">//定義服務(wù):名字,訪(fǎng)問(wèn)點(diǎn),位置

<wsdl:port binding="impl:GameGradeServiceSoapBinding" name="GameGradeService">

<wsdlsoap:address location="http://localhost:8080/gamebase/services/GameGradeService"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>2.定制部署(Custom Deployment)利用部署描述符wsdd

以下是部署描述符的一個(gè)例子: <deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="GameGradeService" type="" provider="java:RPC"

style="rpc" use="encoded"> //服務(wù)名字,服務(wù)類(lèi)型及服務(wù)提供者

<parameter name="scope" value="Request"/>

<parameter name="className" value="/blog/com.gamebase.kernel.service.ServiceImpl"/> //實(shí)現該服務(wù)的具體類(lèi)

<parameter name="allowedMethods" value="*"/>

<namespace>http://service.kernel.gamebase.com</namespace>

<typeMapping xmlns:ns1="http://vo.service.kernel.gamebase.com" //類(lèi)型映射

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

qname="ns1:GameGradeRank"http://Qualified Name(特定名字)

languageSpecificType="java:com.gamebase.kernel.service.vo.GameGradeRank"

serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"http://指定序列化工廠(chǎng)

deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" //反序列化工廠(chǎng)name="GameGradeRank"/>

………
</service>
</deployment>

訪(fǎng)問(wèn)部署后的wsdl文件只需鍵入

http://localhost:8080/axis/services/ GameGradeService

三, IDE下開(kāi)發(fā)Web服務(wù):

1,Jubilder下開(kāi)發(fā)WebService

使用Jbuilder集成開(kāi)發(fā)環(huán)境,能夠根據服務(wù)接口類(lèi)生成web服務(wù)描述文件,web服務(wù)部署描述文件及客戶(hù)端代碼,這樣能夠節省我們大部分時(shí)間(開(kāi)發(fā),配置),且減少出錯機率。

Jbuilder在以前的版本,如jbuilder8(可能更低版本)就支持Axis,我用的是Jbuilder2006,不過(guò)大體步驟都是相同。

在開(kāi)始前,我們有個(gè)服務(wù)接口GameGradeService類(lèi),服務(wù)接口實(shí)現類(lèi)ServiceImpl類(lèi)及相關(guān)附屬類(lèi)。我們要實(shí)現該服務(wù)接口。

2.1,打開(kāi)Jbuilder,新建一個(gè)工程,如testWebService

2.2,新建一個(gè)名為webServiceWebService Server file>new:WebServices:Axis WebServices Server Configuration

2.3, 在出現的Web Services Designers可視化界面,點(diǎn)擊“create Service”,選擇“java Service

2.4,配置新創(chuàng )建的java Service,點(diǎn)擊JavaService1,配置Service NameGameGradeService,服務(wù)接口為我們有的那個(gè)服務(wù)接口GameGradeService,實(shí)現類(lèi)為我們實(shí)現改接口的類(lèi)ServiceImpl。

2.5,然后編譯該工程,能夠生成web服務(wù)部署文件,web服務(wù)描述文件,如果你選擇了生成客戶(hù)端代碼的話(huà),它也能生成相應的客戶(hù)端代碼。

2.6,啟動(dòng)該服務(wù),訪(fǎng)問(wèn)http://localhost:8080/webService/services/GameGradeService?wsdl,如果出現該服務(wù)的描述文檔,說(shuō)明發(fā)布成功。

2.7,執行自動(dòng)生成的客戶(hù)端代碼進(jìn)行測試,發(fā)現測試成功。

2.8,你可以用webServicewebServices Client來(lái)根據wsdl只生成客戶(hù)端代碼。

a,新建一個(gè)名為webServiceClientWebService Clientfile>new:WebServices:Axis WebServices Client Configuration

b,在出現的Web Services Designers可視化界面,點(diǎn)擊“create Service”,選擇“import from url

c,配置新創(chuàng )建的java Service,點(diǎn)擊JavaService1,配置Service NameGameGradeService,Input WSDL file 為給定的wsdl。

d,然后編譯該工程

2,eclipse下開(kāi)發(fā)WebService

Eclipse3.1及相關(guān)插件已經(jīng)能夠很好的支持webService開(kāi)發(fā)。

右鍵點(diǎn)擊wsdl文件,選擇webServices,有以下功能:發(fā)布wsdl文件,生成客戶(hù)端代碼等。

右鍵點(diǎn)擊服務(wù)接口文件,選擇webServices,有以下功能:生成web Service等。

同時(shí)eclipse提供了友好的界面操作,如測試的時(shí)候,提供界面讓你輸入參數,而不必該改程序。

四, 開(kāi)發(fā)過(guò)程中的問(wèn)題:

在使用AXIS開(kāi)發(fā)WEB服務(wù)的時(shí)候,會(huì )遇到很多問(wèn)題。比如:XML解析器出現的異常、客戶(hù)端程序找不到可用的Web服務(wù)、序列化/反序列化等。

XML解析器出現的異常主要是由于類(lèi)型映射的問(wèn)題導致的,用到那個(gè)Bean就把那個(gè)bean映射進(jìn)去就可以避免該問(wèn)題。

客戶(hù)端程序找不到可用的Web服務(wù)主要是由于客戶(hù)端對服務(wù)提供者的url及服務(wù)名字輸入有錯,這一般是由于手寫(xiě)客戶(hù)端代碼造成的。

序列化/反序列化問(wèn)題,沒(méi)有對傳輸中的某個(gè)Bean類(lèi)型映射相應的序列化/反序列化工廠(chǎng),或者是復雜類(lèi)型中,沒(méi)有實(shí)現自定義的序列化/反序列化工廠(chǎng)。

以上是開(kāi)發(fā)過(guò)程中主要遇到的幾類(lèi)問(wèn)題,在以后的開(kāi)發(fā)過(guò)程中,一定還會(huì )需要遇到更多的問(wèn)題。

五, 其他相關(guān)知識:

1,java類(lèi)與wsdl相互生成工具:

Axis提供了”WSDL2Java”工具,可以利用wsdl描述來(lái)產(chǎn)生服務(wù)的Java代理和框架(proxy and skeletons)。

Axis提供了”Java2WSDL”工具,可以由java類(lèi)生成wsdl文件。

2,序列化與反序列化:

序列化/反序列化器在英文中的對應翻譯是Serializer/Deserializer,一個(gè)序列化器的功能是遵循一定的映射規則和編碼風(fēng)格,將一種類(lèi)型的JAVA對象通過(guò)某種特定的機制,轉換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對出現。Axis中的序列化/反序列化器采用設計范式中的工廠(chǎng)模式,每一個(gè)Serializer唯一對應一個(gè)SerializerFactory;每一個(gè)Deserializer唯一對應一個(gè)DeserializerFactory。

Axis已經(jīng)為開(kāi)發(fā)者提供了豐富的序列化/反序列化器,對于java的基本數據類(lèi)型,絕大部分常用的容器類(lèi)(比如數組類(lèi)型,Vector類(lèi)型等)都提供了實(shí)現,特別是提供了對W3CDOM對象(比如Document, Element)和符合Bean規范的JAVA對象提供了功能完善的序列化/反序列化器,但對于一些特殊類(lèi)型的對象,需要通過(guò)Web服務(wù)進(jìn)行傳遞,我們不得不開(kāi)發(fā)自己的序列化/反序列化器。

3,AxisSpring的結合:

Axisspring結合,需要提供一些額外工作,即將實(shí)現web服務(wù)接口的Beanweb服務(wù)部署中服務(wù)類(lèi)如何關(guān)聯(lián)。 如下:

<service name="GameService" type="" provider="Handler" style="rpc">

<parameter name="handlerClass" value="/blog/com.workingmouse.webservice.axis.SpringBeanRPCProvider"/>

<parameter name="springBean" value="gameInfoService"/>

<parameter name="springBeanClass" value="/blog/com.gamebase.kernel.service.GameService"/>

<parameter name="scope" value="Request"/>

<parameter name="allowedMethods" value="*"/>

.......

</service>

參數handlerClass的值是處理Beanwsdd文件中服務(wù)類(lèi)的關(guān)聯(lián)。

參數springBean的值表示實(shí)現接口GameService注冊的Bean的名字。

參數springBeanClass的值表示接口GameService的類(lèi)。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java調用.NET webservice方法的幾種方式
幾種流行Webservice框架性能對比
JAVA6開(kāi)發(fā)WebService (一)
Adobe Flex 4 * Using WebService components
WebService
TCP/IP、HTTP、WEBSERVICE、SOAP、ICE都使用后才有感慨
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久