




已閱讀5頁,還剩29頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Webservice 第一天 jaxws編程方法 綜合案例Webservice課程安排:兩天課:第一天:什么是webservice?從案例(便民查詢網站)分析如何實現?使用socket實現。使用jaxws開發webservice。Webservice三要素Wsdl(webservice使用說明書)重點掌握Soap(jaxws開發webservice的傳輸協議)重點掌握UDDI(了解)Webservice的使用場景分析(掌握)學會jaxws基本開發方法(重點)Soap1.1和soap1.2區別:跟蹤soap協議綜合案例:使用webservice傳輸xml數據(重點掌握)第二天:Jaxws的深入開發:常用注解測試jaxws傳輸復雜對象類型CXF開發webservice:CXF入門程序Spring+cxf整合(重點)CXF發布rest的webservice。(重點)綜合案例:實現便民查詢網站1 便民網站分析1.1 需求通過便民網站,查詢日常信息。1.2 分析從遠程系統中獲取信息從遠程系統中獲取信息氣象局天氣信息表現層Html,css業務層service移動運營商手機號信息數據層dao數據庫,沒有天氣信息udptcp客戶端/服務器模式:服務端氣象局移動運營商客戶端自己開發便民查詢網站遠程調用Tcp:是一種傳輸層協議,是一種面向連接的協議,經過三次握手客戶端和服務端連接一個連接(通道)。Tcp傳輸數據時穩定。Udp:是一種傳輸層協議,是一種數據報協議,速度是很快的,不穩定的。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去最終采用tcp通信方式,客戶端向服務端發起請求,查詢天氣信息。1.3 Socket實現天氣查詢1、 jaxws開發webservice和socket對比分析2、 重視socket開發,企業開發后臺服務常使用socket。a) 服務端要有可持續運行能力,保證線程一直在運行b) 并發處理能力,要使用多線程1.3.1 分析outputstreaminputstreaminputstreamoutputstream客戶端連接socket服務端服務端使用ServerSocket創建socket服務端1.3.2 實現 準備環境:Jdk2Eclipse indigoMysql.2 創建服務端: 創建客戶端:1.3.3 小結使用socket傳輸數據需要程序員關注如何解析數據流。設想,如果可以面向對象開發,直接傳輸java對象,減輕程序員開發的復雜度。1.4 Java開發webserviceJAVA 中共有三種WebService 規范,分別是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。1.4.1 Jaxws(掌握)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版本。Jaxws開發的webservice傳輸soap協議。1.4.2 JAXM&SAAJ(了解)JAXM(JAVA API For XML Message)主要定義了包含了發送和接收消息所需的API,SAAJ(SOAP With Attachment API For Java,JSR 67)是與JAXM 搭配使用的API,為構建SOAP 包和解析SOAP 包提供了重要的支持,支持附件傳輸等,JAXM&SAAJ 與JAX-WS 都是基于SOAP 的Web 服務,相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細節,編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細節,更加面向對象,實現起來你基本上不需要關心SOAP 的任何細節JAXM&SAAJ 暴漏了SOAP更多的底層細節,編碼比較麻煩,JAXM&SAAJ通常不使用。1.4.3 JAX-RS(掌握)JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規范,由于推出的較晚,該規范(JSR 311,目前JAX-RS 的版本為1.0)并未隨JDK1.6 一起發行。Rest定義參考:理解RESTful架構.docx需要大家重視,當前比較流行,因為jax-RS可以發布 rest風格webservice,因為rest的webservice不采用soap傳輸,直接采用http傳輸,可以返回xml或json,比較輕量。1.5 Jaxws實現天氣查詢支持java面向對象開發。1.5.1 服務端定義java接口,提供天所查詢方法。 SEI編寫SEI(Service Endpoint Interface),SEI在webservice中稱為portType,在java中稱為接口public interface WeatherInterface /根據 城市名稱查詢天氣信息public String queryWeather(String cityName); SEI實現類 發布webservice服務錯誤:發布服務,如果服務端口已被暫用報錯: 驗證webservice服務是否發布成功在webservice的地址后邊添加?wsdl,查詢webservice的使用說明書內容是否完整,如果wsdl內容完整,表示webservice發布成功。閱讀 wsdl方法:Wsdl是xml格式文檔。從下往上讀。找到service:里邊有port,Binding最終通過binding找到portTypeportType有方法,調用webservice就是調用porttype的方法。最終找到porttype,其中有方法,說明 wsdl文檔基本上完整。必須存在調用服務類及方法。1.5.2 客戶端支持面向對象開發。客戶端功能調用webservice,先知道webservice地址:一般情況下,只要知道 wsdl的地址,就可以知道 webservice地址。天氣查詢服務地址::12345/weather?wsdl 閱讀wsdl找到service(服務視圖)通過binding找到portType(服務端點) 使用wsimport生成webservice的客戶端調用代碼Wsimport:是jdk提供的一個工具,作用是根據webservice的wsdl地址生成客戶端調用代碼。單獨創建一個工程wsimport存放生成代碼.通過cmd進入工程wsimport目錄。生成代碼:默認生成的代碼所在包名,是wsdl中命名空間的倒序。可以通過wsimport p指定包名。詳細參見筆記。 將生成 的代碼拷貝到客戶端工程中編寫客戶端程序:2 Webservice與socket的區別(重點理解)Socket:是一種傳輸層的協議。常用tcp、udp。Socket是操作系統 提供的一套網絡接口,不同的編程語言都有實現 。Socket是跨平臺的。傳輸數據時需要程序員自己解析數據流。優點 :傳輸速度很快。應用場景:如果要考慮傳輸速度,優先使用SocketWebservice使用soap協議:基于http的應用層協議,http也是應用層協議,基于socket傳輸數據。http或soap都是跨平臺的。soap在http協議的基礎上,一個基于XML的協議。不同:都是底層的通信協議,請求包的格式不同而已,soap包是XML格式,http純文本格式。Jaxws開發Webservice,傳輸數據庫是面向對象方式,不用程序員自己解析數據流。Webservice如何傳輸數據:Java對象 依據XSD(webservice數據類型標準)將java對象進行序列化成soap協議Java對象客戶端服務端因為webservice要經過兩次序列化,傳輸速度不快。缺點:傳輸速度慢。優點:面向對象 開發,soap協議是一個標準協議,方便進行跨平臺、跨公司進行接口開發。應用場景:不考慮傳輸速度前提下,根據soap標準協議,方便進行接口定義。3 什么是webserviceweb 服務+跨平臺+遠程調用+soap協議傳輸數據3.1 定義Webservice即web 服務,是一種跨平臺的遠程調用技術,基于http的soap協議傳輸數據,也可以直接使用http傳輸數據。l Web service 即web服務,它是一種跨編程語言和跨操作系統平臺的遠程調用技術即跨平臺遠程調用技術。l 采用標準SOAP(Simple Object Access Protocol) 協議傳輸,soap屬于w3c標準。Soap協議是基于http的應用層協議,soap協議傳輸是xml數據。l 采用wsdl作為描述語言即webservice使用說明書,wsdl屬w3c標準。l xml是webservice的跨平臺的基礎,XML主要的優點在于它既與平臺無關,又與廠商無關。l XSD,W3C為webservice制定了一套傳輸數據類型,使用xml進行描述,即XSD(XML Schema Datatypes),任何編程語言寫的webservice接口在發送數據時都要轉換成webservice標準的XSD發送。當前非SOAP協議的webService以輕量為首要目標,比如rest webservice也是webservice的一種方式。3.2 webService三要素3.2.1 soapsoap協議是webservice是傳輸協議,即簡單對象訪問協議。Soap協議是xml格式,理解為基于http傳輸xml數據。Soap=http+xml3.2.2 wsdlwsdl是webservice的使用說明書。根據wsdl去如何調用webservice。從下往上讀,找到service服務視圖,通過binding找到portType(服務類)。3.2.3 UDDI(了解)UDDI是一個目錄服務,存儲了全球的webservice地址。UDDI旨在將全球的webservcie資源進行共享,促進全球經濟合作。3.3 Webservice應用場景單點登陸,將登陸驗證接口暴漏出來,可以 以webservice的接口來暴漏。統一來記錄用戶信息3.3.1 用于分布式應用集成,實現軟件重用http、soap系統B系統A系統A和系統B可以通過單點登陸系統進行用戶身份認證。單點登陸系統:將用戶登陸功能抽取出來,組成一個單獨系統,達到軟件重用的目標。用戶信息可以在單點登陸系統一處存儲,系統A和系統B不用記錄用戶信息,方便有效進行系統集成。3.3.2 建議不用webservice同構程序間通信可以不用webservice,前提是多個同構程序是相同的公司開發的。比如:一個公司作了兩個程序,都 是java,采用java提供一個遠程調用技術,RMI。RMI 指的是遠程方法調用 (Remote Method Invocation)。RMI基于socket傳輸數據,支持面向對象,要比soap協議傳輸快。SocketRMIsoap3.3.3 建議使用webservicel 公開接口:在互聯網發布服務接口,不考慮客戶端的類型,使用webservice發布服務。因為webservice基于soap協議(w3c標準協議),所以使用soap發布服務。l 調用webservice服務端由于webservice服務端已確定,作為客戶端別無選擇。3.4 Webservice優缺點3.4.1 優點:1 、采用xml支持跨平臺遠程調用。2、基于http的soap協議,可跨越防火墻。(因為SOAP一般使用HTTP協議,而服務器的這個協議一般都是開放的,而且是可以穿過防火墻的)3、支持面向對象開發。4、有利于軟件和數據重用,實現松耦合。3.4.2 缺點:1、 由于soap是基于xml傳輸,本身使用xml傳輸會傳輸一些無關的東西從而效率不高,隨著soap協議的完善,soap協議增加了許多內容,這樣就導致了使用soap協議去完成簡單的數據傳輸的效率不高。如果直接用http傳輸自定義數據內容比webservice開發更快捷,例如第三方支付公司的支持接口。3.5 小結Webservice是基于http發布web 服務,可以采用soap協議作為傳輸數據格式,也可以直接使用http傳輸數據,比如rest方式。3.6 再談socket和webservice應用場景Socket:優點:傳輸速度快缺點:需要手動解析數據流,如果用socket傳輸數據需要接口雙方定義接口協議格式(傳什么格式xml,傳什么json?),自定義協議,不方便進行接口開發。場景:要考慮傳輸速度,優先使用socket,但是需要自定義協議(接口雙方定義一個傳輸的數據格式)。Socket開發:注意:socket服務可持續性,高并發性。Webservice:優點:采用標準soap協議,接口雙方只要遵循標準協議開發使用接口。通過wsdl知道接口內容。方便進行接口開發。缺點:傳輸速度慢。場景:公開接口,在不考慮客戶端類型或傳輸性能,接口面向整個互聯網,優先考慮webservice。Webservice性能差的原因:如果傳輸soap經過兩次對象序列化,webservice的性能依賴中間件的性能。4 wsdl4.1 定義WSDL 指網絡服務描述語言(Web Services Description Language)。WSDL是一種使用 XML 編寫的文檔。這種文檔可描述某個 Web service。它可規定服務的位置,以及此服務提供的操作(或方法)。WSDL 是一種 XML 文檔WSDL 用于描述網絡服務WSDL 也可用于定位網絡服務通過wsdl知道webservice如何調用。4.2 說明書結構從下往上讀: 服務視圖,webservice的服務結點,它包括了服務端點 為每個服務端點定義消息格式和協議細節 服務端點,描述 web service可被執行的操作方法,以及相關的消息,通過binding指向portType 定義一個操作(方法)的數據參數(可有多個參數) 定義 web service 使用的全部數據類型4.3 公網天氣查詢開發只需要開發查詢公網天氣客戶端4.3.1 閱讀 wsdlService服務視圖:portType服務端點:4.3.2 使用wsimport生成客戶端調用代碼需要知道wsdl的地址。Wsimport不支持soap1.2的客戶端代碼生成。4.3.3 將生成代碼拷貝到工程中,開發客戶端使用客戶端生成代碼調用服務端:4.3.4 小結使用客戶端生成的代碼調用服務端,缺點:將webservice的地址封裝在生成代碼中,如果將來webservice地址改變,需要重新生成,修改客戶端調用代碼。不方便系統維護。5 上午課程回顧什么是webservice?Webservice即web服務,基于http的soap 協議傳輸,也可以只基于http傳輸數據。什么是Wsdl?Wsdl就是網絡服務的描述語言,即webservice的使用說明書。從下往上讀:先找到service服務視圖再通過binding找到portType找到portType中的服務方法Jaxws開發webservice步驟:服務端開發:定義SEI(service endpoint interface)服務端點,即portType,在java中是接口定義SEI的實現類,類上邊使用webservice注解標記它是一個webservice服務類。發布服務:/第一個參數:webservice的地址/第二個參數:使用webService標記的服務對象Endpoint.publish(:12345/weather, new WeatherInterfaceImpl();客戶端開發:第一種方法:使用客戶端生成代碼調用webservice。第一步:Wsimport根據 wsdl生成客戶端調用代碼第二步:將生成的代碼拷貝到工程中編寫客戶端代碼1 創建Service服務視圖2 通過服務視圖得到portType3 調用portType方法此方法缺點:將webservice的地址在生成代碼寫死 了,如果webservice地址變更需要重新生成代碼。系統維護不方便。6 客戶端開發第二種方法Jaxws標準方法:6.1 使用jdk的service類調用webservice。6.2 使用jaxws標準方法調用公網天氣查詢:6.3 小結使用jaxws標準方法調用webservice可以指定webservice地調用地址,比通過生成代碼調用webservice要靈活!7 soap7.1 定義soap,簡單對象訪問協議,基于http傳輸xml數據,soap協議體是xml格式。SOAP 是一種網絡通信協議SOAP即Simple Object Access Protocol簡易對象訪問協議SOAP 用于跨平臺應用程序之間的通信SOAP 被設計用來通過因特網(http)進行通信SOAP HTTP+XML,其實就是通過HTTP發xml數據SOAP 很簡單并可擴展支持面向對象SOAP 允許您跨越防火墻SOAP 將被作為 W3C 標準來發展7.2 使用TCP/IP Monitor監視Soap協議7.2.1 TCP/IP Monitor配置TCP/IP Monitor:是eclipse自帶的一個工具,通過代理的方法監視tcp協議內容。通過TCP/IP Monitor監視soap協議內容。TCP/IP Monitor代理,將客戶端請求轉發給服務端Webservice服務端Webservice客戶端TCP/IP Monitor配置:7.2.2 測試:編寫webservice客戶端,向代理端口中發送數據。地址::54321/weather?wsdl客戶端請求的soap協議內容:POST /weather HTTP/1.1Accept: text/xml, multipart/relatedContent-Type: text/xml; charset=utf-8SOAPAction: /WeatherInterfaceImpl/queryWeatherRequestUser-Agent: JAX-WS RI 2.2.4-b01Host: :54321Connection: keep-aliveContent-Length: 226Soap協議體內容:Xml格式。鄭州響應內容:HTTP/1.1 200 OKTransfer-encoding: chunkedContent-type: text/xml; charset=utf-8Date: Tue, 30 Dec 2014 06:40:50 GMT晴7.2.3 Soap協議體內容必需有 Envelope 元素,此元素將整個 XML 文檔標識為一條 SOAP 消息可選的 Header 元素,包含頭部信息必需有Body 元素,包含所有的調用和響應信息 可選的 Fault 元素,提供有關在處理此消息所發生錯誤的信息 . . . . . . Soap協議常用1.1和1.2兩個版本。7.3 通過http發送soap協議體(xml)7.3.1 思路 模擬一個http的客戶端(相當于一個瀏覽器),客戶端通過程序實現,向webservice的服務端發送soap協議(xml)。http客戶端意義(掌握):在企業開發中,很多都 是http接口,需要寫程序模擬http請求,請求數據解析數據。7.3.2 實現/開啟 一個http鏈接/webservice地址URL url = new URL(:12345/weather);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();/設置post請求,post是大寫httpURLConnection.setRequestMethod(POST);/Content-Type: text/xml; charset=utf-8httpURLConnection.setRequestProperty(Content-Type, text/xml; charset=utf-8);/設置請求和響應httpURLConnection.setDoInput(true);httpURLConnection.setDoOutput(true);String requestString = requestString(鄭州);/發送soap協議httpURLConnection.getOutputStream().write(requestString.getBytes();/接收響應內容InputStream inputStream = httpURLConnection.getInputStream();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();int len=-1;byte b = new byte1024;/將inputStream內容寫到byteArrayOutputStreamwhile(len= inputStream.read(b, 0, 1024)!=-1)byteArrayOutputStream.write(b, 0, len);/獲取響應內容 String responseString = byteArrayOutputStream.toString();System.out.println(responseString);/解析響應的xml數據。/.inputStream.close();byteArrayOutputStream.close();7.3.3 課后作業上網查找 httpclient的使用方法:/Httpclient就是模擬http的請求,在企業開發中通過httpclient向http服務端請求,獲取接口內容。7.3.4 Soap1.2協議測試如何將service類發布soap1.2:在SEI實現類上添加如下注解BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)Soap1.2要發布,需要下載擴展包:Jaxws實現soap1.2需要加入jaxws擴展包,從sun下載jaxws-ri-2.2.8,解壓jaxws-ri-2.2.8并將lib下的jar包加載到java工程中。修改service代碼:Wsdl內容,有soap12前綴:soap1.2請求和響應:請求內容:POST /weather HTTP/1.1Accept: application/soap+xml, multipart/relatedContent-Type: application/soap+xml; charset=utf-8;action=/WeatherInterfaceImpl/queryWeatherRequestUser-Agent: JAX-WS RI 2.2.4-b01Host: :54321Connection: keep-aliveContent-Length: 224鄭州響應內容:HTTP/1.1 200 OKTransfer-encoding: chunkedContent-type: application/soap+xml; charset=utf-8Date: Tue, 30 Dec 2014 07:39:51 GMT晴7.3.5 Soap1.1和soap1.2對比Soap1.1版本:通過http進行post請求。Content-Type: text/xml; charset=utf-8Soap1.1命名空間:/soap/envelope/Soap1.2版本:Post請求Content-Type: application/soap+xml;soap1.2命名空間:/2003/05/soap-envelopesoap1.1的服務端需要soap11客戶端調用soap1.2的服務端soap1.1客戶端和soap1.2客戶端都 可以調用。8 Webservice客戶端開發方法總結8.1 使用客戶端生成代碼方法第一步:使用wsimport或其它工具(比如cxf的wsdl2java)生成客戶端的調用第二步:使用生成代碼調用webservice服務端使用生成的service服務視圖類創建服務視圖對象調用service服務對象的getPortXXX方法得到portType。/創建服務視圖對象WeatherInterfaceImplService weatherInterfaceImplService =new WeatherInterfaceImplService();/通過服務視圖得到portType(接口類型)WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService.getWeatherInterfaceImplPort();/調用webservice方法String result = weatherInterfaceImpl.queryWeather(鄭州);8.2 使用jaxws標準方法(Service類)(推薦使用)第一步:使用wsimport或其它工具(比如cxf的wsdl2java)生成客戶端的調用第二步:使用url、qname、service調用服務端/wsdl的路徑URL wsdlDocumentLocation = new URL(:54321/weather?wsdl);/從wsdl中找到服務視圖/第一個參數:wsdl的命名空間/第二個參數:服務視圖名稱QName serviceName = new QName(/, WeatherInterfaceImplService);/第一步使用Service創建服務視圖Service service =Service.create(wsdlDocumentLocation, serviceName);/從服務視圖得到portType對象/參數:portTypeWeatherInterfaceImpl weatherInterfaceImpl = service.getPort(WeatherInterfaceImpl.class);8.3 模擬http客戶端調用webservice服務(掌握)使用HttpURLConnection或apache的Httpclient模擬http請求,調用webservice。注意:使用此方法不需要生成客戶端調用代碼。9 webservice案例(webservice發送xml)9.1 目標企業
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司微信qq網絡管理制度
- 數字基礎設施建設對農業企業ESG表現的影響研究
- 公司經理辦公會管理制度
- 公司考勤與假期管理制度
- 公司自動化升級管理制度
- 公司營銷部規章管理制度
- 公司裝修設計部管理制度
- 公司車輛乘坐位置管理制度
- 寫字樓開發公司管理制度
- 出租車公司公車管理制度
- 2024年天津市初中地理學業考查試卷
- 太陽能光伏建筑一體化BIPV的研究進展
- 預防心血管疾病的健康生活方式
- 顱骨骨折 課件
- 關節鏡半月板手術室護理查房課件
- 民事訴訟法中英文對照
- 中建地下室鋼結構安裝施工方案
- 心搏呼吸驟停課件
- 綠化工4級操作技能評分表
- 蘇少版 音樂 四年級下冊 《我的家在日喀則》 公開課一等獎課件省賽課獲獎課件
- 鐵道概論PPT完整全套教學課件
評論
0/150
提交評論