《Web服务》PPT课件.ppt_第1页
《Web服务》PPT课件.ppt_第2页
《Web服务》PPT课件.ppt_第3页
《Web服务》PPT课件.ppt_第4页
《Web服务》PPT课件.ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 五 讲 Web 服务,内 容,一、Web 服务简介 二、SOAP 三、WSDL 四、支持Web 服务的J2EE应用,一、Web 服务简介,2000年 Microsoft 等提出“Web Services” Web服务(Web Services) 是基于 XML 和 HTTP 的一种服务 服务访问协议: SOAP 服务的描述: WSDL 服务查找与发现: UDDI,SOAP (Simple Object Access Protocol) XML-based (text) 协议 支持远程通信 平台中立 WSDL (Web Services Definition Language) 接口描述 UDDI (Universal Description, Discovery, and Integration) 用于Web Services注册 用于发现Web Services,客户/服务请求者,服务提供者,注册,请求/应答,查找,基本结构:,服务信息注册库,提供了软件模块之间一种松耦合的交互方式 根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用 服务层是SOA的基础,可以直接被应用调用,从而 有效控制系统中与软件代理的人为依赖性 SOA的几个关键特性:一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义适配器进行通讯,不涉及 底层编程适配器和通讯模型,RPC vs. Document,RPC 耦合密切些 相对脆弱 仅仅是调用 Document 耦合松散些 对应用修改适应性好 没有序列化/反序列化问题 需要额外的设计工作 需要解释客户消息内容,然后进行相应操作,考虑 Web Services的几个理由,业务上 需要与外部客户通信 技术上 应用需要与 其它语言编写的 客户程序通信 客户在防火墙之外 管理上 管理托管 web service 应用,什么时候不要使用Web Services,客户程序与应用使用相同语言编写 通信开销大 序列化或者远程访问开销大 Web Services/XML 处理开销大 “Dont Use XML to Communicate Unless You Really, Really Have To” Floyd Marinescu, The Middleware Company 永远记住:Web Services/XML 是用于集成的,Apache Axis (Apache eXtensible Interaction System) 是Apache WebService项目中的子项目 最初起源于IBM的“SOAP4J“ 最早的一批用于构造基于SOAP应用的Framework JBoss, WAS等重要的应用服务器都集成它,典型的 Web 服务支持平台,服务器端AXIS 句柄链处理架构,用户配置一系列的 handler,构成 handler chain AXIS 依次调用 handler 处理消息(含 context) 类似于 interceptor(截取器),客户端AXIS 句柄链处理架构,AXIS的子系统,二、SOAP,1、SOAP概述 2、数据表示 3、消息格式 4、协议映射,1、SOAP概述,许多程序通过使用远程过程调用(RPC) 在诸如 DCOM 与 CORBA 等对象之间进行通信 但RPC 会产生兼容性以及安全问题; 防火墙和代理服务器通常会阻止此类流量 通过 HTTP 在应用程序间通信是更好的方法 因为 HTTP 得到了所有的因特网浏览器及服务器的支持 SOAP 就是被创造出来完成这个任务的,2000年5月,UserLand、Ariba、Commerce One、Compaq、Developmentor、HP、IBM、IONA、Lotus、Microsoft 以及 SAP 向 W3C 提交了 SOAP 因特网协议 期望此协议能够通过使用因特网标准(HTTP 以及 XML)把图形用户界面桌面应用程序连接到因特网服务器 首个关于 SOAP 的公共工作草案由 W3C 在 2001 年 12 月发布 SOAP 1.2 于 2003 年 6 月 被发布为 W3C 推荐标准,简单对象访问协议(SOAP) 是网络环境中交换信息的简单协议 为网络环境下软件之间结构化、类型化信息的交换 提供了一种基于XML的机制 它可以广泛地用于基于消息的系统和基于RPC的系统 SOAP被设计为可以与各种其它协议结合使用 但目前SOAP主要和HTTP及HTTP扩展框架相结合,简单地讲,SOAP= HTTP+RPC+ XML 即: SOAP 以HTTP作为底层通讯协议 以RPC作为一致性的调用途径 以XML作为数据传送的格式 SOAP的设计原则是: 简单、易于扩展 SOAP的设计忽略了如下几方面的功能: (1)分布式垃圾回收 (2)消息的批处理 (3)对象引用 (4)对象激活,SOAP的数据表示完全不同于以往互操作协议的表示方法 以往的互操作协议都将调用语句编排为 二进制的字节流的形式 SOAP采用XML作为自己的数据表示方法 XML是与HTML类似的基于文本的标记语言 SOAP将调用语句编排为文本式的字符流的形式,2、数据表示,SOAP消息是一个XML文档 包括: 一个必需的SOAP封装 一个可选的SOAP头 一个必需的SOAP体,3、消息格式,SOAP封装定义了描述信息和如何处理信息的框架 用于指定用XMLSchema来描述XML数据的编码规则 封装可以包含名域声明和附加属性 如果包含附加属性,这些属性必须限定名字域 类似的,“Envelope”可以包含附加子元素 这些也必须限定名字域且跟在SOAP体元素之后,(1)SOAP封装,SOAP消息头是SOAP消息的可选部分 用来扩展其它诸如安全、事务等服务的重要机制 如果出现的话,必须是SOAP 封装元素的第一个直接子元素 SOAP头可以包含多个SOAP块 每个都是SOAP头元素的直接子元素 所有SOAP头的直接子元素都必须限定名字域,(2)SOAP消息头,SOAP体在SOAP消息中必须出现 且必须是SOAP封装元素的直接子元素 SOAP体可以包括多个条目 每个条目必须是SOAP体元素的直接子元素 SOAP体元素的直接子元素可以限定名字域,(3)SOAP体,SOAP自然地遵循HTTP的请求/应答消息模型 使得SOAP的请求和应答参数可以包含在HTTP请求和应答中,SOAP HTTP遵循HTTP 中 表示通信状态信息的HTTP状态码的语义 例如,2xx状态码表示 这个包含了SOAP组件的客户请求 已经被成功的收到、理解和接受 下页的代码是一个使用POST的SOAP HTTP例子 该消息通过HTTP发出一条请求 “获取股票代码为ABC的最新交易价格”,POST /StockQuote HTTP/1.1 Host: Content-Type: text/xml; charset=“utf-8“ Content-Length: nnnn SOAPAction: “Some-URI“ 5 ABC ,1、互操作开销不同 IIOP、JRMP使用二进制的字节流形式编排消息 (CDR、XDR) SOAP采用字符型的XML编排消息 SOAP消息要比IIOP、JRMP消息长得多 SOAP的编排开销大、占用内存空间大 2、表达能力不同 SOAP易于学习、易于开发、易于调试 SOAP不支持消息的批处理、对象引用、对象激活等特性 降低了SOAP的表达能力 并使得基于SOAP的交互受到限制 而IIOP、JRMP等则不存在这种限制,与其它协议的比较,3、适应能力不同 IIOP、JRMP严重制约于防火墙 防火墙一般由两个路由器与一个应用程序网关构成 路由器负责IP层的分组信息 列出可接受、禁止的源端和目标端等信息 应用程序网关在应用程序级进行控制 根据头信息字段、消息长度、消息内容等 决定传送还是丢弃消息 这是IIOP、JRMP的应用受到限制的核心因素之一 SOAP则基本不受其限制 4、适用环境不同 JRMP适用于使用JAVA的应用系统 IIOP、SOAP支持各种语言,因此适用面更广 IIOP适合于同一个防火墙内部之间的交互 而SOAP则适合于跨越防火墙的交互,三、WSDL,1、概述 2、文档结构 3、例子 4、向SOAP的映射,1、概述,WSDL(Web Services Description Language)是一个建议性标准 在Microsoft的SDL(Service Description Language和SCL(SOAP Contract Language)和IBM的NASSL(Network Accessible Service Specification Language)这两项技术的结合,形成了WSDL的基础 2000年9月25日IBM、Microsoft和Ariba提出WSDL1.0 2001年3月15日,他们提交的WSDL1.1成为W3C的Note 2002年7月9日提出 WSDL 1.2 2003年11月10日提出 WSDL 2.0,类型,消息,端口类型,绑定,服务,操作,操作,端口,抽,象,定,义,具,体,说,明,WSDL,文档,代表依赖关系,代表包含关系,2、文档结构,类型:独立于计算机和语言的类型定义 使用某一类型系统(例如XSD)进行数据类型定义的容器 用于描述被交换的消息 消息:对通信数据的一个抽象、类型化定义 一个消息包含多个逻辑部分 每一个都与某一个类型系统中的定义相关联 包含函数参数(输入与输出分开)或文档说明 端口类型:由一个或多个端点支持操作的抽象集合 每个操作对应于一个输入消息与一个输出消息 它引用消息节中的消息定义来说明函数基调 操作名称、输入参数和输出参数 等,(1)抽象定义,绑定:为一个由特定端口类型定义的操作与消息 指定具体的协议及数据格式规范 服务:指定每个绑定的端口地址,(2)具体说明,3、例子,interface FooSample long foo(long arg); ,用OMG-IDL表示为:,对应的SOAP请求消息为:, 5131953 ,4、向SOAP的映射, 5131953 ,与其它描述方法的比较,有的以描述结构化程序的功能为主 例如 RPC-IDL 微软的-IDL 有的以描述对象的功能为主 例如 CORBA的IDL 有的以描述服务为主 例如 web service的WSDL,1、描述对象不同,有的以具体计算机语言的方式表达 例如SUN的Java Interface 有的以独立于具体的计算机语言 但十分类似于计算机语言的方式表达 例如:RPC-IDL 微软的-IDL CORBA的IDL 有的以XML为方式表达 例如:web service的WSDL,2、描述方式不同,有的仅描述接口的语法信息 例如:RPC-IDL 微软的-IDL CORBA的IDL 有的还包括与底层协议的绑定信息 例如:WSDL等 在CORBA中这部分信息包含在IOR中,3、描述内容不同,如何为 web 系统增加web services接口 下面模块可以暴露为 Web Services: EJB POJO 后面的例子针对 EJB,四、支持Web 服务的J2EE应用,JAX-RPC: Java API for XML-based RPC Java世界的 web service 编程模型规范 如何以类似 RPC 的方式调用 web service JAXRPC的客户端编程模式有以下的三种: Static stub(静态的客户端存根调用) Dynamic proxy (部分动态的代理调用) Dynamic invocation interface (DII)(动态调用接口),三种JAXRPC的客户端编程模式,Static stub,1) 首先通过映射转换将服务描述的WSDL文档生成客户端的Java stub 2) 然后实例化服务的locator实例 3) 通过loacator获得服务在客户端的代理 4) 用客户端代理 去调用服务,package itso.test; import java.io.*; import java.util.*; import itso.test.*; public class WeatherForecastClient public static void main(String args) try WeatherForecastServiceLocator wsl = new WeatherForecastServiceLocator(); WeatherForecastService ws = (WeatherForecastService) wsl.getWeather(); String temperature = ws.getTemperature(); System.out.println(temperature); System.out.println(“WeatherForecastClient completed“); catch (Exception e) e.printStackTrace(); ,Dynamic proxy 与Static stub 不同的是可以指定生成的客户端代理,import space.QName; import java.io.*; import java.util.*; public class WeatherForecastDynamicProxyClient public static void main(String args) try WeatherForecastServiceLocator wsl = new WeatherForecastServiceLocator(); QName qn = new QName(““, “WeatherForecast“); WeatherForecast ws = (WeatherForecast) wsl.getPort(qn,WeatherForecast.class); String temperature = ws.getTemperature(); System.out.println(temperature); System.out.println(“DynamicProxyJavaClient completed“); catch (Exception e) e.printStackTrace(); ,一个汽车网站的例子,例子构成: JSPs Controller Servlet Stateless Session Bean InventoryFacadeBean Hibernate DAOs 暴露对象: InventoryFacadeBean.findAllAvailableCars(),服务端点接口,将业务方法暴露为Web Services 类似于服务器端的 stub 类似于 EJB Remote Interface,package com.jbossatwork.ws; /* * Service endpoint interface for InventoryFacade. */ public interface InventoryEndpoint extends java.rmi.Remote public com.jbossatwork.ws.CarDTOArray findAvailableCars() throws java.rmi.RemoteException; / InventoryEndpoint.java,修改 ejb-jar.xml, InventoryFacadeSB InventoryFacade com.jbossatwork.ws.InventoryEndpoint ,webservices.xml,定义并注册 InventoryService Web Service 将Service Endpoint Interface class 绑定到InventoryFacadeBean EJB 告诉 J2EE app server 到哪里找WSDL 与JAX-RPC 映射文件(Mapping files, in EJB JAR file), InventoryService META-INF/wsdl/InventoryService.wsdl META-INF/inventory-mapping.xml Inventory InventoryEndpointPort com.jbossatwork.ws.InventoryEndpoint InventoryFacade ,JAX-RPC 映射文件,帮助 JAX-RPC 编译器将Java 对象映射到WSDL 对象 复杂的Java 对象导致复杂的JAX-RPC 与WSDL 文件, com.jbossatwork.ws http:/localhost:8080/jbossatwork-ws/types com.jbossatwork.ws http:/localhost:8080/jbossatwork-ws com.jbossatwork.dto.CarDTOArray typeNS:CarDTOArray complexType cars cars , com.jbossatwork.dto.CarDTO typeNS:CarDTO complexType id id make make model model modelYear modelYear , status status com.jbossatwork.ws.InventoryService serviceNS:InventoryService InventoryEndpointPort InventoryEndpointPort , com.jbossatwork.ws.InventoryEndpoint portTypeNS:InventoryEndpoint bindingNS:InventoryEndpointBinding findAvailableCars findAvailableCars com.jbossatwork.dto.CarDTOArray wsdlMsgNS:InventoryEndpoint_findAvailableCarsResponse result ,WSDL File, InventoryFacade Inventory jbossatwork-ws/InventoryService ,修改 WSDL URL,修改 EJB,/* * ejb.bean * name=“InventoryFacade“ * * view-type=“all“ * * * wsee.port-component * name=“Inventory“ * wsdl-port=“InventoryEndpointPort“ * service-endpoint-interface=“com.jbossatwork.ws.InventoryEndpoint“ * service-endpoint-bean=“com.jbossatwork.ejb.InventoryFacadeBean“ * * erface * service-endpoint-class=“com.jbossatwork.ws.InventoryEndpoint“ * */ public class InventoryFacadeBean implements SessionBean ,/* * erface-method * view-type=“all“ * * */ public CarDTOArray findAvailableCars() throws EJBException CarDTOArray carDTOArray = new CarDTOArray(); CarDTO cars = (CarDTO) listAvailableCars().toArray(new CarDTO0); carDTOArray.setCars(cars); return carDTOArray; /* * erface-method * view-type=“both“ * * */ public List listAvailableCars() throws EJBException ,Web Services 与 Collections,package com.jbossatwork.dto; import java.io.Serializable; import com.jbossatwork.dto.CarDTO; public class CarDTOArray implements Serializable private CarDTO cars; public CarDTOArray() public CarDTO getCars() return cars; public void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论