一、Web Service的概念和原理
1、什么是Web Service?
WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。
WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的。
WebService=WSDL+SOAP+UDDI(webservice的注册)
Soap是由Soap的part和0个或多个附件组成,一般只有part,在part中有Envelope和Body。
Web Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。
2、Web Service的优点
(1) 可以让异构的程序相互访问(跨平台)
(2) 松耦合
(3) 基于标准协议(通用语言,允许其他程序访问)
3、Web Service的基本原理
(1) Service Provider采用WSDL描述服务
(2) Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server)
(3) Service Requestor在UDDI服务器上查询并 获取WSDL文件
(4) Service requestor将请求绑定到SOAP,并访问相应的服务。
Tips:WSDL与SOAP
WSDL:Web Service Description Language(Web服务描述语言)。
作用:
(1) 描述服务是什么,服务提供的操作(方法名,方法参数,返回值,数据类型等);
(2) 如何访问该服务→binding
(3) 服务访问的地址→service
Banding:定义Web服务访问采用的协议(SOAP)
SOAP:Simple Object Access Protocol(简单对象访问协议)
4、如何编写Web Service?
(1) 先编写Java类,然后利用工具生成WSDL文档以及相关文档
或先编写WSDL文档,后利用工具生成Java类
(2) @Web Method标注的方法要发布到WSDL描述中,如果没有任何方法加注该标注,则所有方法均发布到WSDL上。
@WebService标注该Session Bean要发布Web Service。
二、如何访问Web Service?
Dynamic Proxy:动态代理
Dynamic invocation intenface:动态调用接口
Dynamic Proxy:
URL:Service的WSDL地址
QName:全限定名
Namespace:目标名字空间,Web Service的名字
Service类:javax.xml.ws.Service
实例:
Service greeterService=Service.create(wsdlLoction,serviceQName);
helloWSBean hws=greeterService.getPort(helloWSBean.class)
System.out.println(hws.sayHello());
EJB中使用WebService
@WebService(serviceName="",portName=""),使用这个标注可以将SessionBean中用@WebMethod标注来表示的方法发布成WebService
@Stateless
@WebService(serviceName="Greeter",portName="GreeterPost")
public class HelloSessionBean implements HelloSessionRemote {
@WebMethod
public String hello(String name) {
return "Hello world "+name+"!";
}
}
三、Web Service总结
1、Web Service的优缺点
优点:① 跨平台,可以穿透防火墙,构建一个分布式系统
② 基于标准协议(HTTP,SOAP,WSDL,XML)
③ 松耦合
缺点:性能低下(SOAP协议XML解析,采用HTTP协议等原因)
分布式系统(EJB,DCOM,CORBA,Web Service)缺点:
① EJB不能穿透防火墙,而且限制编程语言只能是Java
② 技术不完全成熟
2、Web Service应用场合
(1) 用于企业内部的应用集成
(2) 用于企业间的应用集成