使用Java開發WebService時可使用如下兩種開發手段java
一、 使用JDK開發(1.6及以上版本)web
二、使用CXF框架開發(工做中)服務器
一、定義一個interface,使用@WebService 註解標註接口,使用@WebMethod註解標註接口中定義的全部方法,以下所示:框架
package me.gacl.ws; import javax.jws.WebMethod; import javax.jws.WebService; /** * @author gacl * 定義SEI(WebService EndPoint Interface(終端)) */ //使用@WebService註解標註WebServiceI接口 @WebService public interface WebServiceI { //使用@WebMethod註解標註WebServiceI接口中的方法 @WebMethod String sayHello(String name); @WebMethod String save(String name,String pwd); }
二、編寫interface的實現類,使用@WebService 註解標註實現類,實現接口中定義的全部方法,以下所示:ide
package me.gacl.ws; import javax.jws.WebService; /** * @author gacl * SEI的具體實現 */ //使用@WebService註解標註WebServiceI接口的實現類WebServiceImpl @WebService public class WebServiceImpl implements WebServiceI { @Override public String sayHello(String name) { System.out.println("WebService sayHello "+name); return "sayHello "+name; } @Override public String save(String name, String pwd) { System.out.println("WebService save "+name+", "+pwd); return "save Success"; } }
三、使用Endpoint(終端)類發佈webservice,代碼以下:工具
package me.gacl.ws.test; import javax.xml.ws.Endpoint; import me.gacl.ws.WebServiceImpl; /** * @author gacl * * 發佈Web Service */ public class WebServicePublish { public static void main(String[] args) { //定義WebService的發佈地址,這個地址就是提供給外界訪問Webervice的URL地址,URL地址格式爲:http://ip:端口號/xxxx //String address = "http://192.168.1.100:8989/";這個WebService發佈地址的寫法是合法的 //String address = "http://192.168.1.100:8989/Webservice";這個WebService發佈地址的是合法的 String address = "http://192.168.1.100:8989/WS_Server/Webservice"; //使用Endpoint類提供的publish方法發佈WebService,發佈時要保證使用的端口號沒有被其餘應用程序佔用 Endpoint.publish(address , new WebServiceImpl()); System.out.println("發佈webservice成功!"); } }
運行WebServicePublish類,就能夠將編寫好的WebService發佈好了,WebService的訪問URL是:http://192.168.1.100:8989/WS_Server/Webservice ,以下圖所示:測試
這裏咱們編寫了一個WebServicePublish類來發布WebService,若是是Web項目,那麼咱們可使用監聽器或者Servlet來發布WebService,以下:url
一、使用ServletContextListener監聽器發佈WebServicespa
package me.gacl.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.xml.ws.Endpoint; import me.gacl.ws.WebServiceImpl; /** * @author gacl * 用於發佈WebService的監聽器 */ //使用Servlet3.0提供的@WebListener註解將實現了ServletContextListener接口的WebServicePublishListener類標註爲一個Listener @WebListener public class WebServicePublishListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent sce) { } @Override public void contextInitialized(ServletContextEvent sce) { //WebService的發佈地址 String address = "http://192.168.1.100:8080/WS_Server/WebService"; //發佈WebService,WebServiceImpl類是WebServie接口的具體實現類 Endpoint.publish(address , new WebServiceImpl()); System.out.println("使用WebServicePublishListener發佈webservice成功!"); } }
將Web應用部署到服務器運行時,在初始化Web應用上下文時,就會發布WebService了。.net
接着咱們可使用發佈的URL地址訪問WebService,以下圖所示:
二、使用Servlet發佈WebService
package me.gacl.web.controller; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.xml.ws.Endpoint; import me.gacl.ws.WebServiceImpl; /** * @author gacl * 用於發佈WebService的Servlet */ //使用Servlet3.0提供的@WebServlet註解將繼承HttpServlet類的普通Java類標註爲一個Servlet //將value屬性設置爲空字符串,這樣WebServicePublishServlet就不提供對外訪問的路徑 //loadOnStartup屬性設置WebServicePublishServlet的初始化時機 @WebServlet(value="",loadOnStartup=0) public class WebServicePublishServlet extends HttpServlet { /* (non-Javadoc) * @see javax.servlet.GenericServlet#init() * 在WebServicePublishServlet初始化時發佈WebService */ public void init() throws ServletException { //WebService的發佈地址 String address = "http://192.168.1.100:8888/WebService"; //發佈WebService,WebServiceImpl類是WebServie接口的具體實現類 Endpoint.publish(address , new WebServiceImpl()); System.out.println("使用WebServicePublishServlet發佈webservice成功!"); } }
將Web應用部署到服務器運行時,在初始化WebServicePublishServlet時,就會發布WebService了。以下圖所示:
接着咱們可使用發佈的URL地址訪問WebService,以下圖所示:
關於發佈WebService主要就是經過javax.xml.ws.Endpoint類提供的靜態方法publish進行發佈,若是是普通的java項目,那麼能夠專門寫一個類用於發佈WebService,若是是Web項目,那麼可使用ServletContextListener或者Servlet進行發佈。
一、藉助jdk的wsimort.exe工具生成客戶端代碼,wsimort.exe工具位於Jdk的bin目錄下,以下圖所示:
執行命令:wsimport -keep url(url爲wsdl文件的路徑)生成客戶端代碼。
建立一個WebService客戶端測試項目,以下圖所示:
打開命令行窗口,切換到src目錄,執行"wsimport -keep http://192.168.1.100:8888/WebService?wsdl"生成客戶端代碼,以下圖所示:
執行命令的過程當中沒有出現任何錯誤,那麼代碼就生成成功了,刷新一下src目錄,就能夠看到生成的代碼了,以下圖所示:
二、 藉助生成的代碼編寫調用WebService對外提供的方法
wsimport工具幫咱們生成了好幾個java類,但咱們只須要關心WebServiceImplService類和WebServiceImpl接口的使用便可,以下所示:
package me.gacl.ws.client; import me.gacl.ws.WebServiceImpl; import me.gacl.ws.WebServiceImplService; /** * @author gacl * 調用WebService的客戶端 */ public class WSClient { public static void main(String[] args) { //建立一個用於產生WebServiceImpl實例的工廠,WebServiceImplService類是wsimport工具生成的 WebServiceImplService factory = new WebServiceImplService(); //經過工廠生成一個WebServiceImpl實例,WebServiceImpl是wsimport工具生成的 WebServiceImpl wsImpl = factory.getWebServiceImplPort(); //調用WebService的sayHello方法 String resResult = wsImpl.sayHello("孤傲蒼狼"); System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult); System.out.println("---------------------------------------------------"); //調用WebService的save方法 resResult = wsImpl.save("孤傲蒼狼","123"); System.out.println("調用WebService的save方法返回的結果是:"+resResult); } }
客戶端調用服務器端的WebService方法運行結果以下:
從調用返回的結果顯示,藉助wsimport工具生成的客戶端代碼已經成功調用到了WebService中的方法。以上就是使用JDK開發WebService的相關內容。