WebService学习记录 2 基于jdk1.7发布一个WebService服务

1.1 什么是WebService

Web service是一个平台独立的,低耦合的,自包含的、基于可编程web的应用程序,可使用开放的XML标准通用标记语言下的一个子集)标准描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序[1]  

Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XMLHTTPWeb Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。每个webservice都对应的一个wsdl。

WebService学习记录
2 基于jdk1.7发布一个WebService服务

WebService的特点

  • WebService通过HTTP POST方式接受客户的请求
  • WebService与客户端之间一般使用SOAP协议传输XML数据

它本身就是为了跨平台或跨语言而设计的

1.2 调用网络上的WebService服务

http://webxml.com.cn/

1.3 SOAP和WSDL概念

1.3.1SOAP(Simple Object Access Protocol):简单对象访问协议

HTTP协议

POST /getinfo.action HTTP/1.1
HOST www.javaweb.com
contentType text/html;charset=utf8

id=001&name=fyk&age=22...

SOAP协议

POST /getinfo.action HTTP/1.1
HOST www.javaweb.com   
contentType text/xml;charset=utf8

<!-- 标签结构是固定死的,不能改变 -->
<envelop>
  <body>
    <!-- body后的标签不固定 -->
    <getInfo>
      <id>001</id>
      <name>fyk</name>
    </getInfo>
  </body>
</envelop>
  •  SOAP作为一个基于XML语言的协议用于在网上传输数据。
  •  SOAP = HTTP的基础上+XML数据。
  •  SOAP是基于HTTP的。
  •  SOAP的组成如下:
  •             Envelope – 必须的部分。以XML的根元素出现。
  •            Headers – 可选的。
  •            Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。

1.3.2 WSDL Web服务描述语言

WSDL(WebService Description Language):web服务描述语言,就是xml文档,用于描述当前服务的一些信息(服务的名称,服务的发布地址,服务提供的方法,方法的参数类型,方法的返回类型)

2.1 服务端发布

第一步:创建一个Java项目

第二步:创建一个类,加入Webservice注解

第三步:提供一个方法sayHello

第四步:在main方法中调用jdk提供的发布服务的方法

第五步:访问服务的wsdl文档(服务的发布地址+?wsdl

@WebService
public class HelloService {
public String sayHello(String name,int i) {
        System.out.println("服务端的sayHello方法被调用");
        return "name:"+name;
    }
    
    public static void main(String[] args) {
        String address = "http://192.168.2.182:7012/hello";
        Object implementor = new HelloService();
        Endpoint.publish(address, implementor);
    }
}

2.2 客户端调用

2.2.1 jdkwsimport命令使用

作用:解析wsdl文件,生成客户端本地代码

WebService学习记录
2 基于jdk1.7发布一个WebService服务

2.2.3 客户端调用

 1、使用wsimport命令解析wsdl文件生成本地代码

 2、通过本地代码创建一个代理对象

 3、通过代理对象实现远程调用

public class App {
    public static void main(String[] args) {
        HelloServiceService helloServiceService = new HelloServiceService();
        //创建客户端代理对象,用于远程调用
        HelloService helloServicePort = helloServiceService.getHelloServicePort();
        String sayHello = helloServicePort.sayHello("小明", 10);
        System.out.println(sayHello);
    }
}