一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - WebService教程詳解(一)

WebService教程詳解(一)

2020-04-10 15:21mrr JAVA教程

WebService,顧名思義就是基于Web的服務(wù)。它使用Web(HTTP)方式,接收和響應(yīng)外部系統(tǒng)的某種請(qǐng)求,接下來(lái)通過(guò)本文給大家介紹WebService教程詳解(一),對(duì)webservice教程感興趣的朋友一起學(xué)習(xí)吧

Web Services 可以將應(yīng)用程序轉(zhuǎn)換為網(wǎng)絡(luò)應(yīng)用程序。

通過(guò)使用 Web Services,您的應(yīng)用程序可以向全世界發(fā)布信息,或提供某項(xiàng)功能。

Web Services 可以被其他應(yīng)用程序使用。

通過(guò) Web Services,您的會(huì)計(jì)部門的 Win 2k 服務(wù)器可以與 IT 供應(yīng)商的 UNIX 服務(wù)器相連接。

基本的 Web Services 平臺(tái)是 XML+HTTP。

Web services 使用 XML 來(lái)編解碼數(shù)據(jù),并使用 SOAP 來(lái)傳輸數(shù)據(jù)。

什么是webService

WebService,顧名思義就是基于Web的服務(wù)。它使用Web(HTTP)方式,接收和響應(yīng)外部系統(tǒng)的某種請(qǐng)求。從而實(shí)現(xiàn)遠(yuǎn)程調(diào)用.

1:從WebService的工作模式上理解的話,它跟普通的Web程序(比如ASP、JSP等)并沒(méi)有本質(zhì)的區(qū)別,都是基于HTTP傳輸協(xié)議的程序。

2:WebService所使用的數(shù)據(jù)均是基于XML格式的。目前標(biāo)準(zhǔn)的WebService在數(shù)據(jù)格式上主要采用SOAP協(xié)議。SOAP協(xié)議實(shí)際上就是一種基于XML編碼規(guī)范的文本協(xié)議。

webService的技術(shù)支持

Web Service平臺(tái)需要一套協(xié)議來(lái)實(shí)現(xiàn)分布式應(yīng)用程序的創(chuàng)建。任何平臺(tái)都有它的數(shù)據(jù)表示方法和類型系統(tǒng)。要實(shí)現(xiàn)互操作性,Web Service平臺(tái)必須提供一套標(biāo)準(zhǔn)的類型系統(tǒng),用于溝通不同平臺(tái)、編程語(yǔ)言和組件模型中的不同類型系統(tǒng)。目前這些協(xié)議有:

XML和XSD

  可擴(kuò)展的標(biāo)記語(yǔ)言XML 是Web Service平臺(tái)中表示數(shù)據(jù)的基本格式。除了易于建立和易于分析外,XML主要的優(yōu)點(diǎn)在于它既與平臺(tái)無(wú)關(guān),又與廠商無(wú)關(guān)。XML是由萬(wàn)維網(wǎng)協(xié)會(huì)(W3C)創(chuàng)建,W3C制定的XML SchemaXSD 定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,并給出了一種語(yǔ)言來(lái)擴(kuò)展這套數(shù)據(jù)類型。

  Web Service平臺(tái)是用XSD來(lái)作為數(shù)據(jù)類型系統(tǒng)的。當(dāng)你用某種語(yǔ)言如VB. NET或C# 來(lái)構(gòu)造一個(gè)Web Service時(shí),為了符合Web Service標(biāo)準(zhǔn),所有你使用的數(shù)據(jù)類型都必須被轉(zhuǎn)換為XSD類型。如想讓它使用在不同平臺(tái)和不同軟件的不同組織間傳遞,還需要用某種東西將它包裝起來(lái)。這種東西就是一種協(xié)議,如 SOAP。

