1. 程式人生 > >開發web service的介面實現方法

開發web service的介面實現方法

一、WebService的開發手段

  使用Java開發WebService時可以使用以下兩種開發手段

    1、 使用JDK開發(1.6及以上版本)

    2、使用CXF框架開發(工作中)

二、使用JDK開發WebService

2.1、開發WebService伺服器端

  1、定義一個interface,使用@WebService註解標註介面,使用@WebMethod註解標註介面中定義的所有方法,如下所示:

複製程式碼
 1 package me.gacl.ws;
 2 
 3 import javax.jws.WebMethod;
 4 import javax.jws.WebService;
5 6 /** 7 * @author gacl 8 * 定義SEI(WebService EndPoint Interface(終端)) 9 */ 10 //使用@WebService註解標註WebServiceI介面 11 @WebService 12 public interface WebServiceI { 13 14 //使用@WebMethod註解標註WebServiceI介面中的方法 15 @WebMethod 16 String sayHello(String name); 17 18 @WebMethod 19 String save(String name,String pwd);
20 }
複製程式碼

  2、編寫interface的實現類,使用@WebService註解標註實現類,實現介面中定義的所有方法,如下所示:

複製程式碼
 1 package me.gacl.ws;
 2 
 3 import javax.jws.WebService;
 4 
 5 /**
 6  * @author gacl
 7  * SEI的具體實現
 8  */
 9 //使用@WebService註解標註WebServiceI介面的實現類WebServiceImpl
10 @WebService
11 public class WebServiceImpl implements WebServiceI {
12 13 @Override 14 public String sayHello(String name) { 15 System.out.println("WebService sayHello "+name); 16 return "sayHello "+name; 17 } 18 19 @Override 20 public String save(String name, String pwd) { 21 System.out.println("WebService save "+name+", "+pwd); 22 return "save Success"; 23 } 24 }
複製程式碼

  3、使用Endpoint(終端)類釋出webservice,程式碼如下:

複製程式碼
 1 package me.gacl.ws.test;
 2 
 3 import javax.xml.ws.Endpoint;
 4 
 5 import me.gacl.ws.WebServiceImpl;
 6 
 7 /**
 8  * @author gacl
 9  *
10  * 釋出Web Service
11  */
12 public class WebServicePublish {
13 
14     public static void main(String[] args) {
15         //定義WebService的釋出地址,這個地址就是提供給外界訪問Webervice的URL地址,URL地址格式為:http://ip:埠號/xxxx
16         //String address = "http://192.168.1.100:8989/";這個WebService釋出地址的寫法是合法的
17         //String address = "http://192.168.1.100:8989/Webservice";這個WebService釋出地址的是合法的
18         String address = "http://192.168.1.100:8989/WS_Server/Webservice";
19         //使用Endpoint類提供的publish方法釋出WebService,釋出時要保證使用的埠號沒有被其他應用程式佔用
20         Endpoint.publish(address , new WebServiceImpl());
21         System.out.println("釋出webservice成功!");
22     }
23 }
複製程式碼

  執行WebServicePublish類,就可以將編寫好的WebService釋出好了,WebService的訪問URL是:http://192.168.1.100:8989/WS_Server/Webservice ,如下圖所示:

  

  這裡我們編寫了一個WebServicePublish類來發布WebService,如果是Web專案,那麼我們可以使用監聽器或者Servlet來發布WebService,如下:

  1、使用ServletContextListener監聽器釋出WebService

複製程式碼
 1 package me.gacl.listener;
 2 
 3 import javax.servlet.ServletContextEvent;
 4 import javax.servlet.ServletContextListener;
 5 import javax.servlet.annotation.WebListener;
 6 import javax.xml.ws.Endpoint;
 7 import me.gacl.ws.WebServiceImpl;
 8 
 9 /**
10  * @author gacl
11  * 用於釋出WebService的監聽器
12  */
13 //使用Servlet3.0提供的@WebListener註解將實現了ServletContextListener介面的WebServicePublishListener類標註為一個Listener
14 @WebListener
15 public class WebServicePublishListener implements ServletContextListener {
16 
17     @Override
18     public void contextDestroyed(ServletContextEvent sce) {
19 
20     }
21 
22     @Override
23     public void contextInitialized(ServletContextEvent sce) {
24         //WebService的釋出地址
25         String address = "http://192.168.1.100:8080/WS_Server/WebService";
26         //釋出WebService,WebServiceImpl類是WebServie介面的具體實現類
27         Endpoint.publish(address , new WebServiceImpl());
28         System.out.println("使用WebServicePublishListener釋出webservice成功!");
29     }
30 }
複製程式碼

  將Web應用部署到伺服器執行時,在初始化Web應用上下文時,就會發布WebService了。

  接著我們可以使用釋出的URL地址訪問WebService,如下圖所示:

  

  2、使用Servlet釋出WebService

