热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:XML与WebService期末复习——webservice

篇首语:本文由编程笔记#小编为大家整理,主要介绍了XML与WebService期末复习——webservice相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了XML与WebService期末复习——webservice相关的知识,希望对你有一定的参考价值。





webservice相关知识整理

概论

定义: Web service是一个平台独立的,低耦合的,自包含的、可编程的、能通过web访问的(web-enable)应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
即,一个能够使用XML消息通过网络来访问的服务, 这个服务通过Interface描述了一组可访问的操作。
服务的行为、输入/输出都可使用 WSDL 描述
适应松散耦合的网络环境,可通过Web访问,手段是 SOAP Message 。


目标: 在现有的各种异构平台的基础上,构筑一个通用的,与应用无关、语言无关的技术层 ,各种不同平台之上的应用依靠这个技术层来实施彼此的连接和集成。
Web Service则要解决如何让计算机系统来使用Web应用所提供的服务。

应用: 互联设备,整合应用

特点:



  • 良好的封装性
    使用者仅看到Web Service提供的功能列表


  • 松散耦合
    只要接口不变,其使用方法就不会改变


  • 使用标准协议规范
    使用开放的标准协议进行描述、传输和交换


  • 高度可互操作性
    可以跨越平台、语言进行调用


  • 高度可集成能力




Web 服务体系结构中的角色



  • 服务提供者: 从企业的角度看,这是服务的所有者。从体系结构的角度看,这是托管访问服务的平台。


  • 服务请求者: 从企业的角度看,这是要求满足特定功能的企业。从体系结构的角度看,这是寻找并调用服务,或启动与服务交互的应用程序。


  • 服务注册中心 : 这是可搜索的服务描述注册中心,服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行期间,服务请求者查找服务并获得服务的绑定信息(在服务描述中)。
    服务请求者也可以从服务注册中心以外的其它来源得到服务描述。




Web 服务体系结构中的操作



  • 发布: 为了使服务可访问,需要发布服务描述以使服务请求者可以查找它。


  • 查找: 在查找操作中,服务请求者直接检索服务描述或在服务注册中心中查询所要求的服务类型。对于服务请求者,可能会在两个不同的生命周期阶段中牵涉到查找操作:



    • 在设计时为了程序开发而检索服务的接口描述,


    • 在运行时为了调用而检索服务的绑定和位置描述。



  • 绑定: 最后需要调用服务。在绑定操作中,服务请求者使用服务描述中的绑定细节来定位、联系和调用服务,从而在运行时系统中调用或启动与服务的交互。




web服务过程



  • 服务提供者将所提供的服务发布到服务代理的一个目录上


  • 服务请求者首先到服务代理提供的目录上搜索 服务,得到如何调用该服务的信息


  • 根据得到的信息调用服务提供者提供的服务




web service 协议栈

soap->wsdl->uddi->wsfl



SOAP

简介: SOAP是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。SOAP提供了一种基于 XML 且具有以下特性的消息处理框架。

