1.1 WebService介绍
WebService可以跨平台跨应用进行通信(客户端请求调用服务端,服务端返回数据)。
解决多个系统之间的信息通信,解决信息孤岛问题。
WebService的特点:
- Webservice是自包含的(不需要使用任何的软件,只需要支持http和xml即可)
- Webservice是自我描述的(只需要知道请求和响应的内容格式即可使用)
- WebService是跨平台和跨语言的(客户端和服务端均可在不同平台,不同语言进行使用)
- WebService是基于开放和标准的
- WebService是可以组合的
- WebService是松散耦合的(完全解耦客户端与服务端)
- WebService提供编程访问的能力
- WebService是通过网络进行发布,查找和使用的
发布WebService的方式:
- JWS 发布
- Axis2发布
- CXF 发布
- Ksoap2-android 发布
WebService相关术语
- XML:扩展型可标记语言
- SOAP:简单对象访问协议
- WSDL:web service description language
- UDDI:通用描述、发现与集成服务
1.2 WebService工作原理
WebService体系结构图:
1.3 SOAP解析
1.3.1 SOAP分为四个部分:
- SOAP封装:它定义了一个框架,该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。
- SOAP编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。
- SOAP RPC表示:它定义了用于表示远程过程调用和应答的协定。
- SOAP绑定:定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。
1.3.2 协议结构:SOAP消息格式
标题头为可选元素,body为必须的元素
1.3.3 语法规则:
- SOAP 消息必须用XML来编码
- SOAP 消息必须使用SOAP Envelope命名空间。
- SOAP 消息不能包含DTD引用
- SOAP 消息不能包含XML处理指令
1.3.4 SOAP的优点
- 可扩展的
- 简单的
- 完全和厂商无关(相对于操作系统、平台、编程语言等可以独立运行)
1.4 WSDL解析
1.4.1 WSDL 文档
- 类型—使用某种的类型系统(如XSD)定义数据类型的容器
- 消息—通过数据抽象的有类型的定义
- 操作—服务支持动作的对象描述
- 端口类型—一个操作的抽象集合,该操由一个或多个端点支持
- 绑定—针对一个特定端口类型的具体协议规范和数据格式规范
- 端口—一个单一的端点,定义成一个绑定和一个网络地址的链接
- 服务—相关端点的集合
1.4.2 根元素
1.4.3 数据类型定义元素:<types>
1.4.4 消息体定义元素:<message>
输入参数与输出参数隔离
1.4.5 函数体定义元素: <portType>
portType的Name属性对应java中的服务类的类名
1.4.6 绑定实现定义元素:<binding>
1.4.7 服务地址绑定元素:<service>
在一个WSDL文档中可以有多个service,一个service可以有多个端口
1.5 WebService注解说明以及优缺点
1.5.1 WebService的常用注解
1. @WebService注释标记Java类
实现Web Service的Java类必须指定@WebService或@WebServiceProvider注释。不能同时提供这两种注释
- 属性:name
wsdl:portType的名称。缺省值为Java类或接口的非限定名称。
- 属性:targetNamespace
指定从Web Service生成的WSDL和XML名称空间。缺省值为从包含该Web Service的包名映射的名称空间。
- 属性:serviceName
指定Web Service的服务名称:wsdl:service。缺省值为Java类的简单名称+Service
- 属性:endpointInterface
指定用于定义服务的抽象Web Service约定的服务端点接口的限定名。如果指定了此限定名,那么会使用该服务端点接口来确定抽象WSDL约定。
- 属性:portName
wsdl:portName。缺省值为WebService.name+Port.
- 属性:wsdlLocation
指定用于定义Web Service的WSDL文档的Web地址。Web可以是相对路径或绝对路径。
2. @WebMethod注释表示作为一项Web Service操作的方法
将此注释应用于客户机或服务器服务端点接口(SEI)上的方法,或者应用于JavaBeans端点的服务器端点实现类。仅支持在使用@WebService注释来注释的类上使用@WebMethod注释。
- 属性:operationName
指定与此方法相匹配的wsdl:operation的名称。缺省值为Java方法的名称
- 属性:action
定义此操作的行为。对于SOAP绑定,此值将确定SOAPAction头的值。缺省值为Java方法的名称。
- 属性:exclude
指定是否从Web Service中排除某一方法。缺省值为false
3. @WebParam注释用于定制从单个参数至Web Service消息部件和XML元素的映射。
将此注释应用于客户机或服务器端点接口(SEI)上的方法,或者应用于JavaBeans端点的服务器端点实现类。
- 属性:name
参数的名称。如果操作是远程过程调用(RPC)类型并且未指定partName属性,那么这是用于表示参数wsdl:part属性的名称。
- 属性:partName
定义用于表示此参数的wsdl:part属性的名称。仅当操作名称为RPC或者操作文档类型并且参数类型为BARE时才使用此参数。
- 属性:targetNamespace
指定参数的XML元素的XML名称空间。当属性映射至XML元素时,仅应用于文档绑定。缺省值为Web Service的targetNamespace
- 属性:mode
此值表示此方法的参数流的方向。有效值为IN, INOUT, OUT
- 属性:header
指定参数是在消息头还是在消息体中。缺省值为false。
4. @WebResult注解用于定制从返回值至WSDL部件或XML元素的映射
将此注释应用于客户机或服务器端点接口(SEI)上的方法,或者应用于JavaBeans端点的服务器端点实现类。
- 属性:name
当返回值在WSDL文件中并且在连接上的消息中找到该返回值时,指定该返回值的名称。对于RPC绑定,这是用于表示返回值的wsdl:part属性的名称。
- 属性:targetNamespace
指定返回值的XML名称空间。仅当操作类型为RPC或者操作是文档类型并且参数类型为BARE才使用此参数
1.5.2 WebService的优点
- 跨防火墙的通信
- 应用程序集成
- B2B的集成
- 软件和数据重用
- WebService的缺点(不适用的场合)
- 单机应用程序
- 局域网的一些应用程序
2 WebService学习
2.1 schema规范
- 所有的标签和属性都需要定义(有schema文件来进行约束)
- 所有的schema文件都要有一个id,这里叫namespace
- Namespace的值由什么来指定?
- 由targetNamespace属性来指定,它的值是一个url(很有可能不存在)
- 如何引入一个schema约束?
- 属性:用xmlns属性
- 属性值:对应schema文件的namespace的值
- 如果引入的schema不是w3c组织定义,必须指定schema文件的位置
- Schema文件的位置由什么属性来指定?
- 属性:schemaLocation
- 属性值:{namespace} {location}
- 如果引入了n个约束,需要给n-1个约束取别名
- namespace
相当于schema文件的id
- targetNamespace属性
用来指定schema文件的namespace的值
- xmlns属性
引入一个约束, 它的值是一个schema文件的 namespace值
- schemaLocation属性
用来指定引入的schema文件的位置
WebService个人笔记
最新推荐文章于 2024-05-16 16:13:26 发布