一、Web Service基本概念
Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。(ps:Internet 是面向全球的网络,而 Intranet 则是 Internet 技术在企业机构内部的实现。)是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
下面是一些需要了解的基本术语
XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。
Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
二、调用原理
实现一个完整的Web服务包括以下步骤:
◆ Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)
◆ Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)
◆ Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)
◆ 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)
◆ Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)
客户端——> 阅读WSDL文档 (根据文档生成SOAP请求) ——>发送到Web服务器——>交给WebService请求处理器 (ISAPI Extension)
——>处理SOAP请求——> 调用WebService——>生成SOAP应答 ——> Web服务器通过http的方式交给客户端
三、WebService案例
第一步:创建web services 服务器端
(1) Eclipse 下 新建 java Project 命名为 test_services 创建如下几个类
新建接口 IHelloWorld 代码如下
package com.services;
import javax.jws.WebService;
@WebService
public interface IHelloWorld {
String say(String str);
}
新建 HelloWorldImpl 类 实现 IHelloWorld接口 代码如下
package com.services;
import javax.jws.WebService;
@WebService
public class HelloWorldImpl implements IHelloWorld {
public String say(String str){
return str+",世界!";
}
}
新建 ServicesMain 类 用于暴露WSDL
package com.services;
import javax.xml.ws.Endpoint;
public class ServiceMain {
public static void main(String[] args) {
String address="http://127.0.0.1:9999/test_services"; //这里相当于在本地主机上发布一个项目的地址
Endpoint.publish(address, new HelloWorldImpl()); //第一个参数是项目的地址,第二个参数是功能类
System.out.println("Web Service已成功暴露..."); //这里是提示信息,web services 是否成功暴露
}
}
(2)我们现在运行ServiceMain 让webservice 暴露出来
可以看到 已打印出 web service 已成功暴露的提示信息
(3)在浏览器中查看wsdl,检测 web service是否成功暴露
输入的地址为 ServiceMain 中的 address 地址加上 “?WSDL”
这里是我发布的服务器地址
在浏览器地址栏中输入 http://127.0.0.1:9999/test_services?WSDL
到这里 说明服务器端已经发布成功了,启示这里的WSDL相当于该项目的使用说明书
第二步:创建 web service 服务器端测试 服务器端发布的类的功能,
() file ->new JavaProject 命名为 test_client ,然后在该项目上点击鼠标右键,
新建Web Service Client 客户端,注意 在Service definition 中填入的是WSDL的地址,也就是第一步中测试WSDL是否发布成功的地址
(2)可以看到这里已经生成了客户端的代码
接下来 我们写一个测试类 ServiceTest
package com.services;
import java.rmi.RemoteException;
public class ServiceTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorldImplProxy hello=new HelloWorldImplProxy();
String str = null;
try {
str = hello.say("你好");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//服务器端定义了客户端调用返回的格式
System.out.println(str);
}
}
运行测试类,结果如下
到这里 一个简单的web service 项目的服务器端和客户顿就已经成功构建了。