谈谈WebService开发-基础篇
??????? 最近经常有些网上的朋友问起WebService的开发,这里就我个人的理解做个简明介绍与总结。该篇主要介绍WebService涉及的一些基础:
WebService的必要性? ? ?? 对于这个能回答以下面两个问题,个人觉得就能理解它的必要性了: ????? 1.什么是WebService; ?????? 顾名思义,WebService就是基于Web的服务,服务器端提供一些资源可以让应用访问;是一个跨语言,跨平台的规范;多个跨平台,跨语言的应用间通信的解决方案; ????? 2.为什么要用WebService; ?????? 试想下以下应用场景 A应用---用java开发,运行在windows平台,List<Address>? getAllAddress(); ??????????????????????????????????????????? B应用---用C语言开发,运行在linux平台,B应用现在要获取A应用的所有的Address信息; ????? 总结:WebService可以解决跨语言,跨平台,远程调用。 Schema规范与Http协议Schema规范是用来约束XML文件的书定格式的,Schema文件是以.xsd作为后缀的,Schema规范中需要掌握以下几点:
Http协议,需要理解以下几点:
重要述语
开发WS的步骤
? ? ? ?开发手段可以采用源生的JDK进行开发,建议1.6以上JDK;当然工作中一般可能会借助其它webservice框架来进行开发,常用的有CXF,AXIS2等;这里先以源生的JDK来进行开发一个简单demo以示步骤:
? ? ? ?1.创建服务器端工程Webservice-jdk-server,并新建接口ISayHello.java,即创建SEI。
package com.devins.ws.server.service; import javax.jws.WebMethod; import javax.jws.WebService; /** * * SEI定义 * */ @WebService public interface ISayHello { @WebMethod public String sayHello(String name); } ? ? ? 2.新建接口实现类: package com.devins.ws.server.service.impl; import javax.jws.WebService; import com.devins.ws.server.service.ISayHello; /** * SEI实现 */ @WebService public class SayHelloImpl implements ISayHello{ @Override public String sayHello(String name) { // TODO Auto-generated method stub System.out.println("Server: Hello! "+name); return "Hello: "+name; } } 以上两步注意点以@WebService注解SEI及SEI实现类,以@WebMethod注解SEI方法;
? ? ? 3.发布服务:
package com.devins.ws.server.publish; import javax.xml.ws.Endpoint; import com.devins.ws.server.service.impl.SayHelloImpl; public class ServicePublishTest { public static void main(String[] args) { String address = "http://132.122.239.74:8089/ws/sayhello"; //利用EndPoint类来进行发布 Endpoint.publish(address,new SayHelloImpl()); System.out.println("WebService服务发布成功!"); } }
server工程结构如下:
完成以上编码,运行发布服务的main方法,此时即可在浏览器中输入?
http://132.122.239.74:8089/ws/sayhello?wsdls 查看wsdl信息,表示服务发布成功。如下图: <img src="http://img.blog.csdn.net/20150506084914075?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9zb25yaWNr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> ? ? ? ? 4.创建客户端工程,通过jdk工具wsimport.exe来生成客户端调用代码,通过命令行进入到客户端工程的src目录,命令如下: ? ? ? ? wsimport ?-keep ?url ? ? 这里的url即服务器端发布的wsdl地址,执行如下: 执行完成后刷新客户端工程,工程生成如下代码: ? ? ? 5.编写客户端调用代码:
package com.devins.ws.client; import com.devins.ws.server.service.impl.SayHelloImpl; import com.devins.ws.server.service.impl.SayHelloImplService; /* * 通过远端wsdl地址生成客户端代码的方式 */ public class ClientTest { public static void main(String[] args) { SayHelloImplService factory = new SayHelloImplService(); SayHelloImpl sayHelloImpl = factory.getSayHelloImplPort(); String result = sayHelloImpl.sayHello("devins"); System.out.println("client :"+result); } }至此,通过JDK实现webservice的开发已经完成,右键运行客户端代码结果如下: 客户端控制台: 服务器端控制台: 通过以上方式实现客户端,我们会发现对于开发编码实现阶段,不方便查看soap消息,即请求消息与响应消息,Eclipse已经帮我们开发人员想到了,Eclipse 提供了监控TCP/IP的工具,进行以下配置步骤:
<service name="SayHelloImplService"> <port name="SayHelloImplPort" binding="tns:SayHelloImplPortBinding"> <soap:address location="http://132.122.239.74:<span style="color:#ff0000;">8080</span>/ws/sayhello" /> </port> </service> 3.根据本地wsdl文档生成客户端代码,这里建了另一个客户端工程Webservice-jdk-client2,命令行进入src目录方法如下图: 其它代码与第一个client工程相同。 4.配置Eclipse TCP/IP监听,配置如下图: 完成以上几步后即可右键运行客户端调用代码,运行后在控制台会同时出现以下TCP/IP监听视窗,如下图: 从上图中可以较方便的看到请求消息与响应消息,便于开发过程中的查看与调试。至此,使用JDK开发webservice的过程已经完成。后续还将逐步深入的介绍有关webservice的知识。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |