1. 程式人生 > >WebService學習教程(一)

WebService學習教程(一)

Webservice Webservice就是一種遠端呼叫技術,他的作用就是從遠端系統中獲取業務資料 1課程安排
  • 什麼是webservice
  • Webservice入門程式
  • Webservice的應用場景
  • Webservice的三要素
  • WSDLweb服務描述語言
  • SOAP:簡單物件訪問協議
  • UDDI:目錄服務
  • Webservice的四種客戶端呼叫方式
  • 生成客戶端呼叫方式
  • 客戶端程式設計呼叫方式
  • HttpURLConnecton呼叫方式
  • Ajax呼叫方式
  • 深入開發:用註解修改WSDL內容
2什麼是webservice 2.1什麼是遠端呼叫技術 遠端呼叫資料定義:是系統和系統之間的呼叫
2.2Webservice的原理圖
  • Webservice是使用Http傳送SOAP協議的資料的一種遠端呼叫技術
  • Webservice要開發服務端
  • Webservice要開發客戶端
  • Webservice客戶端開發需要閱讀服務端的使用說明書(WSDL
3Webservice的入門程式 3.1需求
  • 服務端:釋出一個天氣查詢服務,接收客戶端城市名,返回天氣資料給客戶端
  • 客戶端:傳送城市名稱給服務端,接收服務端的返回天氣資料,列印
3.2環境
  • JDK1.7
  • Eclipsemars
3.3實現 3.3.1服務端:
開發步驟:
  • 第一步:建立SEI(Service Endpoint Interface)介面,本質上就是Java介面
package cn.itcast.ws.jaxws.ws; /** * * <p>Title: WeatherInterface.java</p> * <p>Description:SEI介面</p> * <p>Company: www.itcast.com</p> * @author傳智.at * @date 2015年11月26日上午9:28:00 * @version 1.0
*/ publicinterface WeatherInterface { public String queryWeather(String cityName); }
  • 第二步:建立SEI實現類,在實現類上加入@WebService
package cn.itcast.ws.jaxws.ws; import javax.jws.WebService; /** * * <p>Title: WeatherInterfaceImpl.java</p> * <p>Description:SEI實現類</p> * <p>Company: www.itcast.com</p> * @author傳智.at * @date 2015年11月26日上午9:29:27 * @version 1.0 */ @WebService//@WebService表示該類是一個服務類,需要釋出其中的public的方法 publicclass WeatherInterfaceImpl implements WeatherInterface { @Override public String queryWeather(String cityName) { System.out.println("from client..."+cityName); String weather = "晴"; returnweather; } }
  • 第三步:釋出服務,Endpoint釋出服務,publish方法,兩個引數:1.服務地址;2.服務實現類
package cn.itcast.ws.jaxws.ws; import javax.xml.ws.Endpoint; /** * * <p>Title: WeatherServer.java</p> * <p>Description:天氣服務端</p> * <p>Company: www.itcast.com</p> * @author傳智.at * @date 2015年11月26日上午9:41:20 * @version 1.0 */ publicclass WeatherServer { publicstaticvoid main(String[] args) { //Endpoint釋出服務 //引數解釋 //1.address - 服務地址 //2.implementor - 實現類 Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl()); } }
  • 第四步:測試服務是否釋出成功,通過閱讀使用說明書,確定客戶端呼叫的介面、方法、引數和返回值存在,證明服務釋出成功。
  • WSDL地址:服務地址+”?wsdl”
  • WSDL閱讀方式:從下往上
3.3.2客戶端: 開發步驟
  • 第一步:wsimport命令生成客戶端程式碼
  • 第二步:根據使用說明書,使用客戶端程式碼呼叫服務端
  • 第一步:建立服務檢視,檢視是從service標籤的name屬性獲取
  • 第二步:獲取服務實現類,實現類從portType的name屬性獲取
  • 第三步:獲取查詢方法,從portType的operation標籤獲取
package cn.itcast.ws.jaxws.ws.client; import cn.itcast.ws.jaxws.ws.WeatherInterfaceImpl; import cn.itcast.ws.jaxws.ws.WeatherInterfaceImplService; /** * * <p>Title: WeatherClient.java</p> * <p>Description:天氣查詢客戶端</p> * <p>Company: www.itcast.com</p> * @author傳智.at * @date 2015年11月26日上午9:57:40 * @version 1.0 */ publicclass WeatherClient { publicstaticvoid main(String[] args) { //建立服務檢視 WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService(); //獲取服務實現類 WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class); //呼叫查詢方法,列印 String weather = weatherInterfaceImpl.queryWeather("北京"); System.out.println(weather); } }
3.4Webservice的優缺點 優點:
  • 傳送方式採用http的post傳送,http的預設埠是80,防火牆預設不攔截80,所以跨防火牆
  • 採用XML格式封裝資料,XML是跨平臺的,所以webservice也可以跨平臺。
  • Webservice支援面向物件
缺點:
  • 採用XML格式封裝資料,所以在傳輸過程中,要傳輸額外的標籤,隨著SOAP協議的不斷完善,標籤越來越大,導致webservice效能下降
4Webservice應用場景 4.1軟體整合和複用 4.2適用場景
  • 釋出一個服務(對內/對外),不考慮客戶端型別,不考慮效能,建議使用webservice
  • 服務端已經確定使用webservice,客戶端不能選擇,必須使用webservice
4.3不適用場景
  • 考慮效能時不建議使用webservice
  • 同構程式下不建議使用webservice,比如java 用RMI,不需要翻譯成XML的資料
5WSDL 5.1定義 WSDLweb服務描述語言,他是webservice服務端使用說明書,說明服務端介面、方法、引數和返回值,WSDL是隨服務釋出成功,自動生成,無需編寫 5.2文件結構
  • <service>服務檢視,webservice的服務結點,它包括了服務端點
  • <binding>為每個服務端點定義訊息格式和協議細節
  • <portType>服務端點,描述 web service可被執行的操作方法,以及相關的訊息,通過binding指向portType
  • <message>定義一個操作(方法)的資料引數(可有多個引數)
  • <types>定義 web service 使用的全部資料型別
5.3閱讀方式:從下往上 6SOAP 6.1定義:
  • SOAP即簡單物件訪問協議,他是使用http傳送的XML格式的資料,它可以跨平臺,跨防火牆,SOAP不是webservice的專有協議。
  • SOAP=http+xml
6.2協議格式
  • 必需有 Envelope 元素,此元素將整個 XML 文件標識為一條 SOAP 訊息
  • 可選的 Header 元素,包含頭部資訊
  • 必需有Body 元素,包含所有的呼叫和響應資訊
  • 可選的 Fault 元素,提供有關在處理此訊息所發生錯誤的資訊
6.3TCP/IP Monitor 6.3.1代理原理 6.3.2配置 6.3.3測試 在瀏覽器中輸入代理服務地址,能正常訪問,代表代理伺服器設定成功 6.4SOAP1.1 請求
POST /weather HTTP/1.1 Accept: text/xml, multipart/related Content-Type: text/xml; charset=utf-8 SOAPAction: "http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest" User-Agent: JAX-WS RI 2.2.4-b01 Host: 127.0.0.1:54321 Connection: keep-alive Content-Length: 214 <?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body><ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><arg0>北京</arg0></ns2:queryWeather> </S:Body> </S:Envelope>
響應
HTTP/1.1 200 OK Transfer-encoding: chunked Content-type: text/xml; charset=utf-8 Date: Thu, 26 Nov 2015 03:14:29 GMT <?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><return>晴</return></ns2:queryWeatherResponse> </S:Body> </S:Envelope>
6.5SOAP1.2
  • 如何釋出SOAP1.2服務端
  • Jaxws不支援SOAP1.2服務端釋出,直接釋出會報如下異常
  • 如果想釋出SOAP1.2服務端,需要在服務端引入第三方JAR(jaxws-ri-2.2.8)
  • 在實現類上加入如下註解
@BindingType(SOAPBinding.SOAP12HTTP_BINDING) 請求:
POST /weather HTTP/1.1 Accept: application/soap+xml, multipart/related Content-Type: application/soap+xml; charset=utf-8; action="http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest" User-Agent: JAX-WS RI 2.2.4-b01 Host: 127.0.0.1:54321 Connection: keep-alive Content-Length: 212 <?xml version="1.0" ?> <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <S:Body><ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><arg0>北京</arg0></ns2:queryWeather> </S:Body> </S:Envelope>
響應
HTTP/1.1 200 OK Transfer-encoding: chunked Content-type: application/soap+xml; charset=utf-8 Date: Thu, 26 Nov 2015 03:25:24 GMT <?xml version='1.0' encoding='UTF-8'?> <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <S:Body> <ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><return>晴</return></ns2:queryWeatherResponse> </S:Body> </S:Envelope>
6.6SOAP1.1SOAP1.2區別
  • 相同點:
  • 請求傳送方式相同:都是使用POST
  • 協議內容相同:都有Envelope和Body標籤
  • 不同點:
  • 資料格式不同:content-type不同
    • SOAP1.1text/xml;charset=utf-8
    • SOAP1.2application/soap+xml;charset=utf-8
  •    名稱空間不同:
    • SOAP1.1http://schemas.xmlsoap.org/soap/envelope/
    • SOAP1.2http://www.w3.org/2003/05/soap-envelope
7UDDI UDDI 是一種目錄服務,企業可以使用它對 Web services 進行註冊和搜尋。UDDI,英文為 "Universal Description, Discovery and Integration",可譯為通用描述、發現與整合服務 UDDI 並不像 WSDL SOAP一樣深入人心,因為很多時候,使用者知道 Web服務的位置(通常位於公司的企業內部網中)。 8課程回顧
  • 什麼是webservice
  • 什麼是遠端呼叫,系統和系統之間的呼叫,從遠端系統當中獲取業務資料。
  • Webserviceweb服務,他是用http傳輸SOAP協議資料的一種遠端呼叫技術
  • Webservice入門程式
  • 服務端
    • 第一步:建立SEI介面
    • 第二步:建立SEI實現類,要在類上加入@WebService
    • 第三步:釋出服務,Endpoint的publish方法,2兩個引數:1.服務地址;2.實現類例項
    • 第四步:測試服務是否釋出成功,通過閱讀使用說明書,確定服務介面、方法、引數、返回值存在,說明服務釋出成功。
      • WSDL地址:服務地址+”?wsdl”
      • WSDL閱讀方式,從下往上,servvice->binding->portType->其中有介面、方法、引數和返回值
  • 客戶端
    • 第一步:使用wsimport生成客戶端程式碼
    • 第二步:根據使用說明書,使用客戶端呼叫服務端
      • 建立服務檢視,檢視是從service的name屬性獲取
      • 獲取服務實現類,從portType的name屬性獲取
      • 呼叫查詢方法,從portType下的operation標籤的name屬性獲取
  • 優缺點:
    • 傳送方式採用http的post,http預設埠是80,所以跨越防火牆
    • 資料封裝使用XML格式,XML是跨平臺,所以webservice可以跨平臺
    • Webservice支援面向物件開發
  • Webservice應用場景
  • 軟體整合和複用
  • 適用場景:
    • 相關推薦

      WebService學習教程

      Webservice Webservice就是一種遠端呼叫技術,他的作用就是從遠端系統中獲取業務資料 1課程安排 什麼是webservice Webservice入門程式

      webservice學習總結-- WebService相關概念介紹

      IT strong 資源 fire 求和 log AC service服務 為什麽 一、WebService是什麽? 基於Web的服務:服務器端整出一些資源讓客戶端應用訪問(獲取數據) 一個跨語言、跨平臺的規範(抽象) 多個跨平臺、跨語言的應用間通信整合的方案(實際)

      軟體測試學習教程-學習路線圖

      寫這些,一些是個人總結與學習,一些是彙總他人經驗與智慧,他山之石可以攻玉,無論如何,知識共享才是最終目的,希望可以為想入軟體測試行業的小白明確學習的方向,也可以幫助工作多年的中高階工程師能查漏補缺,更歡迎能對文章體現的不當之處予以糾正,對不足之處加以補充,為後來者開闢道路,指

      pygame學習教程pygame介紹引自官網

      網上有很多pygame的教程,我寫這個系列是因為我在學習的過程中響起當年Win32程式設計,自己編寫Form,Message,事件響應。雖然現在已經有很多方法可以幫我們實現這些,如果自己寫一遍會體會很深。 第一篇介紹。 https://www.pygame.org/docs/tut/Pyga

      Scala快速學習教程

          在學習spark時使用到了scala語言進行程式設計,特編寫此部落格,已儘量精簡的方式對scala語言進行總結學習(在至少會一門程式語言的基礎上看此篇部落格會比較容易)。Scala運行於Java平臺(JVM,Java 虛擬機器)上,併兼容現有的Java程式,Scala

      Selenium Python 學習教程

      安裝python 開啟 Python官網,找到“Download”, 在其下拉選單中選擇自己的平臺(Windows/Mac),一般的Linux平臺已經自帶的Python,所以不需要安裝,通過開啟“終端” ,輸入“python”命令來驗證。 如果你是第一次接觸Python,一定會迷惑Pyt

      RxJava2.x 學習教程基本概念

      RxJava是什麼、優點 RxJava (本文所有RxJava全都代指RxJava2)在 GitHub 主頁上的自我介紹是:RxJava – Reactive Extensions for the JVM – a library for composing asynch

      Kubernetes | 學習教程 Kubernetes 1.9.0 離線安裝教程

      為了讓產品在迎來業務量爆發式增長前完成應對措施,在瀏覽無數的資料後,決定將服務逐漸進行容器化,最終能達到容器叢集的效果。而容器叢集的解決方案中,kubernetes(簡稱k8s)看起來是個可行的方案。我目前的理解是,k8s就是docker容器叢集的一個管理系統,有很多實用功能

      gstreamer 學習教程 開發環境搭建

                      Win7 , vs2013 下 Gstreamer 開發環境搭建兩年前就想學習Gstreamer了,可是一直沒時間,現在才有空,準備把學習過程寫成博文,和初學的童靴一起分享成長過程。寫得不好,還請見諒。              開發環境選

      POCO庫學習教程 windows POCO庫編譯(64位)

      注意:首先需要安裝兩個工具 (1)MySQL (2)OpenSSL(http://slproweb.com/products/Win32OpenSSL.html) 專案需要故使用VS2013進行Poco X64的編譯工作,現做簡單記錄。 編譯環境:VS2013

      學習 MeteoInfo二次開發教程

      mat 沒有 組件 資源管理 img 教程 layer 添加 bbs 來自氣象家園:http://bbs.06climate.com/forum.php?mod=viewthread&tid=6631 按照教程,沒有太大問題,有些是對c#操作不熟悉導致。 1.添加d

      方便大家學習的Node.js教程:理解Node.js

      圖形 -1 iter pri attribute set run 相對 mage 理解Node.js 為了理解Node.js是如何工作的,首先你需要理解一些使得Javascript適用於服務器端開發的關鍵特性。Javascript是一門簡單而又靈活的語言,這種靈

      機器學習實戰教程:線性回歸基礎篇

      學習 reg style spa 目標 pub auto 機器 輸入 一 什麽是回歸?   回歸的目的是預測數值型的目標值,最直接的辦法是依據輸入,寫入一個目標值的計算公式。   假如你想預測小姐姐男友汽車的功率,可能會這麽計算:               Ho

      HIVE簡明教程學習筆記——資料庫及表的操作HIVE DDL

      1.建立資料庫 create database if not exists aa_db; 2.檢視資料庫定義 describe database aa_db; 3.檢視資料庫列表 show databases; 4.刪除資料庫 drop database if exists testdb casca

      大資料學習初級入門教程 —— Hadoop 2.x 的安裝、啟動和測試

      大資料最基礎的就是資料的儲存和計算,而 Hadoop 就是為儲存和計算而生,是最基礎的大資料處理工具。這篇簡單寫寫 Hadoop 2.x 的安裝,啟動和測試。 一、準備環境 大資料環境的部署,一般都是叢集,機器數量為奇數,這裡以 5 臺機器為例,作業系統為 CentOS 6.9_x64;

      NVIDIA CUDA初級教程視訊 - 學習筆記CPU體系架構概述

      一句話:CPU大量用於資料搬運而非數值運算,用流水線和分支提高效率 周斌老師:NVIDIA CUDA初級教程視訊第2集 【計算機組成原理】 Q:什麼是CPU? A:是執行指令、處理資料的器件,用於完成基本的邏輯和算術指令,現在增加了複雜功能(記憶體介面、外部裝置介面),包含大量電晶體(上

      C# WPF 基礎教程 視訊學習筆記

      1.[STAThread()] 代表單執行緒 2.using語句允許程式設計師指定使用資源的物件應當何時釋放資源 3.Border 一般用於裝載面板   Padding 邊框和內部內容中間新增空間   CornerRadius可以使邊框具有一個圓角     4.DockP

      Git教程-廖雪峰——學習筆記

            按照教程學習了git工具的簡單使用,目前最先進的分散式版本控制系統,無論是從GitHub上學習他人的程式碼,還是儲存自己的程式碼都非常有用。        按照教程練習了一遍程式碼,這裡總結一下: 一.建立版本庫   1.開啟git工具,用下面的指令可以

      SQLite學習3_Linux平臺上SQLite資料庫教程——終端使用篇

      Linux平臺上SQLite資料庫教程(一)——終端使用篇 SQLite是一款輕型的資料庫,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,可能只需要幾百K的記憶體就夠了。能夠支援Windows/Linux/Unix等等主流的作業系統

      UFLDL 教程學習筆記神經網路

      UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大學的 Andrew Ng 教授及其團隊