當前位置:
首頁 > 知識 > 史上最詳-實現webservice教程

史上最詳-實現webservice教程

史上最詳CXF-用SpringMVC Maven的實現web服務教程

雖知道web服務,工作兩年一直沒使用過,最近不忙趁機研究了下,實現了簡單的服務端及客戶端調用。鑒於慕課網沒有web服務的教程,大多又都是學生,就在這裡跟大家分享下,內容比較詳細。大神請忽略,如有錯誤之處,敬請指點。

第一步,下載cxf及配置環境變數。

源分配為源碼版,需要編譯後使用,鄙人小白,沒有搞過這種東西。我們下載二進位分發(可執行版),下載後解壓即可。

作為java的常用工具,最好在環境變數里配置一下,另CXF-3.1.8需要JDK1.6以上

在系統-變數里的路徑中添加(注意兩個變數之間要有分號)

在cmd中輸入wsdl2java -help輸出一大堆

證明配置成功

第二步,普通項目,java-api實現webservice

1.介面

@網路服務公共介面MyWebService { int add(int a,int b); int minus(int a,int b);}

2.實現類

3.發布

公共類MyServer { public static void main(String args []){ String address =「http:// localhost:8888 / ms」; Endpoint.publish(address,new MyWebserviceImpl()); }}

錯誤信息:從匯流排找不到任何註冊的HttpDestinationFactory

解決辦法:添加cxf的jetty支持

org.apache.cxf CXF-RT-傳輸-HTTP-碼頭 3.1.8

這時,可以打開瀏覽器並輸入HTTP://本地主機:8888 / MS WSDL,可以看到暴漏的WSDL

4.客戶端調用

公共類MyClient { public static void main(String args []){ 嘗試{ URL url = new URL(「http:// localhost:8888 / ms?wsdl」); //命名空間及名稱 QName qName = new QName; Service service = Service.create(url,qName); MyWebService myWebservice = service.getPort(MyWebService.class); System.out.println(myWebservice.add(2,3)); System.out.println(myWebservice.minus(2,3)); } catch(MalformedURLException e){ e.printStackTrace(); } }}

控制台輸出正確結果5和-1

第三部分,spring spring-mvc cxf結合

1.創建項目並添加spring spring-mvc cxf的依賴

4.3.3.RELEASE 的junit 的junit 4.12 測試 org.springframework 彈簧芯 $ org.springframework 彈簧豆 $ org.springframework 彈簧上下文 $ org.springframework 彈簧上下文支持 $ org.springframework 彈簧測試 $ org.springframework 彈簧的web $ org.springframework 彈簧webmvc $ org.apache.cxf CXF-RT-傳輸-HTTP 3.1.8 org.apache.cxf CXF-RT-傳輸-HTTP 3.1.8 org.apache.cxf CXF-RT-前端-JAXWS 3.1.8 org.apache.cxf CXF-RT-傳輸-HTTP-碼頭 3.1.8

2.webservice服務端介面及實現類

@網路服務公共介面MyWebService { int add(@WebParam(name =「firstA」)int a,@WebParam(name =「firstB」)int b); int minus(@WebParam(name =「secondA」)int a,@WebParam(name =「secondB」)int b);}@WebService(endpointInterface =「com.lida.dream_webservice.server.MyWebService」)公共類MyWebserviceImpl實現MyWebService { @覆蓋 public int add(int a,int b){ 的System.out.println(A + 「+」 + B + 「=」 +(A + B)); 返回一個+ b; } @覆蓋 public int minus(int a,int b){ 的System.out.println(A + 「 - 」 + B + 「=」 +(AB)); 返回ab }}

3.配置彈簧的web.xml及彈簧webservice.xml

4.配置的web.xml

這裡一定要注意spring-mvc與cxf使用不同的容器載入,否則會報錯:

springmvc是不需要ContextLoaderListener來載入管理bean的,DispatcherServlet它有自己的容器,主要用於載入除控制器層的bean,DispatcherServlet屬於子容器。

CXF需要的ContextLoaderListener,CXF需要的ContextLoaderListener是春季管理的bean的父容器,一般用於載入非控制器層的豆。

子容器可以訪問父容器中的豆,而父容器不能訪問子容器。

可以把基本網頁請求的控制器等這些豆放到彈簧的web.xml中,讓DispatcherServlet的去載入管理彈簧-web.xml中。

把web服務相關配置到另外一個XML文件中,比如彈簧webservice.xml,

讓的ContextLoaderListener去載入管理彈簧webservice.xml和其他彈簧文件()彈簧mysql.xml,彈簧jpa.xml等),

這樣,就互不影響了。

而且:ContextLoaderListene默認會載入的applicationContext.xml這個名字的文件,如果定義為彈簧的context.xml會報錯,重命 需要的context-param

此時配置Tomcat的啟動項目後便暴露了WSDL,在瀏覽器訪問的http://本地主機:8080 /伺服器/網路發布WSDL

4.調用

以上兩種實現web服務的方法僅適用於自己有java的web服務的的服務端,自己調用。而往往服務端可能由別的語言實現,或者服務端並非我們自己實現,我們沒有服務端介面,我們只能獲得暴漏的WSDL,並進行調用,這就需要使用的WSDL2Java生成該WSDL的java的端的客戶並調用了

第四步:WSDL2Java的客戶生成代碼端的並調用

打開CMD(因為我們配置了環境變數,所以可以直接使用wedl2java命令)

輸入

wsdl2java -encoding utf-8 -d F:IdeaProjectsdream-webservicewsdl2javatest

h t t p : / / l o c a l h o s t :8 0 8 0 / s e r v e r / w e b - p u b l i s h ? w s d l

遍在wsdl2javatest生成了該WSDL客戶的代碼端的

這時,我們變可以寫客戶端並調用了

附上的git源碼,大家可以叉下來學習一下,大神勿噴,請多指教。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

Java設計模式中單例設計模式
Java 常見內存溢出異常與 代碼實現
技術焦慮症?來這裡找解藥
JAVA入門學習初步總結3 方法類繼承多態等
聊聊Java資料庫開發的 那點事兒

TAG:java學習吧 |

您可能感興趣

TensorFlow Probability 概率編程入門級實操教程
下載 | 最新教程《Artifical Neural Networks》
雷神911最新的6代機重裝系統提示no bootable device.systemstop修改bios教程
TensorFlow簡明教程
Snapseed教程
Excel文本函數search和searchb教程
史上最全的Python數據分析工具:Notebook教程
簡單粗暴的TensorFlow Eager 教程【下載 |】
Arduino+Processing模擬雷達掃描效果教程
【進階篇】Recurrent Group教程
eclipse中配置jdk+tomcat的圖文教程
Python 標準庫之 collections 使用教程
Mac效率神器Alfred系列教程-iTunes Mini Player
國語Redshift for Houdini教程
Tensorflow可視化教程
教程 | 一招教你使用 tf.keras 和 eager execution 解決複雜問題
Web Scraper 入門教程
excel函數left與right的使用教程
Centos下安裝配置WordPress與nginx教程
Python 繪圖庫 Matplotlib 入門教程