WebService教程詳解(一)

Web Services 能夠將應用程序轉換爲網絡應用程序。java

經過使用 Web Services,您的應用程序能夠向全世界發佈信息,或提供某項功能。web

Web Services 能夠被其餘應用程序使用。編程

經過 Web Services,您的會計部門的 Win 2k 服務器能夠與 IT 供應商的 UNIX 服務器相鏈接。服務器

基本的 Web Services 平臺是 XML+HTTP。網絡

Web services 使用 XML 來編解碼數據,並使用 SOAP 來傳輸數據。app

什麼是webService 框架

WebService,顧名思義就是基於Web的服務。它使用Web(HTTP)方式,接收和響應外部系統的某種請求。從而實現遠程調用.編程語言

1:從WebService的工做模式上理解的話,它跟普通的Web程序(好比ASP、JSP等)並無本質的區別,都是基於HTTP傳輸協議的程序。分佈式

2:WebService所使用的數據均是基於XML格式的。目前標準的WebService在數據格式上主要採用SOAP協議。SOAP協議實際上就是一種基於XML編碼規範的文本協議。函數

webService的技術支持

Web Service平臺須要一套協議來實現分佈式應用程序的建立。任何平臺都有它的數據表示方法和類型系統。要實現互操做性,Web Service平臺必須提供一套標準的類型系統,用於溝通不一樣平臺、編程語言和組件模型中的不一樣類型系統。目前這些協議有:

XML和XSD

  可擴展的標記語言XML 是Web Service平臺中表示數據的基本格式。除了易於創建和易於分析外,XML主要的優勢在於它既與平臺無關,又與廠商無關。XML是由萬維網協會 (W3C)建立,W3C制定的XML SchemaXSD 定義了一套標準的數據類型,並給出了一種語言來擴展這套數據類型。

  Web Service平臺是用XSD來做爲數據類型系統的。當你用某種語言如VB. NET或C# 來構造一個Web Service時,爲了符合Web Service標準,全部你使用的數據類型都必須被轉換爲XSD類型。如想讓它使用在不一樣平臺和不一樣軟件的不一樣組織間傳遞,還須要用某種東西將它包裝起 來。這種東西就是一種協議,如 SOAP。

SOAP

  SOAP即簡單對象訪問協議(Simple Object Access Protocal),它是用於交換XML編碼信息的輕量級協議。它有三個主要方面:XML-envelope爲描述信息內容和如何處理內容定義了框架,將 程序對象編碼成爲XML對象的規則,執行遠程過程調用(RPC)的約定。SOAP能夠運行在任何其餘傳輸協議上。例如,你可使用 SMTP,即因特網電子郵件協議來傳遞SOAP消息,這但是頗有誘惑力的。在傳輸層之間的頭是不一樣的,但XML有效負載保持相同。

  Web Service 但願實現不一樣的系統之間可以用「軟件-軟件對話」的方式相互調用,打破了軟件應用、網站和各類設備之間的格格不入的狀態,實現「基於Web無縫集成」的目標。

WSDL

  Web Service描述語言WSDL 就是用機器能閱讀的方式提供的一個正式描述文檔而基於XML的語言,用於描述Web Service及其函數、參數和返回值。由於是基於XML的,因此WSDL既是機器可閱讀的,又是人可閱讀的。

UDDI

  UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。 調用RPC與消息傳遞

  Web Service自己實際上是在實現應用程序間的通訊。咱們如今有兩種應用程序通訊的方法:RPC遠程過程調用 和消息傳遞。使用RPC的時候,客戶端的概念 是調用服務器上的遠程過程,一般方式爲實例化一個遠程對象並調用其方法和屬性。RPC系統試圖達到一種位置上的透明性:服務器暴露出遠程對象的接口,而客 戶端就好像在本地使用的這些對象的接口同樣,這樣就隱藏了底層的信息,客戶端也就根本不須要知道對象是在哪臺機器上。

如何發佈一個WebService?

一、用Jdk1.6.0_21之後的版本發佈一個WebService服務.並經過地址欄查看它的wsdl文檔.

二、經過wsimport生成客戶端代碼,調用並查看運行的結果.(學會如何調用是咱們的重點).

須要注意的是,jdk1.6._07之後jdk版本發佈WebService時必需要完整的對代碼進行註解,若是使用的是jdk1.6.0_21之後版本,由於它已經內含了ws2.1因此,能夠只對類添加@WebService的註解.