複製程式碼
 1 package me.gacl.web.controller;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.xml.ws.Endpoint;
 7 import me.gacl.ws.WebServiceImpl;
 8 
 9 /**
10  * @author gacl
11  * 用於釋出WebService的Servlet
12  */
13 //使用Servlet3.0提供的@WebServlet註解將繼承HttpServlet類的普通Java類標註為一個Servlet
14 //將value屬性設定為空字串,這樣WebServicePublishServlet就不提供對外訪問的路徑
15 //loadOnStartup屬性設定WebServicePublishServlet的初始化時機
16 @WebServlet(value="",loadOnStartup=0)
17 public class WebServicePublishServlet extends HttpServlet {
18 
19     /* (non-Javadoc)
20      * @see javax.servlet.GenericServlet#init()
21      * 在WebServicePublishServlet初始化時釋出WebService
22      */
23     public void init() throws ServletException {
24         //WebService的釋出地址
25         String address = "http://192.168.1.100:8888/WebService";
26         //釋出WebService,WebServiceImpl類是WebServie介面的具體實現類
27         Endpoint.publish(address , new WebServiceImpl());
28         System.out.println("使用WebServicePublishServlet釋出webservice成功!");
29     }
30 }
複製程式碼

  將Web應用部署到伺服器執行時,在初始化WebServicePublishServlet時,就會發布WebService了。如下圖所示:

  

  接著我們可以使用釋出的URL地址訪問WebService,如下圖所示:

  

  關於釋出WebService主要就是通過javax.xml.ws.Endpoint類提供的靜態方法publish進行釋出,如果是普通的java專案,那麼可以專門寫一個類用於釋出WebService,如果是Web專案,那麼可以使用ServletContextListener或者Servlet進行釋出。

2.2、開發WebService客戶端

  1、藉助jdk的wsimort.exe工具生成客戶端程式碼,wsimort.exe工具位於Jdk的bin目錄下,如下圖所示:

  

  執行命令:wsimport -keep url(url為wsdl檔案的路徑)生成客戶端程式碼。

  建立一個WebService客戶端測試專案,如下圖所示:

  

  

  執行命令的過程中沒有出現任何錯誤,那麼程式碼就生成成功了,重新整理一下src目錄,就可以看到生成的程式碼了,如下圖所示:

  

  2、 藉助生成的程式碼編寫呼叫WebService對外提供的方法

  wsimport工具幫我們生成了好幾個java類,但我們只需要關心WebServiceImplService類和WebServiceImpl介面的使用即可,如下所示:

複製程式碼
 1 package me.gacl.ws.client;
 2 
 3 import me.gacl.ws.WebServiceImpl;
 4 import me.gacl.ws.WebServiceImplService;
 5 
 6 /**
 7  * @author gacl
 8  * 呼叫WebService的客戶端
 9  */
10 public class WSClient {
11 
12     public static void main(String[] args) {
13         //建立一個用於產生WebServiceImpl例項的工廠,WebServiceImplService類是wsimport工具生成的
14         WebServiceImplService factory = new WebServiceImplService();
15         //通過工廠生成一個WebServiceImpl例項,WebServiceImpl是wsimport工具生成的
16         WebServiceImpl wsImpl = factory.getWebServiceImplPort();
17         //呼叫WebService的sayHello方法
18         String resResult = wsImpl.sayHello("孤傲蒼狼");
19         System.out.println("呼叫WebService的sayHello方法返回的結果是:"+resResult);
20         System.out.println("---------------------------------------------------");
21         //呼叫WebService的save方法
22         resResult = wsImpl.save("孤傲蒼狼","123");
23         System.out.println("呼叫WebService的save方法返回的結果是:"+resResult);
24     }
25 }
複製程式碼

  客戶端呼叫伺服器端的WebService方法執行結果如下:

  

  從呼叫返回的結果顯示,藉助wsimport工具生成的客戶端程式碼已經成功呼叫到了WebService中的方法。以上就是使用JDK開發WebService的相關內容。