史上最詳-實現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源碼,大家可以叉下來學習一下,大神勿噴,請多指教。
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※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 入門教程