特点(重点,简答):



  • 自由的传输绑定 (不仅仅是HTTP)


  • 自由的语言绑定 (比如Java, C#)


  • 可插入的数据格式 (当然必须基于XML)


  • 完全的中立 (中立、公开的标准)


  • 独立于任何编程语言、对象模型、操作系统、平台、协议


优点
简单性,SOAP所基于的XML具有高度的结构化,并且很容易解析。
可移植性:SOAP无须依赖底层平台,不需要考虑诸如字节顺序或计算机字长这类问题。
与防火墙的兼容性:soap可以穿过防火墙。
使用开放标准:SOAP使用XML开放标准来格式化数据。
互操作性:SOAP是建立在开放技术之上的,从而有利于实现真正的分布式互操作性和松耦合性的应用。
被广泛接受
适应变化:soap基础架构的变化通常不会影响到该协议的应用。

缺点
SOAP最初仅限于HTTP,采用了并不适合所有情况的请求/应答体系结构。HTTP是一个相当慢的协议,从而影响了SOAP的性能
Soap是无状态的,然而在一些业务处理和事务中,多个webservice之间需要相互交互,这是就需要维护连接的状态。
SOAP基于值的串行化,而不支持基于引用的串行化。基于值的串行化允许对象的多个副本含有的状态不同步。这就意味着soap上不能以对象引用的形式引用一些外部数据源。

语法规则:



  • SOAP消息必须用XML来编码


  • SOAP消息必须使用SOAP Envelope命名空间


  • SOAP消息不能包含DTD引用


  • SOAP消息不能包含XML处理指令


  • 该元素可以包含命名空间声明和额外的属性,如果声明额外的属性,必须使用命名空间修饰。


  • Envelope可以包含额外的子元素,但必须使用命名空间修饰并且跟在SOAP Body元素之后。


分布式消息传送
1、SOAP客户端应用程序创建一个SOAP消息XML文档进行请求。这个消息包含远程调用分布式系统中的方法所需的信息。包含请求的方法和参数。
2、网络基础设施将消息发送给消息提供者的soap服务器。
3、soap服务器将请求消息发送给服务提供者的Webservice实现代码。Soap服务器确保将所收到的文档从XML转换为特定的编程语言对象。SOAP消息中的编码模式将决定如何转换。
4、SOAP响应消息被转交给服务提供者的SOAP运行时系统,并以服务请求者的URI作为目的地。
5、soap服务器通过网络将soap响应消息转发给服务请求者。
6、在服务请求节点上的网络基础设施接收响应消息,并可以转换为应用程序能理解的对象。

消息交换模型



  • 单向传送模型:该模型将 XML 消息从发送者传送到接收者。


  • 请求/响应模型:接收方向发送方发送响应消息


  • 增加可选的“SOAP中介(intermediary)”:用来在 SOAP 发送者和最终 SOAP 接收者之间截取 SOAP 消息。


SOAP消息结构
message->envelope->header/body->fault


<soap-env:Envelop xmlns: soap-env="http://schemas.xmlsoap.org/soap/envelope/"soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap-env:Header>
<!– 报头定义 -->
soap-env:Header>
<soap-env:body>
<!– 消息定义 -->
<soap-env:Fault>
<!– 相关错误处理信息 -->
soap-env:Fault>
soap-env:body>soap-env:Envelope>

1、soap envelope
SOAP Envelope (信封)是SOAP消息结构的主要容器,也是SOAP消息的根元素。必须出现在每个SOAP消息中,用于把此XML文档标识为一条SOAP消息.在SOAP中,使用XML命名空间将SOAP标识符与应用程序的特定标识符区分开,将SOAP的消息的元素的作用域限制在一个特定的领域。
2、soap header
Header的目的就是对扩展的消息格式进行封装,且无需与有效载荷发生关联,也不需要修改soap的基本结构,因此soap消息可以通过header不断添加新的特性和功能,例如安全性、事务等。
可以在消息的头部存放扩展数据,从而使得服务中的每个方法调用无须将那个数据作为方法的参数。
Header元素允许在头部放置数量不限子元素,这些子元素称为头块,表示一个数据的逻辑分组。
每一个头块都有自己的命名空间。
soap中介
soap env:role属性
mustunderstand属性
actor属性
3、soapbody
SOAP Body(主体)元素作为子元素包含在SOAP信封中,且包含:
RPC方法及其参数
目标应用程序(消息接收者)专用数据
报告故障和状态信息的SOAP故障(FAULT)
在SOAP消息中,所有的Body元素必须是SOAP Envelope元素的直接子元素。

4、soap fault
SOAP Fault(错误)元素用于在SOAP消息中传输错误及状态信息。如果SOAP消息需要包括SOAP Fault元素,它必须作为一个Body项出现,而且至多出现一次。
Faultcode: 标识故障,包含用于标识该SOAP应用程序的故障或状态的标准值。这些Faultcode
值的命名空间标识符在http://schemas.xmlsoap.org/soap/envelope/ 中定义。
Faultstring: 提供SOAP故障的可读描述
Faultactor: 描述在消息路径中错误的引发者。类似于SOAP actor 属性,不过它记录的不是Header的接收者,而是指示错误源。
Detail: 该元素提供与已定义的Body块相关的,特定于应用程序的故障或状态信息。 Detail的所有直接子元素都称为detail项。

soap通信模型
Soap支持两类通信方式: RPC(远程过程调用 )类型和文档类型。
RPC类型的webservice
表现为客户端应用的一个远程对象。
客户端将请求表达成带有参数的方法调用,返回的响应将包含返回值。

文档类型(document)的webservice
消息驱动
可以使用soap来交换文档,这些文档可以包含任何类型的XML数据。
SOAP并不提供任何方式将源和目的地信息编码到信封当中。对于webservice而言,webservice基础设施决定将SOAP消息发送到哪里,如何发送。
在文档型SOAP应用中,对于SOAPbody元素的内容没有限制。
与RPC类型不同,文档类型不支持消息的自动串行化/逆串行化。



WSDL

概述
Web 服务描述语言(Web Services Description Language,WSDL)是用于描述Web服务的一种XML语言;是一种定义在Web上的对象,Web Service的开发者需要对服务的调用方式进行某种结构化的说明,以便服务的调用者能够正确的使用这些服务。
WSDL规范实际上分为两部分:服务接口定义和服务实现。
元素构成与作用









































元素名称 元素的作用
definitions 根元素,定义名称,声明命名空间
types 描述webservice与调用者之间使用的数据类型
message 消息的逻辑定义
operation 所支持的操作的抽象定义
porttype 某个访问点所支持的所有操作的抽象的定义
binding 特定porttype定义的操作和消息格式协议之间的绑定
port webservice绑定地址
service 相关服务访问的集合

use属性取值
为:encoded or literal
在“encoded”的情况下,抽象的定义通过应用SOAP编码规则转换成具体格式。
在“literal”的情况下,抽象类型定义本身成为具体定义(它们是“literal”定义)。在这种情况下,您可以简单地检查XML架构类型定义,以确定具体的消息格式。

WSDL的消息传输模式
单向操作
单向操作时服务端点接收消息的一种操作,但该操作并不发送一个响应。
例如,将一个订单提交给订购系统的操作可以是一个单向操作。在发送订单之后,并不期待会立即有一个响应。
单向消息仅定义一个输入消息,既不需要输出消息,也不需要出错消息。
请求响应操作
服务端接收一个消息,并返回一个响应。
通知操作
服务端口将消息发送给客户端,但不期待一个响应;
在portType元素中包含一个out标签,但没有input消息的定义。
要求响应操作
服务端发送一个消息并期待收到一个响应消息;
服务端点发起这个操作,而不是响应客户端的请求;
portType先声明一个output标签,然后声明一个input消息;



UDDI

UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。
UDDI两个操作:Web Service的描述与注册



使用webservice过程



  1. 开发新应用


  2. 查询UDDI


  3. 定位Web服务、下载其描述


  4. 根据描述创建Java client proxy


  5. 在应用中编写调用Java client proxy methods 代码


  6. 测试应用


  7. Java client proxy通过SOAP调用Web service methods




编写服务端实例

(1)创建一个Web工程
(2)引入CXF jar包 apache-cxf-2.7.17
把前面下载的CXF包解压,进入lib目录。把所有jar包拷贝到刚创建的Web工程的lib目录。
(3)开发一个Web Service业务接口。
该接口要用@WebService修饰


package com;import javax.jws.WebService;@WebService(targetNamespace="http://service.demo.ws/")public interface Login {
String login(String name,String password);}

(3)开发一个Web Service实现类
实现类也需要用@WebService修饰


package com;import javax.jws.WebService; @WebService(endpointInterface = "com.Login", serviceName = "LoginService")public class LoginImpl implements Login {
public String login(String name, String password) {
String result = "登录CXF 服务端成功!";
if (!"cxf".equalsIgnoreCase(name) || !"cxf".equalsIgnoreCase(password)) {
result = "用户名或密码不正确,请重新登录!";
}
return result;
} }

(5)使用EndPoint类的静态方法来发布WebService


import javax.xml.ws.Endpoint;
public class webServiceApp {

/**
    * @param args
    */

public static void main(String[] args) {
System.out.println("web service start");
LoginImpl implementor = new LoginImpl();
String address = "http://localhost:8080/CXF/Login";
Endpoint.publish(address, implementor);
System.out.println("web service started");
}
}

注:可以编写一个Java类进行发布,也可以使用Servlet进行发布




本文在博客 几何军工作室 首发

https://kfzjw008.github.io




推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
author-avatar
大约在冬季1122_867
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有