WebService 基礎學習

1、Java中WebService規範

     JAVA 中共有三種WebService 規範,分別是JAX-WS、JAX-RS、JAXM&SAAJ(廢棄)。java

 

1.JAX-WS規範

 JAX-WS 的全稱爲Java API for XML-Based Webservices ,早期的基於SOAP 的JAVA 的Web 服務規範JAX-RPC(Java API For XML-Remote Procedure Call)目前已經被JAX-WS 規範取代。從java5開始支持JAX-WS2.0版本,Jdk1.6.0_13之後的版本支持2.1版本,jdk1.7支持2.2版本。web

    採用標準SOAP(Simple Object Access Protocol) 協議傳輸,soap屬於w3c標準。Soap協議是基於http的應用層協議,soap協議傳輸是xml數據。編程

     採用wsdl做爲描述語言即webservice使用說明書,wsdl屬w3c標準。服務器

     xml是webservice的跨平臺的基礎,XML主要的優勢在於它既與平臺無關,又與廠商無關。架構

     XSD,W3C爲webservice制定了一套傳輸數據類型,使用xml進行描述,即XSD(XML Schema Datatypes),任何編程語言寫的webservice接口在發送數據時都要轉換成webservice標準的XSD發送。框架

 

2.JAX-RS規範

JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規範,因爲推出的較晚,該規範(JSR 311,目前JAX-RS 的版本爲1.0)並未隨JDK1.6 一塊兒發行。編程語言

支持JAX-RS服務規範的框架有:分佈式

      CXF——XFire和Celtix的合併(一個由IONA贊助的開源ESB,最初寄存在ObjectWeb上)。編碼

     Jersey——Sun公司的JAX-RS參考實現。spa

     RESTEasy——JBoss的JAX-RS項目。

     Restlet——也許是最先的REST框架了,它JAX-RS以前就有了。

注:REST 是一種軟件架構模式,只是一種風格,rest服務採用HTTP 作傳輸協議。

 

2、WebService(jax-ws)三要素

SOAP: 基於HTTP協議,採用XML格式,用來傳遞信息的格式。

WSDL: 用來描述如何訪問具體的服務。

UDDI: 用戶本身能夠按UDDI標準搭建UDDI服務器,用來管理,分發,查詢WebService 。其餘用戶能夠本身註冊發佈WebService調用。

 

1.SOAP(通信協議)

Simple Object Accrss Protocol,簡單對象訪問協議是在分散或分佈式的環境中交換信息的簡單的協議,是一個基於XML的協議,它包括四個部分:

  1. SOAP封裝(envelop),封裝定義了一個描述消息中的內容是什麼,是誰發送的,誰應當接受並處理它,以及如何處理它們的框架;
  2. SOAP編碼規則,用於表示應用程序須要使用的數據類型的實例。
  3. SOAP RPC 表示遠程過程調用和應答的協定。
  4. SOAP綁定(binding),使用底層協議交換信息。

(1)請求的協議體

POST /weather HTTP/1.1

Accept: text/xml, multipart/related

Content-Type: text/xml; charset=utf-8

SOAPAction: "http://weather.itheima.com/WeatherInterface/getWeatherByCityNameRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: 127.0.0.1:54321

Connection: keep-alive

Content-Length: 235

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

       <S:Body>

             <ns2:getWeatherByCityName xmlns:ns2="http://weather.itheima.com">

                  <cityName>北京</cityName>

             </ns2:getWeatherByCityName>

       </S:Body>

</S:Envelope>

(2)響應的協議體

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: text/xml; charset=utf-8

Date: Fri, 09 Oct 2015 07:23:29 GMT

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

         <S:Body>

                 <ns2:getWeatherByCityNameResponse xmlns:ns2="http://weather.itheima.com">

                           <WeatherInfo>今天風很大</WeatherInfo>

                 </ns2:getWeatherByCityNameResponse>

         </S:Body>

</S:Envelope>

 

2.WSDL

WSDL(Web Service Description Language),是一個用來描述Web服務(Web Service)和說明如何與Web服務通訊的XML語言。由於是基於XML的,因此WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。

     image

(1)wsdl的閱讀方法

是從下往上讀。

每一個wsdl有且只有一個Service節點。

  1. 先找Service節點
  2. Service節點中找port節點。每一個port對應一個PortType。
  3. Port節點對應一binding節點。每一個binding節點對應一個PortType
  4. PortType中有operation 節點就是服務的方法。
  5. operation 中有Input(參數)和output(返回值)
  6. Input(參數)和output(返回值)對應message節點
  7. Message對應element節點。Element節點對應complexType節點描述了參數及返回值的數據類型。

(2)使用註解規範wsdl

@WebService: 定義服務,在public class上邊。

   targetNamespace:指定命名空間。

   name:portType的名稱。

   portName:port的名稱。

  serviceName:服務名稱。

 

@WebResult:定義返回值。

   name:返回結果值的名稱。

 

@WebParam:定義參數。

   name:指定參數的名稱。

 

@WebMethod

exclude:排除指定的方法。

默認狀況下,SEI實現類中因此的public方法會發布成服務方法。

若是不想把public方法發佈成服務方法,須要使用@WebMethod註解。把此方法排除。在實現類中至少有一個方法發佈爲服務方法。

image

image

image

image

做用: 經過註解,能夠更加形像的描述Web服務。對自動生成的wsdl文檔進行修改,爲使用者提供一個更加清晰的wsdl文檔。

當修改了WebService註解以後,會影響客戶端生成的代碼。調用的方法名和參數名也發生了變化。

 

3.UDDI

 UDDI 是一種目錄服務,經過它,企業可註冊並搜索 Web services。企業將本身提供的Web Service註冊在UDDI,也可使用別的企業在UDDI註冊的web service服務,從而達到資源共享。

     UDDI旨在將全球的webservcie資源進行共享,促進全球經濟合做。

     可是使用webservice並非必須使用UDDI,由於用戶經過WSDL知道了web service的地址,能夠直接經過WSDL調用webservice。

相關文章
相關標籤/搜索