2.WebService的开发手段

来源:互联网 发布:connect佳明软件 编辑:程序博客网 时间:2024/05/29 08:10

一、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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 黑色裤子洗红了怎么办 新内衣穿了痒怎么办 灰色针织运动裤洗完发黄怎么办 皮衣买大了一号怎么办 紧身衣破了一个洞怎么办 紧身衣破了一个小洞怎么办 内衣肩带不带调整的怎么办 不正确佩戴胸罩导致下垂怎么办 增肌时期晚上饿怎么办 啤酒和可乐喝了怎么办 脸部毛孔堵塞不出汗怎么办 减肥运动完饿了怎么办 想减肥晚上饿了怎么办 孕妇喝不进去水怎么办 跑步喝多了水怎么办 衣柜门轮子坏了怎么办 穿瑜伽裤下边有缝怎么办 3岁宝宝比较内向怎么办 我想和我同学搞基怎么办 自己做的葡萄酒太甜怎么办 吉米学校想退款怎么办 汽车租赁公司不退押金怎么办 身材不好怎么办健身教练形象照 反祈祷式做不到怎么办 窦性心跳过缓怎么办 四维彩超查出胎儿心脏有问题怎么办 减脂肚子饿了怎么办 做瑜伽腰扭到了怎么办 出了汗怎么办活动反思 农村都是老人和孩子怎么办 瑜伽垫容易出现痕迹怎么办 37岁失业了该怎么办 45岁找什么工作怎么办 华为手机4g网速慢怎么办 解析软件包时出现问题怎么办 一字马不能下去髋摆不正怎么办 练轮瑜伽骆驼式腰疼怎么办 感昌咳嗽老不好怎么办 我感昌一直不好怎么办 腰间盘突出晚上睡觉痛怎么办 天天吃撑了怎么办啊