SOAP

  SOAP即簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(Simple Object Access Protocal),它是用于交換XML編碼信息的輕量級(jí)協(xié)議。它有三個(gè)主要方面:XML-envelope為描述信息內(nèi)容和如何處理內(nèi)容定義了框架,將程序?qū)ο缶幋a成為XML對(duì)象的規(guī)則,執(zhí)行遠(yuǎn)程過(guò)程調(diào)用(RPC)的約定。SOAP可以運(yùn)行在任何其他傳輸協(xié)議上。例如,你可以使用 SMTP,即因特網(wǎng)電子郵件協(xié)議來(lái)傳遞SOAP消息,這可是很有誘惑力的。在傳輸層之間的頭是不同的,但XML有效負(fù)載保持相同。

  Web Service 希望實(shí)現(xiàn)不同的系統(tǒng)之間能夠用“軟件-軟件對(duì)話”的方式相互調(diào)用,打破了軟件應(yīng)用、網(wǎng)站和各種設(shè)備之間的格格不入的狀態(tài),實(shí)現(xiàn)“基于Web無(wú)縫集成”的目標(biāo)。

WSDL

  Web Service描述語(yǔ)言WSDL 就是用機(jī)器能閱讀的方式提供的一個(gè)正式描述文檔而基于XML的語(yǔ)言,用于描述Web Service及其函數(shù)、參數(shù)和返回值。因?yàn)槭腔赬ML的,所以WSDL既是機(jī)器可閱讀的,又是人可閱讀的。

UDDI

  UDDI 的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時(shí)也包含一組使企業(yè)能將自身提供的Web Service注冊(cè),以使別的企業(yè)能夠發(fā)現(xiàn)的訪問(wèn)協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。 調(diào)用RPC與消息傳遞

  Web Service本身其實(shí)是在實(shí)現(xiàn)應(yīng)用程序間的通信。我們現(xiàn)在有兩種應(yīng)用程序通信的方法:RPC遠(yuǎn)程過(guò)程調(diào)用 和消息傳遞。使用RPC的時(shí)候,客戶端的概念是調(diào)用服務(wù)器上的遠(yuǎn)程過(guò)程,通常方式為實(shí)例化一個(gè)遠(yuǎn)程對(duì)象并調(diào)用其方法和屬性。RPC系統(tǒng)試圖達(dá)到一種位置上的透明性:服務(wù)器暴露出遠(yuǎn)程對(duì)象的接口,而客戶端就好像在本地使用的這些對(duì)象的接口一樣,這樣就隱藏了底層的信息,客戶端也就根本不需要知道對(duì)象是在哪臺(tái)機(jī)器上。

如何發(fā)布一個(gè)WebService?

1、用Jdk1.6.0_21以后的版本發(fā)布一個(gè)WebService服務(wù).并通過(guò)地址欄查看它的wsdl文檔.

2、通過(guò)wsimport生成客戶端代碼,調(diào)用并查看運(yùn)行的結(jié)果.(學(xué)會(huì)如何調(diào)用是我們的重點(diǎn)).

需要注意的是,jdk1.6._07以后jdk版本發(fā)布WebService時(shí)必須要完整的對(duì)代碼進(jìn)行注解,如果使用的是jdk1.6.0_21以后版本,因?yàn)樗呀?jīng)內(nèi)含了ws2.1所以,可以只對(duì)類添加@WebService的注解.

以下是兩段不同的代碼:

在jdk1.6.0_13的版本上發(fā)布的ws:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.itcast;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.ws.Endpoint;
@WebService(targetNamespace="http://loalhost:9999/helloworld")
@SOAPBinding(style=Style.RPC)//只支持RPC的消息風(fēng)格
public class HelloWorld {
//以下通過(guò)@WebMethod注解,對(duì)外公開(kāi)方法
@WebMethod
public String sayHello(){
return "HelloWorld";
}
public static void main(String[] args) {
Endpoint.publish("http://localhost:9999/helloworld",new HelloWorld());
}
}

