WebService總結
1、WebService是什麼?
1.1 基於Web的服務,服務器端整出一些資源讓客戶端應用訪問
1.2 一個跨語言、跨平臺的規範
1.3 多個跨語言、跨平臺的應用間通信整合的方案
2、幾個重要術語
2.1 WSDL: WebService definition language
直譯:WebService定義語言
1、對應一種類型的文件:.wsdl
2、定義了WebService的服務器端與客戶端應用交互傳遞請求和相應數據的格式和方式
3、一個WebService對應一個唯一的wsdl文檔
2.2 SOAP: simple object access protocal
直譯:簡單對象訪問協議
1、是一種簡單的、基於HTTP和XML的協議,用於在WEB上交換結構化的數據。
2、SOAP信息:請求消息和響應消息
3、HTTP和XML
2.3 SEI:WebService EndPoint Interface
直譯:WebService的終端接口
就是WebService服務器端用來處理請求的接口
2.4 CXF:Celt+XFire
一個apache的用於開發服務器端和客戶端的框架
3、HTTP協議
3.1 HttpRequest
請求的格式分成三個部分:請求行、消息頭、消息正文
CR:回車(\r)
LF:換行(\n)
1、請求行: method url protocal
例如: Get /index.html HTTP/1.1CRLF
2、消息頭
name1:value1CRLF
name2:value2CRLF
...
CRLF 單獨放送一個CRLF表示消息頭全部發送完畢
3、消息正文(略)
3.2 HttpResponse
請求的格式分成三個部分:狀態行、響應頭、響應正文
1、狀態行: 協議版本 狀態代碼 狀態描述
例如: HTTP/1.1 200 OKCRLF
2、響應頭(與消息頭格式相同)
3、響應正文(字節數據,是實際數據)
4、用Eclipse演示WebService
1、javaEE模式下,點擊WebService瀏覽器(小地球右邊的那個按鈕)
2、點擊右邊的wsdl Page (五角星左邊的那個按鈕)
3、點擊WSDL Main
4、把複製好的wsdl url地址粘貼過來例如:
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
5、go
6、add
7、source
5、開發WebService
5.1 使用jdk開發
1)開發服務器端
webservice編碼:
-- @WebService(SEI和SEI的實現類)
-- @WebMethod(SEI中的所有方法)
發佈WebService
-- EndPoint終端 發佈WebService
request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://day01_webservice_ws.atguigu.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <q0:introduce>
<arg0>Jack</arg0>
<arg1>18</arg1>
</q0:introduce>
</soapenv:Body>
</soapenv:Envelope>
response:
- <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <S:Body>
- <ns2:introduceResponse xmlns:ns2="http://day01_webservice_ws.atguigu.cn/">
<return>I'm Jack,and I'm 18years old.</return>
</ns2:introduceResponse>
</S:Body>
</S:Envelope>
2)開發客戶端
在客戶端項目的src目錄下cmd 執行
wsimport -keep url
例如:wsimport -keep http://localhost:8989/AAAA-day01-WebService/hellows?wsdl
這樣會自動生成代碼
編寫測試代碼
5、2 使用Eclipse的Tcp_IP工具(端口轉發)監聽WebService請求
啓動起來 這裏配置了8088會轉發到8089
本地wsdl文件自動生成代碼
5.3 編寫天氣預報查詢WebService
如果是.net寫的WebService會出現問題
解決方案:
1、將對應的wsdl文件保存到本地
2、修改wsdl文檔的部分內容
將<s:element ref="s:schema" /><s:any />替換成<s:any minOccurs="2" maxOccurs="2"/>
5.4 編寫手機號碼歸屬地查詢WebService
5.5 編寫中英雙向翻譯WebService
6、wsdl文檔深入分析
6、1 文檔結構
6.2文檔結構圖
6.3 重要標籤的說明
6.4演示cxf框架
E:\JSD1708HY\APP\tts9\apache-cxf-2.5.9\bin 有一個wsdl12java
7、CXF支持的數據類型
--基本類型
--引用類型
--String
--集合:List、Set、Map
--自定義類型:Student
8、一次 Web service 請求的流程
9、WebService面試題
1、webservice相當於 HTTP+XML +schema(?)
2、wsdl是什麼
直譯:WebService定義語言,對應一種類型的文件:.wsdl,定義了WebService的服務器端與客戶端應用交互傳遞請求和相應數據的格式和方式,一個WebService對應一個唯一的wsdl文檔
3、如何發佈一個WebService
定義SEI @WebService @WebMethod
定義SEI的實現 @WebService
EndPoint.publish(url,SEI實現類)
4、如何請求一個WebService
1)根據wsdl文檔生成客戶端代碼
jdk ------wsport
cxf ------- E:\JSD1708HY\APP\tts9\apache-cxf-2.5.9\bin\wsdl12java
2)根據生成的代碼調用WebService
10、cxf的攔截器
10.1 攔截器 API
Interceptor(攔截器接口)
AbstractPhaseInterceptor(自定義攔截器從此繼承)
LoggingInInterceptor(系統日誌入攔截器類)
LoggingOutInterceptor(系統日誌出攔截器類)
演示CXF的攔截器-----服務器端
演示CXF的攔截器-----客戶端
11、用 CXF 編寫基於 spring 的 web service
服務端
客戶端
結合Spring的情況下,如何自定義攔截器
1. Server 端
– 在 beans.xml 中,在 endpoint 中配置上入攔截器
2. Client 端
– 通過 Client 對象設置出攔截器
12、其他調用WebService的方式
12.1 Ajax調用WebService
獲取Ajax對象,因爲歷史原因需要區分瀏覽器
12.2 Jquery請求webservice
12.3 HttpURLConnection 調用 WebService
13、通過註解修改 wsdl 文檔