WebService-概述

  • 什么是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);
    }
}

太困了,后续补充….

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值