2:以下是在jdk1.6.0_24上發(fā)布的WebService代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.itcast;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService//注意只有此一個(gè)注解,此注解也是必須的,默認(rèn)的SOAP消息風(fēng)格為:DOCUMENT
public class HelloWorld {
public String sayHello(){
return "HelloWorld";
}
public static void main(String[] args) {
Endpoint.publish("http://localhost:9999/helloworld",new HelloWorld());
}
}

第一個(gè)WebService服務(wù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.itcast;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* 第一個(gè)WebService服務(wù)應(yīng)用
*/
//通過(guò)注解,標(biāo)明此類發(fā)布為一個(gè)WebService
@WebService
public class HelloWorld {
public String sayHello(){
return "Hello World";
}
//在main方法中,使用javax.xml.ws.Endpoint端點(diǎn)發(fā)布一個(gè)應(yīng)用
public static void main(String[] args) {
Endpoint.publish("http://127.0.0.1:9999/helloworld",
new HelloWorld());
}
}

代碼說(shuō)明:HelloWorld類的所有非靜態(tài)公開(kāi)方法將對(duì)外部暴露.

Wsimport工具說(shuō)明:

? wsimport是jdk自帶的,可以根據(jù)wsdl文檔生成客戶端調(diào)用代碼的工具.當(dāng)然,無(wú)論服務(wù)器端的WebService是用什么語(yǔ)言寫的,都將在客戶端生成Java代碼.服務(wù)器端用什么寫的并不重要.

? wsimport.exe位于JAVA_HOME\bin目錄下.

? 常用參數(shù)為:

• -d<目錄> - 將生成.class文件。默認(rèn)參數(shù)。

• -s<目錄> - 將生成.java文件。

• -p<生成的新包名> -將生成的類,放于指定的包下。

(wsdlurl) - http://server:port/service?wsdl,必須的參數(shù)

使用:

1:可以通過(guò)java –version檢查你當(dāng)前的版本號(hào).如果版本太低可以安裝高版本的jdk.

或直接將別人已安裝好的jdk目錄拷貝到你的機(jī)器如D:\jdk1.6.0_24目錄下.

因?yàn)橐郧暗沫h(huán)境變量已經(jīng)設(shè)置成以前老版本的jdk目錄,即JAVA_HOME和PATH兩個(gè)環(huán)境變量.

可以再重新設(shè)置一下環(huán)境變量為:JAVA_HOME=D:\jdk1.6.0_24,path=%JAVA_HOME%\bin,

重新設(shè)置了環(huán)境變量后,要重新打開(kāi)一個(gè)doc(命令行)窗口.才生效.

如果不想修改原來(lái)已經(jīng)配置好的環(huán)境變量,可以命令行窗口輸入以下命令,使jdk1.6.0_24生效:

set path = D:\jdk1.6.0_24\bin;%PATH%(回車即可)

再通過(guò)java –version查看jdk的版本號(hào)是否已經(jīng)發(fā)生變化.

2:轉(zhuǎn)到一個(gè)相對(duì)干凈的目錄下,我在d盤上新建立一個(gè)目錄名為:ws,并轉(zhuǎn)到此目錄下.

3:開(kāi)啟你的webService.

4:輸入以下命令:

wsimport –s . http://127.0.0.1:9999/helloworld?wsdl

參數(shù)說(shuō)明:-s是指編譯出源代碼文件,后面的.(點(diǎn))指將代碼放到當(dāng)前目錄下.

最后面的http….是指獲取wsdl說(shuō)明書的地址.

5:此時(shí),將生成.java文件和.class文件.(都包含原始包名).將代碼Copy到你的項(xiàng)目中.(只拷貝java文件)

6:在新的項(xiàng)目中,新一個(gè)類,(可位于任意包下),對(duì)上面生成的代碼進(jìn)行調(diào)用,見(jiàn)下一頁(yè)ppt.

7:wsimport其他參數(shù)說(shuō)明,我們經(jīng)常使用的參數(shù)為-d,-s,-p

-d<目錄>將會(huì)生成.class文件.

示例:wsimport –d . http://127.0.0.1:9999/helloworld?wsdl

-s<目錄>將會(huì)生成.java文件.

示例:wsimport –s . http://127.0.0.1:9999/helloworld?wsdl

-p<包名>將生成的文件(.java或是.class修改成指定的包名)

示例:wsimport -s . -p com.beijing.itcast http://127.0.0.1:9999/helloworld?wsdl

對(duì)于-p參數(shù),注意包名的修改,它將所生成類,全部置于通過(guò)-p指定的包下.(演示)

需要說(shuō)明的是,當(dāng)僅使用-p參數(shù)時(shí),它也將同時(shí)使用-d即編譯成.class文件. –d參數(shù)寫或不寫,它都在那里,不離不棄.

RunMain.java的源代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.leaf;
import com.itcast.HelloWorld;
import com.itcast.HelloWorldService;
/**
* 通過(guò)調(diào)用生成的類,來(lái)調(diào)用遠(yuǎn)程代碼
*/
public class RunMain {
public static void main(String[] args) {
//從HelloWorldSerice的getHelloWorldPort方法中返回調(diào)用接口
HelloWorld helloWorld =
new HelloWorldService().getHelloWorldPort();
String str = helloWorld.sayHello(); //執(zhí)行調(diào)用
System.err.println(str);//返回HelloWorld字符串
}
}

WebService與普通Web程序的區(qū)別

1、 WebService只采用HTTP POST方式傳輸數(shù)據(jù),不使用GET方式;

1) Tttp post的contentType為

(1)application/x-www-form-urlencoded

2) WebService的contentType為

(2) Text/xml soap1.1
(3) application/soap+xml –soap1.2

2、WebService從數(shù)據(jù)傳輸格式上作了限定。

WebService所使用的數(shù)據(jù)均是基于XML格式的。目前標(biāo)準(zhǔn)的WebService在數(shù)據(jù)格式上主要采用SOAP協(xié)議。SOAP協(xié)議實(shí)際上就是一種基于XML編碼規(guī)范的文本協(xié)議。

WebService和web服務(wù)器的區(qū)別:

我們可以把WebService看作是Web服務(wù)器上應(yīng)用;反過(guò)來(lái)說(shuō),Web服務(wù)器是WebService運(yùn)行時(shí)所必需的容器。這就是它們的區(qū)別和聯(lián)系。

WebService的特點(diǎn):

1、 WebService通過(guò)HTTP POST方式接受客戶的請(qǐng)求

2、 WebService與客戶端之間一般使用SOAP協(xié)議傳輸XML數(shù)據(jù).

3、它本身就是為了跨平臺(tái)或跨語(yǔ)言而設(shè)計(jì)的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 大陆性出航| 99r视频在线观看 | 精品无码人妻一区二区免费AV | 国产精品29页| 国产不卡视频 | 色热综合 | 好大好硬好深好爽想要之黄蓉 | 操黄| 亚洲欧美久久婷婷爱综合一区天堂 | 欧美精品99久久久久久人 | 性做久久久久久 | 国产精品一区二区不卡的视频 | 亚洲国产综合网 | 范冰冰a级一级特级毛片 | 毛片视频网站 | 四虎影视在线看免费 720p | 操男孩| 亚洲天堂在线视频播放 | 2019aw网站 | 青草草在线 | 免费二区 | 黑人粗又长 | 四虎影视国产精品婷婷 | 热伊人99re久久精品最新地 | 欧美三级免费观看 | 1717she精品视频在线观看 | 免费看打屁股视频的软件 | 爱爱亚洲 | 欧美一卡2卡3卡四卡海外精品 | 99资源站 | 亚洲激情成人 | 日韩去日本高清在线 | 国产精品一区二区在线观看完整版 | 色版网站| 暖暖 免费 高清 中文 日本 | 奇米777四色精品综合影院 | 色噜噜国产精品视频一区二区 | 偷偷狠狠的日日高清完整视频 | 无限资源在线观看完整版免费下载 | 国产乱插 | 免费看片黄 |