基於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、 編寫服務介面
- package com.hsy.server;
- import java.util.List;
- import javax.jws.WebParam;
- import javax.jws.WebService;
- import com.hsy.pojo.User;
- @WebService
- publicinterface HelloWorld {
- String sayHi(@WebParam(name="text")String text);
- String sayHiToUser(User user);
- String[] SayHiToUserList(List<User> userList);
- }
3、 服務介面實現
- package com.hsy.server;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import javax.jws.WebParam;
- import javax.jws.WebService;
- import com.hsy.pojo.User;
- @WebService(endpointInterface="com.hsy.server.HelloWorld",serviceName="HelloWorld")
- publicclass HelloWorldImpl implements HelloWorld {
- Map<Integer, User> users = new LinkedHashMap<Integer, User>();
- public String sayHi(@WebParam(name = "text") String text) {
- return"Hello,"+text;
- }
- public String sayHiToUser(User user) {
- users.put(users.size()+1, user);
- return"Hello,"+user.getName();
- }
- public String[] SayHiToUserList(List<User> userList) {
- String[] result = new String[userList.size()];
- int i = 0;
- for(User u:userList){
- result[i] = "Hello " + u.getName();
- i++;
- }
- return result;
- }
- /**
- * @param args
- */
- publicstaticvoid main(String[] args) {
- // TODO Auto-generated method stub
- }
- }
4、 釋出服務app
- package com.hsy.server;
- import javax.xml.ws.Endpoint;
- publicclass webServiceApp {
- /**
- * @param args
- */
- publicstaticvoid main(String[] args) {
- System.out.println("web service start");
- HelloWorldImpl implementor = new HelloWorldImpl();
- String address = "http://localhost:8080/helloWorld";
- Endpoint.publish(address, implementor);
- System.out.println("web service started");
- }
- }
說明webService服務釋出成功。
5、 客戶端訪問服務
- package com.hsy.client;
- import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
- import com.hsy.pojo.User;
- import com.hsy.server.HelloWorld;
- publicclass HelloWorldClient {
- /**
- * @param args
- */
- publicstaticvoid main(String[] args) {
- //首先右鍵run as 執行com.hsy.server.webServiceApp類,然後再執行這段客戶端程式碼
- JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();
- jwpfb.setServiceClass(HelloWorld.class);
- jwpfb.setAddress("http://localhost:8080/helloWorld");
- HelloWorld hw = (HelloWorld) jwpfb.create();
- User user = new User();
- user.setName("馬克思");
- user.setDescription("懷念馬克思");
- System.out.println(hw.sayHiToUser(user));
- }
- }
右鍵 run as 選擇java application,控制檯列印如圖:
Ok,客戶端訪問也成功了。
6、 附:
- package com.hsy.pojo;
- import java.io.Serializable;
- @SuppressWarnings("serial")
- publicclass User implements Serializable {
- private String id;
- private String name;
- private String age;
- private String description;
- public User() {
- super();
- }
- public String getId() {
- return id;
- }
- publicvoid setId(String id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name;
- }
- public String getAge() {
- return age;
- }
- publicvoid setAge(String age) {
- this.age = age;
- }
- public String getDescription() {
- return description;
- }
- publicvoid setDescription(String description) {
- this.description = description;
- }
- }