WebService学习总结(三)——使用JDK开发WebService

来源:互联网 发布:app源码出售 编辑:程序博客网 时间:2024/05/10 17:56

一、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 @WebService12 public interface WebServiceI {13 14     //使用@WebMethod注解标注WebServiceI接口中的方法15     @WebMethod16     String sayHello(String name);17     18     @WebMethod19     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接口的实现类WebServiceImpl10 @WebService11 public class WebServiceImpl implements WebServiceI {12 13     @Override14     public String sayHello(String name) {15         System.out.println("WebService sayHello "+name);16         return "sayHello "+name;17     }18 19     @Override20     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 Service11  */12 public class WebServicePublish {13 14     public static void main(String[] args) {15         //定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx16         //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 gacl11  * 用于发布WebService的监听器12  */13 //使用Servlet3.0提供的@WebListener注解将实现了ServletContextListener接口的WebServicePublishListener类标注为一个Listener14 @WebListener15 public class WebServicePublishListener implements ServletContextListener {16 17     @Override18     public void contextDestroyed(ServletContextEvent sce) {19 20     }21 22     @Override23     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 gacl11  * 用于发布WebService的Servlet12  */13 //使用Servlet3.0提供的@WebServlet注解将继承HttpServlet类的普通Java类标注为一个Servlet14 //将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初始化时发布WebService22      */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目录,执行"wsimport -keep http://192.168.1.100:8888/WebService?wsdl"生成客户端代码如下图所示:

  

  执行命令的过程中没有出现任何错误,那么代码就生成成功了,刷新一下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的相关内容。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 数据线不是快充怎么办 银行卡压弯了怎么办 信用卡晒弯了怎么办 银行卡晒变形了怎么办 手机壳为有毒怎么办 华为手机经常卡怎么办 华为nova3e卡顿怎么办 华为p8桌面图标不见了怎么办 mate9图片删掉了怎么办 手机信号变成了g怎么办 华为手机保密柜打不开怎么办 华为sd卡受损怎么办 qqsd卡不可用怎么办 荣耀v10玩游戏卡怎么办 荣耀10玩游戏卡怎么办 荣耀10反应慢怎么办 苹果imei码泄露怎么办 imei被改了怎么办 华为打王者卡怎么办 mate7玩王者卡怎么办 华为p8很卡怎么办 洗车机过热保护怎么办 电脑机箱太热怎么办 卷帘门电机坏了怎么办 新空调过热保护怎么办 空调有过热保护怎么办 空调压缩机热保护怎么办 号码被强制停机怎么办 电吹风插头烧了怎么办 电信国外无服务怎么办 手机欠费停机要怎么办 移动怎么办停机保号 网络电视欠费了怎么办 手机空号了怎么办 手机信号变成2g怎么办 移动副卡欠费怎么办 手机变2g怎么办 手机卡变成2g怎么办 网络变成2g怎么办 联通停网了怎么办 乌龟的壳摔裂了怎么办