- 什么是WebService。
从字面上理解,WebService就是基于Web的服务,那么什么又是Web服务呢?我们来看几个例子。
1)360软件相信大家都用过,细心的朋友可能会发现在启动360杀毒时,后台进程中会有一个云查杀服务,这个云查杀服务就是一个Web服务,因为众多的360杀毒客户端都需要它的服务来为客户服务。
2) 云计算是当今最火的一项技术,最著名的当属AWS
(Amazon WebService),用户可以通过调用Amazon的服务,来获取充足的计算资源。
3)我们不论是在使用内部系统还是访问网络时都会看到诸如天气预报、火车票查询、飞机票查询的入口,他们是怎么做的呢?是直接访问气象总局、铁道部或者航空公司的数据库吗?当然不是,这些都是由响应的组织对外发布的服务,第三方系统可以直接调用来获取相关信息。
看了上面的例子,我们稍微总结一下:WebService是一种基于网络的服务,它可以方便的被第三方系统调用,来获取响应的服务(数据)。
WebService的优势。
前面我们已经说过,WebService是基于http的,这也就给它带来的最大的好处-跨平台。例如,用Java对外发布了一个WebService服务,既可以用C#来调用,也可以用C、js等其他方式来调用。当下的信息系统越来越复杂,传统的基于单应用的系统已经不能满足这种复杂度,通常利用WebService来实现各个系统之间的数据交互。
下面我们先来看一个例子
利用jdk发布一个WebService服务
@WebService(serviceName="firstWS",
name="one",
targetNamespace="http://www.zd.com",
portName="portOne")
public class WSTestOne {
@WebMethod(operationName="helloGuy" //修改服务方法名称
)
public
@WebResult(name="returnMsg") //修改返回值名称
String sayHello(
@WebParam(name="yourName") //修改参数名称
String name){
return "hello,"+name+"!";
}
//注意:final方法不能被发布成一个服务
public static void main(String[] args) {
//利用EndPoint发布服务
Endpoint.publish("http://localhost:9999/ws/one", new WSTestOne());
}
}
通过访问这个地址http://localhost:9999/ws/one?wsdl就会得到下面的wsdl说明文档(由于缺少jar包,上面的程序并未运行,下面的wsdl是另一个demo的,格式相同,大家凑合看一下)
到这,我们就成功的发布了一个WebService服务,但是具体的细节还并不明朗,下面我们以这个例子为基准,对WebService的概念进行一下描述。
1)WSDL(WebService Description Language)。
WebService描述语言,它是我们在使用WebService过程中最重要的一个说明文档,通过它我们可以知道:
- WebService服务在哪。
如何调用WebService服务。
以上图为例:
服务的地址为
服务的名称为
提供服务的方法为
调用过程为:根据address得到port,在根据port得到method。
具体的调用过程,稍后描述。
2)SOAP(Simple Object Access Protocol)
简单对象访问协议,该协议基于xml在网络上传输数据。SOAP=HTTP + XML,下面是利用myeclipse的wsdl explorer得到的一个soap格式的请求体
<soapenv:Envelope
xmlns:q0="http://freedomcenter.com.cn"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<q0:sayHelloTest>
<yourName>a</yourName>
</q0:sayHelloTest>
</soapenv:Body>
</soapenv:Envelope
下面是利用firebug截获的http请求头与相应头
从上面的数据来看,soap我们可以理解为一种在http基础上的 利用固定格式的xml文件来传输数据的一种方式。
现在我们对WebService有了一个基础的认识,并且已经成功发布了一个服务,那么我们怎么调用这个服务呢?
大致有以下四种方式可以调用一个WebService服务:
1)通过wsimport生成的客户端代码调用
2)通过客户端编程的方式调用
3)通过ajax调用 (js+XML)
4)通过URLConnection调用
由于2)、3)、4)在实际的开发中都不经常用到,就只介绍第一种吧。
wsimport是jdk自带的命令行工具,可以根据一个wsdl地址生产客户端代码。wsimport命令有三个常用的参数:
-p:新包名,把生成的类都放在这个包下。
-d:将生成的class文件放到改目录下。
-s:将生产的java文件放到该目录下。
url : wsdl地址
请看下面的例子
生成的class文件和java文件如下
包名为
利用这些文件我们就可以随意的调用服务了。
package com.zd.site.ws.test;
/**
* @Description: WebService 客户端
* @Author:Zander
* @CreateDate:Aug 8, 2015
* @Company:
*/
public class WSClient {
public static void main(String[] args) {
//1.创建服务对象 2.得到port
CXFWSResumeService service = new CXFWSResumeServiceImplService().getCXFWSResumeServiceImplPort();
//3.调用服务方法,得到结果
String result = service.sayHelloTest("zender");
System.out.println(result);
}
}
太困了,后续补充….