如下是兩段不一樣的代碼:

在jdk1.6.0_13的版本上發佈的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的消息風格

public class HelloWorld {

//如下經過@WebMethod註解,對外公開方法

@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上發佈的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//注意只有此一個註解,此註解也是必須的,默認的SOAP消息風格爲:DOCUMENT

public class HelloWorld {

public String sayHello(){

return "HelloWorld";

}

public static void main(String[] args) {

Endpoint.publish("http://localhost:9999/helloworld",new HelloWorld());

}

}

第一個WebService服務

?

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;

/**

* 第一個WebService服務應用

*/

//經過註解,標明此類發佈爲一個WebService

@WebService

public class HelloWorld {

public String sayHello(){

return "Hello World";

}

//在main方法中,使用javax.xml.ws.Endpoint端點發佈一個應用

public static void main(String[] args) {

Endpoint.publish("http://127.0.0.1:9999/helloworld",

new HelloWorld());

}

}

代碼說明:HelloWorld類的全部非靜態公開方法將對外部暴露.

Wsimport工具說明:

 wsimport是jdk自帶的,能夠根據wsdl文檔生成客戶端調用代碼的工具.固然,不管服務器端的WebService是用什麼語言寫的,都將在客戶端生成Java代碼.服務器端用什麼寫的並不重要.

 wsimport.exe位於JAVA_HOME\bin目錄下.

經常使用參數爲:

• -d<目錄> - 將生成.class文件。默認參數。

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

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

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

使用:

1:能夠經過java –version檢查你當前的版本號.若是版本過低能夠安裝高版本的jdk.

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

由於之前的環境變量已經設置成之前老版本的jdk目錄,即JAVA_HOME和PATH兩個環境變量.

能夠再從新設置一下環境變量爲:JAVA_HOME=D:\jdk1.6.0_24,path=%JAVA_HOME%\bin,

從新設置了環境變量後,要從新打開一個doc(命令行)窗口.才生效.

若是不想修改原來已經配置好的環境變量,能夠命令行窗口輸入如下命令,使jdk1.6.0_24生效:

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

再經過java –version查看jdk的版本號是否已經發生變化.

2:轉到一個相對乾淨的目錄下,我在d盤上新創建一個目錄名爲:ws,並轉到此目錄下.

3:開啓你的webService.

4:輸入如下命令:

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

參數說明:-s是指編譯出源代碼文件,後面的.(點)指將代碼放到當前目錄下.

最後面的http….是指獲取wsdl說明書的地址.

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

6:在新的項目中,新一個類,(可位於任意包下),對上面生成的代碼進行調用,見下一頁ppt.

7:wsimport其餘參數說明,咱們常用的參數爲-d,-s,-p

-d<目錄>將會生成.class文件.

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

-s<目錄>將會生成.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

對於-p參數,注意包名的修改,它將所生成類,所有置於經過-p指定的包下.(演示)

須要說明的是,當僅使用-p參數時,它也將同時使用-d即編譯成.class文件. –d參數寫或不寫,它都在那裏,不離不棄.

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;

/**

* 經過調用生成的類,來調用遠程代碼

*/

public class RunMain {

public static void main(String[] args) {

//從HelloWorldSerice的getHelloWorldPort方法中返回調用接口

HelloWorld helloWorld =

new HelloWorldService().getHelloWorldPort();

String str = helloWorld.sayHello(); //執行調用

System.err.println(str);//返回HelloWorld字符串

}

}

WebService與普通Web程序的區別

一、 WebService只採用HTTP POST方式傳輸數據,不使用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

二、WebService從數據傳輸格式上做了限定。

WebService所使用的數據均是基於XML格式的。目前標準的WebService在數據格式上主要採用SOAP協議。SOAP協議實際上就是一種基於XML編碼規範的文本協議。

WebService和web服務器的區別:

咱們能夠把WebService看做是Web服務器上應用;反過來講,Web服務器是WebService運行時所必需的容器。這就是它們的區別和聯繫。

WebService的特色:

一、 WebService經過HTTP POST方式接受客戶的請求

二、 WebService與客戶端之間通常使用SOAP協議傳輸XML數據.

三、它自己就是爲了跨平臺或跨語言而設計的。

相關文章
相關標籤/搜索