day46_Webservice學習筆記_02
一、回顧昨天所學
什麼是webservice? 什麼是遠端呼叫技術?答:系統和系統之間的呼叫,從遠端系統當中獲取業務資料。 Webservice是web服務,他是用http傳輸SOAP協議資料的一種遠端呼叫技術。Webservice的入門程式 服務端 第一步:建立SEI介面 第二步:建立SEI實現類,要在類上加入註解:@WebService,作用是標識這個類是服務類,要釋出裡面的public方法。 第三步:釋出服務,Endpoint的publish方法,有2兩個引數:1.服務地址 2.實現類例項 第四步:測試服務是否釋出成功,通過閱讀使用說明書,確定服務介面、方法、引數和返回值存在,說明服務釋出成功。 WSDL地址:服務地址+”?wsdl”,比如:http://127.0.0.1:54321/weather?wsdl WSDL閱讀方式,從下往上,service --> binding --> portType --> 其中有介面、方法、引數和返回值 客戶端 第一步:使用wsimport命令生成客戶端程式碼 第二步:根據使用說明書,使用客戶端呼叫服務端 建立服務檢視,檢視是從service的name屬性獲取 獲取服務實現類,從portType的name屬性獲取 呼叫查詢方法,從portType下的operation標籤的name屬性獲取Webservice的優缺點: 優點:傳送方式採用http的post,http預設埠是80 ,所以跨防火牆。 資料封裝使用XML格式,XML是跨平臺,所以webservice可以跨平臺。 Webservice支援面向物件開發。 缺點:使用XML封裝資料,需要額外傳輸其他標籤,效能較差。Webservice的應用場景巨集觀 軟體整合和複用微觀 適用場景: 釋出服務(對內/對外),不考慮效能,不考慮客戶端型別,建議使用webservice 服務端已經確定webservice,客戶端只能使用webservice 不適用場景: 考慮效能時,不建議使用webservice 同構程式下,不建議使用webservice,比如:客戶端服務端都是java開發,建議使用Java RMI,Java的RMI同樣可以實現遠端呼叫,而且效能比webservice好很多。Webservice的三要素 WSDL: 定義:web服務描述語言,它是webservice服務端的使用說明書,它說明服務、介面、方法、引數和返回值,它是伴隨服務釋出成功,而自動生成的,無需編寫。 文件結構: service binding portType message types 閱讀方式:從下往上 SOAP: 定義:SOAP即簡單物件訪問協議,它是使用http傳輸XML格式的資料,跨平臺,跨防火牆,它不是webservice專有協議。 Soap = http + xml 協議的格式: 必須項:envelope和body 非必須項有:header和fault SOAP1.1和1.2 區別 相同點: 都使用http的POST傳送請求 協議格式都相同:都有envelope和body標籤 不同點: Content-type不同: SOAP1.1:text/xml; charset=utf-8; SOAP1.2:application/soap+xml; charset=utf-8 名稱空間不同: SOAP1.1:http://schemas.xmlsoap.org/soap/envelope/ SOAP1.2:http://www.w3.org/2003/05/soap-envelopeWebservice的四種客戶端呼叫方式 生成客戶端的呼叫方式 Service程式設計的呼叫方式 HttpURLConnecton呼叫方式 Ajax呼叫方式深入開發:用註解修改WSDL內容 @Webservice @WebMethod @WebParam @WebResult修改完WSDL之後,需要重新生成客戶端程式碼。
二、課程安排
- CXF的介紹、安裝和配置
- 使用CXF釋出SOAP1.1協議的服務
- 使用CXF釋出SOAP1.2協議的服務(瞭解一下)
- CXF + Spring整合釋出SOAP的服務
- 使用CXF釋出REST的服務(大企業中使用)
- 什麼是REST
- CXF + Spring整合釋出REST的服務
- 綜合案例:把公網的服務整合到自己開發的系統中,通過呼叫服務實現查詢功能,再把我們做的查詢功能釋出成一個服務,讓外界的人去呼叫。(揹著寫)
三、CXF的介紹、安裝和配置
3.1、CXF的介紹
Apache CXF = Celtix + Xfire,開始叫 Apache CeltiXfire,後來更名為 Apache CXF 了,以下簡稱為 CXF。Apache CXF 是一個開源的web Services 框架,CXF 幫助您快速構建和開發 web Services ,它支援多種協議,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。CORBA(Common Object Request Broker Architecture公共物件請求代理體系結構,早期語言使用的WS。C,c++,C#) CXF是基於SOA匯流排結構,依靠spring完成模組的整合,實現SOA方式。靈活的部署:可以執行有Tomcat、Jboss、Jetty(內建)、Weblogic上面。
- CXF是一個開源的webservice框架,提供很多完善功能,可以實現快速構建和開發。
- CXF支援的協議:SOAP1.1/1.2、REST(今天要講的)
- CXF支援資料格式:XML、JSON(僅在REST方式下支援)
3.2、CXF的安裝及配置
- 下載地址,建議下載最新版本:http://cxf.apache.org/download.html
- 包結構介紹:
- 安裝和配置:
- 第一步:安裝JDK,建議1.8,安裝成功介面
- 第二步:解壓 apache-cxf-3.2.6.zip 到指定目錄,建立系統環境變數:CXF_HOME
- 第三步:把CXF_HOME加入到Path路徑下
- 第四步:測試,在新的cmd命令列視窗下輸入命令:wsdl2java –h,出現如下圖所示介面,表示安裝成功。
- 如果不想使用IDE(比如:Eclipse),即手動建立專案的方式,需要在環境變數下配置如下資訊:
四、使用CXF釋出SOAP1.1協議的服務
4.1、需求
- 服務端:釋出服務,接收客戶端的城市名,返回天氣資料給客戶端。
- 客戶端:傳送城市名給服務端,接收服務端的響應資訊,列印。
4.2、實現-服務端
開發步驟: 第一步:匯入jar包 第二步:建立SEI介面,要在介面
上加入註解:@WebService
package com.itheima.webservice.cxf.server;import javax.jws.WebService;/* * SEI介面 */@WebServicepublic interface WeatherInterface { public String queryWeather(String cityName);}
第三步:建立SEI實現類
package com.itheima.webservice.cxf.server;/* * SEI實現類 */public class WeatherInterfaceImpl implements WeatherInterface { @Override public String queryWeather(String cityName) { System.out.println("from client..." + cityName); if ("北京".equals(cityName)) { return "冷且霾"; } else { return "暖且晴"; } }}
第四步:釋出服務, 使用JaxWsServerFactoryBean釋出服務,需要設定3個引數:1.服務介面; 2.服務實現類; 3.服務地址; Endpoint僅支援釋出實現類,JaxWsServerFactoryBean支援釋出介面。
package com.itheima.webservice.cxf.server;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;/* * 釋出服務端 */public class WeatherServer { public static void main(String[] args) { /* JaxWsServerFactoryBean釋出服務,需要設定3個引數:1.服務介面; 2.服務實現類; 3.服務地址; Endpoint僅支援釋出實現類,JaxWsServerFactoryBean支援釋出介面 */ // JaxWsServerFactoryBean釋出服務 JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean(); // 設定服務介面 jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class); // 設定服務地址 jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather"); // 設定服務實現類 jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl()); // 釋出服務 jaxWsServerFactoryBean.create(); }}
第五步:測試服務是否釋出成功,閱讀使用說明書,確定關鍵點。我們先啟動服務端服務,如下圖所示:
如果在CXF釋出的服務下,直接訪問服務地址:http://127.0.0.1:12345/weather,會如下異常: 此時直接訪問使用說明書的地址即可:http://127.0.0.1:12345/weather?wsdl,如下圖所示:4.3、使用CXF釋出SOAP1.2協議的服務
- 在介面上加入如下註解:@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
- 再重新發布服務端。注意:每次我們重新發布服務端的時候,埠都會被佔用,需要我們手動結束任務,清理出埠來。
4.4、CXF攔截器
- CXF攔截器的原理:
- 攔截器可以攔截請求和響應
- 攔截器可以有多個
- 攔截器可以根據需要自定義
- CXF攔截器的使用:
- 攔截器必須加到服務端,在服務端釋出服務之前加入
- 獲取攔截器列表,將自己的攔截器加入列表中
- CXF攔截器的應用場景:
- 一般用於測試,比如:安全性方面:過濾非法請求、非法程式碼等
- 但是一般情況下是不會用的,因為攔截器加上了之後會增加正式伺服器的負載,影響效能,而且這些攔截器和業務邏輯是無關的
- 一般情況下,攔截器會加到代理伺服器上面,以後用或不用,是由經理來決定的
示例程式碼如下:
package com.itheima.webservice.cxf.server;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;/* * 釋出服務端 */public class WeatherServer { public static void main(String[] args) { /* JaxWsServerFactoryBean釋出服務,需要設定3個引數:1.服務介面; 2.服務實現類; 3.服務地址; Endpoint僅支援釋出實現類,JaxWsServerFactoryBean支援釋出介面 */ // JaxWsServerFactoryBean釋出服務 JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean(); // 設定服務介面 jaxWsServerFactoryBean.setServiceClass(WeatherInterface.class); // 設定服務地址 jaxWsServerFactoryBean.setAddress("http://127.0.0.1:12345/weather"); // 設定服務實現類 jaxWsServerFactoryBean.setServiceBean(new WeatherInterfaceImpl()); // 加入CXF攔截器 jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor()); jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); // 釋出服務 jaxWsServerFactoryBean.create(); }}
重新發布服務端和客戶端,服務端控制檯打印出的結果如下:
----------------------------ID: 1Address: http://127.0.0.1:12345/weatherEncoding: UTF-8Http-Method: POSTContent-Type: text/xml; charset=UTF-8Headers: {Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], Content-Length=[240], content-type=[text/xml; charset=UTF-8], Host=[127.0.0.1:12345], Pragma=[no-cache], SOAPAction=[""], User-Agent=[Apache-CXF/3.2.6]}Payload:<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body><ns2:queryWeather xmlns:ns2="http://server.cxf.webservice.itheima.com/"> <arg0>山西省運城市永濟市</arg0></ns2:queryWeather> </soap:Body></soap:Envelope>--------------------------------------from client...山西省運城市永濟市九月 22, 2018 12:18:05 上午 org.apache.cxf.services.WeatherInterfaceService.WeatherInterfacePort.WeatherInterface資訊: Outbound Message---------------------------ID: 1Response-Code: 200Encoding: UTF-8Content-Type: text/xmlHeaders: {}Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body><ns2:queryWeatherResponse xmlns:ns2="http://server.cxf.webservice.itheima.com/"> <return>暖且晴</return></ns2:queryWeatherResponse> </soap:Body></soap:Envelope>--------------------------------------
4.5、實現-客戶端
- 第一步:生成客戶端程式碼
- wsdl2java命令是CXF提供的生成客戶端的工具,它和wsimport類似,可以根據WSDL生成客戶端程式碼。wsdl2java -p com.itheima.cxf.weather -d . http://127.0.0.1:12345/weather?wsdl演示效果如下圖所示:
- wsdl2java常用引數:
- -d,指定客戶端程式碼輸出目錄
- -p,指定客戶端程式碼輸出包名,如果不指定該引數,預設包名是WSDL的名稱空間的倒序
- wsdl2java支援SOAP1.1和SOAP1.2協議的客戶端生成。
- 第二步:使用說明書,使用生成的客戶端程式碼呼叫服務端
- 先引入jar包
-
相關推薦
day46_Webservice學習筆記_02
一、回顧昨天所學 什麼是webservice? 什麼是遠端呼叫技術?答:系統和系統之間的呼叫,從遠端系統當中獲取業務資料。 Webservice是web服務,他是用http傳輸SOAP協議資料的一種遠端呼叫技術。Webservice的入門程式 服務端 第一步:建立SEI介
Hibernate學習筆記_02
提交 dao層 .get cti log www 並且 open cglib 上篇文章(傳送門:Hibernate學習筆記_01)介紹了Hibernate是什麽,如何搭建,配置文件詳解以及Hibernate的一些基本API詳解這幾個方面做了簡單介紹,那麽本文將會從一下5
Flask_學習筆記_02: URL和檢視
今天來學習Flask中URL和檢視的相關知識。 URL不多說了,訪問網站,瀏覽器中的地址大家都可以看到,比如我的51CTO的blog網址是:http://blog.51cto.com/jiaszwx 如果你在位址列裡敲:http://blog.51cto.com/ 那麼瀏覽器返回的是51CTO部落格的主頁
Flask_學習筆記_02: URL和視圖
通過 輸入 從數據 -o easy 技術分享 welcome 參數 直接 今天來學習Flask中URL和視圖的相關知識。 URL不多說了,訪問網站,瀏覽器中的地址大家都可以看到,比如我的51CTO的blog網址是:http://blog.51cto.com/jiaszwx
Flask_學習筆記_02: 頁面跳轉
頁面跳轉是網頁開發中需要實現的最基本的一個功能,使用者點選頁面中的一個超連結或者按鈕,就會跳轉到一個新頁面。那麼在Flask當中是如何實現的呢? 在下面的例子中,也會用到url_for(),還有另外一個redirect。目前幾乎所有的網站都需要使用者登入,才能釋出新內容或者做相關的更改。下面就以使用者要釋出
SpringMVC學習筆記_02
1、springmvc對多檢視的支援 (1)匯入xml格式檢視支援的jar包 注意:springmvc本身就支援xml格式,所以不用匯入其他支援的jar包了。 (2)在springmvc.xml中配置支援多檢視 <!-- 配置支援
day43_Oracle學習筆記_02
八、子查詢 示例程式碼如下:子查詢.txt SQL> --rownum 行號SQL> select rownum,empno,ename,sal from emp; ROWNUM EMPNO ENAME SAL
day62_Mybatis學習筆記_02
今天內容安排: 1、高階結果對映(一對一、一對多、多對多)(重點) 2、延遲載入 3、查詢快取 4、Spring 和 mybatis 的整合(重點) 5、逆向工程 1、高階結果對映(即:關聯查詢對映)(重點) 1.1、分析資料模型 1.1.1、思路 1、每張表記錄
day64_SpringMVC學習筆記_02
1、springmvc對多檢視的支援 (1)匯入xml格式檢視支援的jar包 注意:springmvc本身就支援xml格式,所以不用匯入其他支援的jar包了。 (2)在springmvc.xml中配置支援多檢視 <!-- 配置支援多檢視 --> <bean
OpenGL_Qt學習筆記之_02(繪製簡單平面幾何圖形)
#include "glwidget.h" #include "ui_glwidget.h" #include <QtGui> #include <QtCore> #include <QtOpenGL> #ifndef GL_MULTISAMPLE #define
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