JAVA中使用JDK開發WebService介面,供別人呼叫
一、WebService的開發手段
使用Java開發WebService時可以使用以下兩種開發手段
1、 使用JDK開發(1.6及以上版本)
2、使用CXF框架開發(工作中)
二、使用JDK開發WebService
2.1、開發WebService伺服器端
1、定義一個interface,使用@WebService註解標註介面,使用@WebMethod註解標註介面中定義的所有方法,如下所示:
package me.gacl.ws; import javax.jws.WebMethod; import javax.jws.WebService; /** * @author WangZhen * 定義SEI(WebService EndPoint Interface(終端)) */ //使用@WebService註解標註WebServiceI介面 @WebService public interface WebServiceI { //使用@WebMethod註解標註WebServiceI介面中的方法 @WebMethod String sayHello(String name); @WebMethod String save(String name,String pwd); }
2、編寫interface的實現類,使用@WebService註解標註實現類,實現介面中定義的所有方法,如下所示:
package me.gacl.ws; import javax.jws.WebService; /** * @author WangZhen * 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"; } }
3、使用Endpoint(終端)類釋出webservice,程式碼如下:
package me.gacl.ws.test; import javax.xml.ws.Endpoint; import me.gacl.ws.WebServiceImpl; /** * @author WangZhen * * 釋出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是:
這裡我們編寫了一個WebServicePublish類來發布WebService,如果是Web專案,那麼我們可以使用監聽器或者Servlet來發布WebService,如下:
1、使用ServletContextListener監聽器釋出WebService
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 WangZhen
* 用於釋出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了。
接著我們可以使用釋出的URL地址訪問WebService,如下圖所示:
2、使用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 WangZhen
* 用於釋出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進行釋出。
寄語:
當你不在意別人如何看自己的時候,你才能更專注於你想做的事,而這個時候你會發現你比原來收穫得更多。