1. 程式人生 > >基於JAVA +SSM框架配置WebService服務

基於JAVA +SSM框架配置WebService服務

 參考連結:https://blog.csdn.net/hu_shengyang/article/details/38384597

WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。所謂遠端呼叫,就是一臺計算機a上的一個程式可以呼叫到另外一臺計算機b上的一個物件的方法,譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉賬呼叫的轉賬方法的程式碼其實是跑在銀行伺服器上。再比如淘寶網,百度等把自己的系統服務以webservice服務的形式暴露出來,讓第三方網站和程式可以呼叫這些服務功能,這樣擴充套件了自己系統的市場佔有率,就是所謂的SOA應用。

    WebService就是一個應用程式向外界暴露出一個能通過Web進行呼叫的API,也就是說能用程式設計的方法通過Web來呼叫這個應用程式。我們把呼叫這個WebService的應用程式叫做客戶端,而把提供這個WebService的應用程式叫做服務端。從深層次看,WebService是建立可互操作的分散式應用程式的新平臺,是一個平臺,是一套標準。

為什麼用CXF來實現webService:

1.      Java的webService實現本身就是一個很耗效能的實現方案(xml與java物件之間在服務端以及客戶端的互轉比較消耗效能)

2.      目前java主流的webService應用以CXF、AXIS2為主;

3.      通過網路渠道的瞭解,目前CXF的效率要比AXIS2高出至少50%;

4.      另外有一個webService的工具metro的效率比CXF高出10%;

5.      CXF的實現資料網上可以隨便找出一大堆,metro的資料相對少一些;

6.      CXF在java應用實現中已經很成熟,企業更傾向於用這樣一個成熟的解決方案;

基於以上原因,我選擇CXF來實現webService。

參考資料:

Java Web 服務: CXF 效能比較----CXF 與最新版本的 Axis2 和 Metro 之間的效能對比

一   以annotation註解方式實現釋出webService應用

1、  基礎環境

新建java web工程cxf之後,下載cxf工具包。解壓CXF之後,把cxf工具包lib下的jar包全部放到工程的lib下。

此處用到的cxf工具包版本為:apache-cxf-2.7.12

下載地址:

2、  編寫服務介面

  1. package com.hsy.server;  
  2. import java.util.List;  
  3. import javax.jws.WebParam;  
  4. import javax.jws.WebService;  
  5. import com.hsy.pojo.User;  
  6. @WebService
  7. publicinterface HelloWorld {  
  8.     String sayHi(@WebParam(name="text")String text);  
  9.     String sayHiToUser(User user);  
  10.     String[] SayHiToUserList(List<User> userList);  
  11. }  


3、  服務介面實現

  1. package com.hsy.server;  
  2. import java.util.LinkedHashMap;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5. import javax.jws.WebParam;  
  6. import javax.jws.WebService;  
  7. import com.hsy.pojo.User;  
  8. @WebService(endpointInterface="com.hsy.server.HelloWorld",serviceName="HelloWorld")  
  9. publicclass HelloWorldImpl implements HelloWorld {  
  10.     Map<Integer, User> users = new LinkedHashMap<Integer, User>();  
  11.     public String sayHi(@WebParam(name = "text") String text) {  
  12.         return"Hello,"+text;  
  13.     }  
  14.     public String sayHiToUser(User user) {  
  15.         users.put(users.size()+1, user);  
  16.         return"Hello,"+user.getName();  
  17.     }  
  18.     public String[] SayHiToUserList(List<User> userList) {  
  19.         String[] result = new String[userList.size()];  
  20.         int i = 0;  
  21.         for(User u:userList){  
  22.             result[i] = "Hello " + u.getName();  
  23.             i++;  
  24.         }  
  25.         return result;  
  26.     }  
  27.     /** 
  28.      * @param args 
  29.      */
  30.     publicstaticvoid main(String[] args) {  
  31.         // TODO Auto-generated method stub
  32.     }  
  33. }  

4、  釋出服務app

  1. package com.hsy.server;  
  2. import javax.xml.ws.Endpoint;  
  3. publicclass webServiceApp {  
  4.     /** 
  5.      * @param args 
  6.      */
  7.     publicstaticvoid main(String[] args) {  
  8.          System.out.println("web service start");  
  9.          HelloWorldImpl implementor = new HelloWorldImpl();  
  10.          String address = "http://localhost:8080/helloWorld";  
  11.          Endpoint.publish(address, implementor);  
  12.          System.out.println("web service started");  
  13.     }  
  14. }  



說明webService服務釋出成功。

5、  客戶端訪問服務

  1. package com.hsy.client;  
  2. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  3. import com.hsy.pojo.User;  
  4. import com.hsy.server.HelloWorld;  
  5. publicclass HelloWorldClient {  
  6.     /** 
  7.      * @param args 
  8.      */
  9.     publicstaticvoid main(String[] args) {  
  10.         //首先右鍵run as 執行com.hsy.server.webServiceApp類,然後再執行這段客戶端程式碼
  11.         JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();  
  12.         jwpfb.setServiceClass(HelloWorld.class);  
  13.         jwpfb.setAddress("http://localhost:8080/helloWorld");  
  14.         HelloWorld hw = (HelloWorld) jwpfb.create();  
  15.         User user = new User();  
  16.         user.setName("馬克思");  
  17.         user.setDescription("懷念馬克思");  
  18.         System.out.println(hw.sayHiToUser(user));  
  19.     }  
  20. }  


右鍵 run as 選擇java application,控制檯列印如圖:


Ok,客戶端訪問也成功了。

6、  附:

  1. package com.hsy.pojo;  
  2. import java.io.Serializable;  
  3. @SuppressWarnings("serial")  
  4. publicclass User implements Serializable {  
  5.     private String id;  
  6.     private String name;  
  7.     private String age;  
  8.     private String description;  
  9.     public User() {  
  10.         super();  
  11.     }  
  12.     public String getId() {  
  13.         return id;  
  14.     }  
  15.     publicvoid setId(String id) {  
  16.         this.id = id;  
  17.     }  
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.     publicvoid setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.     public String getAge() {  
  25.         return age;  
  26.     }  
  27.     publicvoid setAge(String age) {  
  28.         this.age = age;  
  29.     }  
  30.     public String getDescription() {  
  31.         return description;  
  32.     }  
  33.     publicvoid setDescription(String description) {  
  34.         this.description = description;  
  35.     }  
  36. }  
注意:專案在釋出的時候,localhost改成伺服器的地址,否則只能自己訪問!