1. 程式人生 > >day45_Webservice學習筆記_01

day45_Webservice學習筆記_01

一、課程安排

Webservice就是一種遠端呼叫技術,它的作用就是從遠端系統中獲取業務資料。

    客戶端通過網路通訊協議訪問服務端,網路協議包括TCP和UDP兩大通訊協議:    TCP是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量要求比較高的情況,使用這個協議。TCP支援的應用協議主要有:Telnet、FTP、SMTP、HTTP等;    UDP使用者資料報協議,是一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務。UDP支援的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系統)、TFTP(通用檔案傳輸協議)等。    客戶伺服器模式早期主要應用於c/s應用,web興起後主要應用於b/s應用,b/s比c/s的好處就在於b/s是基於瀏覽器客戶端訪問服務端。

課程安排:

  • 什麼是webservice
  • Webservice的入門程式
  • Webservice的應用場景
  • Webservice的三要素
  • WSDL:web服務描述語言
  • SOAP:簡單物件訪問協議
  • UDDI:目錄服務
  • Webservice的四種客戶端呼叫方式
  • 生成客戶端呼叫方式
  • 客戶端程式設計呼叫方式
  • HttpURLConnection呼叫方式
  • Ajax呼叫方式
  • 深入開發:用註解修改WSDL內容

二、什麼是webservice

Web service 即web服務,它是一種跨程式語言和跨作業系統平臺的遠端呼叫技術即跨平臺遠端呼叫技術。

2.1、什麼是遠端呼叫技術?

  • 遠端呼叫資料定義:是系統和系統之間的呼叫。如下圖所示:

2.2、Webservice的原理圖

  • Webservice是使用Http傳送SOAP協議的資料的一種遠端呼叫技術
  • Webservice要開發服務端
  • Webservice要開發客戶端
  • Webservice客戶端開發需要閱讀服務端的使用說明書(WSDL)如下圖所示:

2.3、Webservice的開發規範

詳解如下:

    JAVA 中共有三種WebService 規範,分別是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。    下面來分別簡要的介紹一下這三個規範。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版本。2、JAXM&SAAJ(不常用)    JAXMJAVA API For XML Message)主要定義了包含了傳送和接收訊息所需的APISAAJSOAP With Attachment API For JavaJSR 67)是與JAXM 搭配使用的API,為構建SOAP 包和解析SOAP 包提供了重要的支援,支援附件傳輸等,JAXM&SAAJ 與JAX-WS 都是基於SOAP 的Web 服務,相比之下JAXM&SAAJ 暴露了SOAP更多的底層細節,編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細節,更加面向物件,實現起來你基本上不需要關心SOAP 的任何細節。3、JAX-RS(大公司使用)    JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規範,由於推出的較晚,該規範(JSR 311,目前JAX-RS 的版本為1.0)並未隨JDK1.6 一起發行。

三、Webservice的入門程式

3.1、需求

  服務端:釋出一個天氣查詢服務,接收客戶端城市名稱,返回天氣資料給客戶端。  客戶端:傳送城市名稱給服務端,接收服務端的返回天氣資料,打印出來。

3.2、環境

  JDK:1.8  Eclipse:Oxygen

3.3、實現-服務端

開發步驟:第一步:建立SEI(Service Endpoint Interface)介面,本質上就是Java介面

package com.itheima.webservice.jaxws.ws;/* * SEI介面 */public interface WeatherInterface {    public String queryWeather(String cityName);}

第二步:建立SEI實現類,在實現類上加入註解@WebService

package com.itheima.webservice.jaxws.ws;import javax.jws.WebService;@WebService  // @WebService表示該類是一個服務類,需要釋出其中的public的方法public class WeatherInterfaceImpl implements WeatherInterface {    @Override    public String queryWeather(String cityName) {        System.out.println("from client..." + cityName);        String weather = "晴";        return weather;    }}

第三步:釋出服務,Endpoint釋出服務,publish方法,兩個引數:1.服務地址;2.服務實現類

