WebService简介
(1)WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。
(2)WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(
web服务定义语言
)/SOAP(
简单对象请求协议
)规范的。
(3)WebService=WSDL+SOAP+UDDI(webservice的注册),Soap是由Soap的part和0个或多个附件组成,一般只有part,在part中有Envelope和Body。
(4)Web Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。
WebService的优点
(1) 可以让异构的程序相互访问(跨平台)。
(2) 基于标准协议(通用语言,允许其他程序访问)。
(3) 松耦合。
WebService的基本原理
(1) Service Provider采用WSDL描述服务。
(2) Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server)。
(3)Service Requestor在UDDI服务器上查询并 获取WSDL文件。
(4)Service requestor将请求绑定到SOAP,并访问相应的服务。
WebService的基础实现
1.设计服务器端,首先创建一个java项目,项目名称为:service_start
1.1 创建接口(SEI)
package webservice;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService()
public interface IMyService {
@WebResult(name = "addResult")
public int add(@WebParam(name = "a") int a, @WebParam(name = "b") int b);
@WebResult(name = "minusResult")
public int minus(@WebParam(name = "a") int a, @WebParam(name = "b") int b);
}
1.2 创建实现类(SBI)
package webservice.Impl;
import webservice.IMyService;
import javax.jws.WebService;
@WebService(endpointInterface="webservice.IMyService")
public class MyServiceImpl implements IMyService {
@Override
public int add(int a, int b) {
System.out.println(a+"+"+b+"="+(a+b));
return a+b;
}
@Override
public int minus(int a, int b) {
System.out.println(a+"-"+b+"="+(a-b));
return a-b;
}
}
1.3发布服务
package webservice;
import webservice.Impl.MyServiceImpl;
import javax.xml.ws.Endpoint;
public class Test_1 {
public static void main(String[] args) {
String address = "http://localhost:8888/ns";
Endpoint.publish(address, new MyServiceImpl());
}
}
在浏览器通过webservice uri测试服务是否发布成功
2.客户端设计,新创建一个项目,项目名称为:service_start_client (模拟异构(或不同)系统的交互)
2.1. 生成代理类-wsimport命令用于生成本地代理(即本地对象)。
2.1.1 使用wsimport命令根据webservice uri 生成本地代理类
在d:/webservice目录下新建/01文件夹用于存放生成的本地代理类。
2.1.2 将生成的本地代理类(包括生成的包路径)拷贝到
service_start_client
项目的src目录下。
2.2. 客户端测试
package webservice;
import webservice.webservice.impl.IMyService;
import webservice.webservice.impl.MyServiceImplService;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import java.net.URL;
public class Test_3 {
public static void main(String[] args) throws MalformedURLException {
//创建访问wsdl服务地址的url
URL url = new URL("http://localhost:8888/ns?wsdl");
//通过Qname指明服务的具体信息
QName sname = new QName("http://Impl.webservice/", "MyServiceImplService");
MyServiceImplService msis = new MyServiceImplService(url,sname);
IMyService ms = msis.getMyServiceImplPort();
System.out.println(ms.add(3,6));
}
}