Use JDK to develop WebService

1. Development methods of WebService

  When using Java to develop WebService, you can use the following two development methods

    1. Develop with JDK (version 1.6 and above)

    2. Develop using CXF framework (working)

Second, use JDK to develop WebService

2.1. Develop WebService server side

  1. Define an interface, use the @WebService annotation to annotate the interface, and use the @WebMethod annotation to annotate all methods defined in the interface, as follows:

copy code
1  package me.gacl.ws;
 2  
3  import javax.jws.WebMethod;
 4  import javax.jws.WebService;
 5  
6  /** 
7  * @author gacl
 8  * Define SEI(WebService EndPoint Interface(terminal))
 9   */ 
10  // Use the @WebService annotation to annotate the WebServiceI interface 
11  @WebService
 12  public  interface WebServiceI {
 13  
14      // Use the @WebMethod annotation to annotate the methods in the WebServiceI interface 
15      @WebMethod
 16      String sayHello(String name);
 17      
18     @WebMethod
19     String save(String name,String pwd);
20 }
copy code

  2. Write the implementation class of the interface, annotate the implementation class with the @WebService annotation, and implement all the methods defined in the interface, as shown below:

copy code
 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 }
copy code

  3、使用Endpoint(终端)类发布webservice,代码如下:

copy code
 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 }
copy code

  运行WebServicePublish类,就可以将编写好的WebService发布好了,WebService的访问URL是:http://192.168.1.100:8989/WS_Server/Webservice ,如下图所示:

  

  这里我们编写了一个WebServicePublish类来发布WebService,如果是Web项目,那么我们可以使用监听器或者Servlet来发布WebService,如下:

  1、使用ServletContextListener监听器发布WebService

copy code
 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 }
copy code

  将Web应用部署到服务器运行时,在初始化Web应用上下文时,就会发布WebService了。

  接着我们可以使用发布的URL地址访问WebService,如下图所示:

  

  2、使用Servlet发布WebService

copy code
 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 }
copy code

  将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目录,执行"wsimport -keep http://192.168.1.100:8888/WebService?wsdl"生成客户端代码如下图所示:

  

  执行命令的过程中没有出现任何错误,那么代码就生成成功了,刷新一下src目录,就可以看到生成的代码了,如下图所示:

  

  2、 借助生成的代码编写调用WebService对外提供的方法

  wsimport工具帮我们生成了好几个java类,但我们只需要关心WebServiceImplService类和WebServiceImpl接口的使用即可,如下所示:

copy code
 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("The result returned by calling the save method of WebService is: "+ resResult);
 24      }
 25 }
copy code

  When the client calls the WebService method on the server, the result is as follows:

  

  The result returned from the call shows that the client code generated by the wsimport tool has successfully called the method in the WebService. The above is the relevant content of using JDK to develop WebService.

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326657403&siteId=291194637