package com.itheima.webservice.jaxws.ws;import javax.xml.ws.Endpoint;public class WeatherServer {    public static void main(String[] args) {        // Endpoint 釋出服務        // 引數解釋:        //      1.address - 服務地址        //      2.implementor - 服務實現類        Endpoint.publish("http://127.0.0.1:12345/weather"new WeatherInterfaceImpl());    }}

第四步:測試Webservice服務是否釋出成功,通過閱讀使用說明書,確定客戶端呼叫的介面、方法、引數和返回值存在,證明服務釋出成功。

  • WSDL地址:服務地址+”?wsdl”
  • WSDL閱讀方式:從下往上閱讀

如下圖所示:1、

2、3、

3.4、實現-客戶端

開發步驟:

  • 第一步:wsimport命令生成客戶端程式碼wsimport -s . http://127.0.0.1:12345/weather?wsdl
  • 第二步:根據使用說明書,使用客戶端程式碼呼叫服務端
    • 第一步:建立服務檢視,檢視是從service標籤的name屬性獲取
    • 第二步:獲取服務實現類,實現類從portType標籤的name屬性獲取
    • 第三步:呼叫查詢方法,從portType的operation標籤的name屬性獲取

示例程式碼如下:

package com.itheima.webservice.jaxws.ws.client;import com.itheima.webservice.jaxws.ws.WeatherInterfaceImpl;import com.itheima.webservice.jaxws.ws.WeatherInterfaceImplService;/* * 天氣查詢客戶端 */public class WeatherClient {    public static void main(String[] args) {        // 建立服務檢視        WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();        // 獲取服務實現類        WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);        // 呼叫查詢方法,列印        String weather = weatherInterfaceImpl.queryWeather("北京");        System.out.println(weather);    }}

客戶端效果如下圖所示:

服務端效果如下圖所示:

3.5、Webservice的優缺點

  • 優點:
    • 傳送方式採用http的post方式傳送,http的預設埠是80,防火牆預設不攔截80,所以跨防火牆。
    • 採用XML格式封裝資料,XML是跨平臺的,所以webservice也可以跨平臺。
    • Webservice支援面向物件。
    • 有利於軟體和資料重用,實現鬆耦合。
  • 缺點:
    • 採用XML格式封裝資料,所以在傳輸過程中,要傳輸額外的標籤,隨著SOAP協議的不斷完善,標籤越來越大,導致webservice的效能下降。

四、Webservice的應用場景

4.1、軟體整合和複用

  • 軟體整合和複用圖解如下:

4.2、適用場景

  • 釋出一個服務(對內/對外),不考慮客戶端型別,不考慮效能,建議使用webservice。比如:便民網站的天氣查詢介面、火車時刻查詢介面等。
  • 服務端已經確定使用webservice,客戶端不能選擇,必須使用webservice。

4.3、不適用場景

  • 考慮效能時不建議使用webservice。比如:銀行交易系統、股票交易系統(炒股時候玩的槓桿(高階使用者))等,任何延遲都可能造成無法估量的損失。
  • 同構程式之間通訊(都是用同一種語言開發的)不建議使用webservice。比如:Java的RMI同樣可以實現遠端呼叫,而且效能比webservice好很多。

五、WSDL

5.1、WSDL的定義

  • WSDL 指網路服務描述語言(Web Services Description Language)。
  • 它是webservice服務端使用的說明書,說明服務端介面、方法、引數和返回值,WSDL是隨服務釋出成功,自動生成,無需編寫。

5.2、WSDL的文件結構+閱讀方式

詳解如下:

<service>   服務檢視:webservice的服務結點,它包括了服務端點port(一般會有多個服務端點)。<binding>   為每個服務端點port定義訊息格式和協議細節。<portType>  服務端點型別:描述 web service可被執行的操作方法,以及相關的訊息,通過binding指向portType。<message>   定義一個操作(方法)的資料引數(可有多個引數)。<types>     定義 web service 使用的全部資料型別。從下往上讀:先找到服務檢視,通過binging找到protType,找到了protType就找到了我們要呼叫的webservice方法。

WSDL的文件結構圖以及WSDL的閱讀方式如下圖所示;

六、SOAP

6.1、SOAP的定義

  • SOAP是一種網路通訊協議,即簡易物件訪問協議,它是使用http傳送的XML格式的資料,它可以跨平臺,跨防火牆,SOAP不是webservice的專有協議。
  • SOAP = http + xml,其實就是通過HTTP發xml資料。HTTP請求 與 SOAP請求的區別,如下圖所示:

6.2、SOAP協議的格式

  • 相關推薦

    day45_Webservice學習筆記_01

    一、課程安排 Webservice就是一種遠端呼叫技術,它的作用就是從遠端系統中獲取業務資料。     客戶端通過網路通訊協議訪問服務端,網路協議包括TCP和UDP兩大通訊協議:    TCP是一種面向連線的協議,提供可靠的資料傳輸,一般服務質量要求比較高的情況,使用這個協議。TCP支援的應用協議主要

    React學習筆記_01

    壓縮 替換 log -s 直接 快速構建 使用 cal font 使用Facebook的create-react-app快速構建React開發環境 前言: create-react-app:來自Facebook官方的零配置命令行工具 create-react-app是

    Ajax學習筆記_01

    通過 xmlhttp orm imp 函數 java AD 交互 thead Ajax是一種方法,而不是一種編程語言。語言的話,用js就足夠了。 首先需要創建一個XMLHttpRequest對象,這個對象的方法包括: abort(); getAllResponseHe

    Flask_學習筆記_01

    公司有一哥們成立一個Python學習小組,於是果斷加入,雖然講的跳度比較大,但是還是學了點知識的。之前自學過一段時間Python,有點基礎。聽到要講Flask的時候,就有點感興趣了,說是比較輕量級的Web開發框架,嘗試了一下,確實上手比較快。由於也是剛入門,所以沒有資格對其評價,先玩一段時間再說吧。 Fla

    day61_Mybatis學習筆記_01

    今天內容安排: 1、mybatis的介紹 2、分析原生態jdbc程式中存在的問題 3、mybatis的框架原理(重點) 4、入門程式 訂單商品案例(使用者表) 5、Mybatis開發dao的方

    Java學習筆記_01

    Java程式三步走 原始檔(格式為.java檔案) 編譯器轉化(格式為.class檔案) 直譯器轉化(轉化為機器語言) 第一個java程式 建立檔案javatest.java 編輯程式碼: public class javates

    day63_SpringMVC學習筆記_01

    1、JAVAEE體系結構 JAVAEE體系結構圖如下所示: 2、什麼是springmvc? 什麼是mvc? Model1 Model2 SpringMVC是什麼? SpringMVC是一個web層mvc框架,類似struts2。 SpringMVC和

    day67_Redis學習筆記_01

    課程計劃 1、Redis的介紹 a) 什麼是NoSql b) NoSql的分類 c) 什麼是Redis d) Redis的歷史發展 e) Redis的應用場景 2、Redis服務端的安裝(重點) 3、Redis客戶端的使用 a) redis自帶客戶端(命令列) b)

    Robot Operating System (ROS)學習筆記4---語音控制

    sla 語音 出現 tput http 學習 process 輸入 ubun 搭建環境:XMWare Ubuntu14.04 ROS(indigo) 轉載自古月居 轉載連接:http://www.guyuehome.com/260 一、語音識別包 1、安裝

    MySQL學習筆記(六)—— MySQL自連接

    概念 cor 子查詢 ron 表操作 例子 質量 _id order by 有的時候我們需要對同一表中的數據進行多次檢索,這個時候我們可以使用之前學習過的子查詢,先查詢出需要的數據,再進行一次檢索。 例如:一張products表,有產品id,供應商id(vend_

    jquery 深入學習筆記之中的一個 (事件綁定)

    color 動態 name his pan mouseover this pre con 【jquery 事件綁定】 1、加入元素事件綁定 (1) 加入事件為當前元素 $(‘p‘).on(‘click‘,function(){ //code here ..

    AngularJS入門學習筆記

    rect directive 技術分享 attr 兩個 ava 內容 module 大括號 首先聲明: 本博客源自於學習:跟我學AngularJs:AngularJs入門及第一個實例。通過學習,我自己的一些學習筆記。 1.AngularJS的一些基本特性 (1)使用雙大括號

    Python學習筆記-2017.5.4

    列表 lin 覆蓋範圍 復習 處理 pytho 內部 global txt 本文章記錄學習過程中的細節和心得: 復習所學課程: 1、文件的操作:   打開文件,對文件的操作打開方式有兩種:   第一種:      f = open("test.txt", "r")#以只讀

    SAS學習筆記之函數應用

    不能 oracle 理解 資料 oracl 函數應用 特殊 put acl 今天在做數據需求的時候遇到一些問題,因為不能夠在數據庫裏面做,僅僅好在SAS裏面實現。這就遇到了一些麻煩,須要使用一些函數實現部分功能,如查找字段中某個特殊字符出現的次數,查找某個字符的位置等,

    OpenCV2學習筆記(十五):利用Cmake高速查找OpenCV函數源代碼

    one 生成 img log 分享 lan 學習筆記 全部 modules 在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查

    avalonjs 學習筆記1---checkbox

    nod item ack lex server ini npm 學習 define 一、vscode 安裝使用 1.vs code+node.js下載安裝 2.在node.js command prompt 中運行 npm install -g live-server 3

    Linux學習筆記(三):系統執行級與執行級的切換

    查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

    Principle of Computing (Python)學習筆記(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    ide out generate depth sku color ati cond with 1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/prin

    Java程序猿的JavaScript學習筆記(12——jQuery-擴展選擇器)

    type write number article mat 我們 content ace val 計劃按例如以下順序完畢這篇筆記: Java程序猿的JavaScript學習筆記(1——理念) Java程序猿的JavaScript學習筆記(2——屬性復制和繼承) Jav

    java學習筆記——String類

    通過 ray [] 原理 log spl 2.3 -s 長度 一、概述 ·字符串是一個特殊的對象 ·字符串一旦初始化就不可以被改變 ·String str = "abc"; ·String str1 = new String("abc"); 有什麽區別? package