一、 Web Service的简介
1、 什么是Web Service
Web services是建立可互操作的分布式应用程序的新平台。
Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
Web service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。
基础的 Web Services 平台是 XML + HTTP。
HTTP 协议是最常用的因特网协议。
XML 提供了一种可用于不同的平台和编程语言之间的语言。
Web services 平台是简单的可共同操作的消息收发框架。它仍然缺少许多诸如安全和路由等重要的特性。但是,一旦 SOAP 变得更加高级,这些事项就会得到解决。
Web services 有望使应用程序更加容易通信。
★ Web services 把 Web 应用程序提升到了另外一个层面
通过使用 Web services,您的应用程序可向全世界发布功能或消息。
Web services 使用 XML 来编解码数据,并使用 SOAP 借由开放的协议来传输数据。
通过 Web services,您的会计部门的 Win 2k 服务器可与 IT 供应商的 UNIX 服务器进行连接。
★ Web services 有两种类型的应用
可重复使用的应用程序组件
有一些功能是不同的应用程序常常会用到的。那么为什么要周而复始地开发它们呢?
Web services 可以把应用程序组件作为服务来提供,比如汇率转换、天气预报或者甚至是语言翻译等等。
比较理想的情况是,每种应用程序组件只有一个最优秀的版本,这样任何人都可以在其应用程序中使用它。
连接现有的软件
通过为不同的应用程序提供一种链接其数据的途径,Web services有助于解决协同工作的问题。
通过使用 Web services,您可以在不同的应用程序与平台之间来交换数据。
★ Web Services 拥有两种基本的元素。
它们是:SOAP及WSDL
(1)什么是 SOAP?
n SOAP 指简易对象访问协议
n SOAP 是一种通信协议
n SOAP 用于应用程序之间的通信
n SOAP 是一种用于发送消息的格式
n SOAP 被设计用来通过因特网进行通信
n SOAP 独立于平台
n SOAP 独立于语言
n SOAP 基于 XML
n SOAP 很简单并可扩展
n SOAP 允许您绕过防火墙
n SOAP 将作为 W3C 标准来发展
(2)什么是 WSDL?
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
n WSDL 指网络服务描述语言
n WSDL 使用 XML 编写
n WSDL 是一种 XML 文档
n WSDL 用于描述网络服务
n WSDL 也可用于定位网络服务
n WSDL 还不是 W3C 标准
2、 什么是JWS
JWS(Java Web Service)是Java应用平台上专门用于开发Web服务系统及面向服务系统的产品,它的最新版本是2.0,Java EE 5和Java SE 6都对JWS 2.0提供支持。
在JWS 2.0,Java定义了一系列新的标准,JMS本身也包含了一些工具,如JAX-WS 2.0,JAXB 2.0,JAXP 1.4,SAAJ 1.3以及WS-Metadata等。
面向服务的系统往往由多个具有不同的子功能的独立组件构成,通过他们之间良好的相互协作,可以实现复杂的需求。面向服务系统的这个特点,要求独立组建之间有公共的接口,这些用于交换数据的公共接口有良好的定义。由于要实现组件之间的数据通信,这些具有良好定义的接口就必须要被别的组件识别并正确理解,才能实现协作。
在定义了公共的接口后,还存在具体的数据交换问题,即双方需要遵循一个共同的数据交换标准,这个数据交换标准称为协议。要在独立的组件之间进行通信,需要一系列标准来严格规定数据通信的格式和规则。
Web Service的出现解决了上述问题,利用WSDL定义统一的接口格式,用SOAP消息统一输入/输出参数的统一格式。SOAP消息可以由多种途径传递,比如,通过HTTP,SMTP及JMS协议传递。以HTTP为例,在服务使用端,WSDL的接口定义可以通过HTTP-GET请求获取,而SOAP应答消息及回复消息的传输可以通过HTTP-POST请求来实现。这样,基于WSDL和SOAP消息机制就可以满足面向服务应用系统开发的需求。
Web Service平台架构主要由三部分构成:序列化及反序列化子系统、调用子系统及发布子系统。这三个子系统并不受具体语言的限制,也不受平台和框架的限制,无论使用Java语言还是.NET语言,无论使用Axis平台还是JWS来开发web服务,都会涉及这三个最基本的功能模块。
(1)序列化及反序列化
在JMS中将一个Java对象转化为一个XML元素的过程,称为序列化。反之将一个XML元素转化为相应的Java 对象的过程,称为反序列化。序列化和反序列化的过程要依赖于Java类和XML-Scheme之间的映射关系,JWS有独立 的序列化和反序列化子系统用来负责完成这些映射及转化。
在web服务的客户端,序列化过程将参数转化为xml结点,进而封装成Soap请求消息,发送至服务器端的web服务端点。获得返回值时,反序列化过程启动,它将返回值从SOAP消息中指定的xml结点中取出,然后将它转化为客户端相对应的Java对象。 转化规则的定义在JWS中是通过JAXB的注释来完成的。新版的JAXB简化了绑定规则的描述,它允许直接将规则以注解的形式写入Java类。
例如:
@Entity
@Name("hotel")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
@XmlType(name="", propOrder = {
"id",
"img",
"name",
"address",
"city",
"state",
"zip",
"country",
"price",
"ipAddress"
})
@XmlRootElement(name="Hotel")
public class Hotel implements Serializable
{
private Long id;
private String img;
private String name;
private String address;
private String city;
private String state;
private String zip;
private String country;
private BigDecimal price;
private String ipAddress = "192.168.1.112";
@Id @GeneratedValue
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
@Length(max = 50)
@NotNull
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
@Length(max=50) @NotNull
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Length(max=100) @NotNull
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
@Length(max=40) @NotNull
public String getCity()
{
return city;
}
public void setCity(String city)
{
this.city = city;
}
@Length(min=4, max=6) @NotNull
public String getZip()
{
return zip;
}
public void setZip(String zip)
{
this.zip = zip;
}
@Length(min=2, max=10) @NotNull
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
}
@Length(min=2, max=40) @NotNull
public String getCountry()
{
return country;
}
public void setCountry(String country)
{
this.country = country;
}
@Column(precision=6, scale=2)
public BigDecimal getPrice()
{
return price;
}
public void setPrice(BigDecimal price)
{
this.price = price;
}
@Transient
public String getIpAddress() {
return ipAddress;
}
public void setIpAddress(String ipAddress) {
this.ipAddress = ipAddress;
}
@Override
public String toString()
{
return "Hotel(" + name + "," + address + "," + city + "," + zip + ")";
}
}
(2)服务调用的过程
在面向服务的分布式系统中,一般将传统的客户服务器框架中的客户端Client称为服务的消费者,而将服务器端称为服务的提供者。
按照现在的web服务标准,一个服务被调用时,在服务的提供端大致的处理过程如下:
①接受并预处理SOAP请求消息,例如效验,处理SOAP消息报文头。
②从消息中获取该消息希望调用的接口和具体操作。
③利用web服务提供的支持,找到具体的实现对象,并调用该对象的接口。这个对象可以由不同的语言实现。JWS支持从WSDL到Java的映射,可以通过WSDL找到与它相对应的Java服务端点实现类。
④使用序列化工具的反序列化过程,将SOAP请求消息中的服务请求参数取出,传递给步骤3中的目标对象的相应函数。
⑤目标Java对象执行相应的操作,将计算的结果以对象形式返回。
⑥使用序列化工具的序列化过程,根据wsdl中的定义,将步骤5中的结果对象序列化成XML元素,并封装到SOAP回复消
息中。
⑦将步骤6中的SOAP回复消息发送回服务调用端。
与之对应的,在服务使用端的调用过程如下:
①首先创建服务端点接口对象SEI(Service Endpoint Interface),在Web服务客户端一般都会有相应的工厂类完成SEI对象的实例化。在JWS中,SEI对象一般是由Java代理来实现的。
②客户端通过SEI调用其中封装的web服务接口。
③利用序列化工具的序列化过程,根据WSDL的定义,将客户端的调用接口的参数转化成XML元素,再将该元素封装在SOAP请求消息里。
④在同步模式下,在SOAP请求消息发出后,客户端会等待SOAP应答消息;异步模式下,客户端顺序执行后续代码,直到通过监听器接收到SOAP请求消息里。
⑤解析从服务器端获得的SOAP应答消息,使用序列化工具中的反序列化过程,将SOAP应答消息中的数据转化成客户端对象,该对象的值就是被调用服务的返回值。
(3)web服务的发布
以JMS为例,web服务发布系统的主要功能
①以URL的形式公开被发布的WEB服务的WSDL文件,并绑定SOAP请求消息和Java目标类。
②发布JAVA目标文件(例如Java Object文件,WAR文件,JAR文件及相关配置文件等)。
③配置序列化和反序列化子系统。
④配置web服务端点监听器和SOAP消息预处理进程。
分享到:
相关推荐
### 用J2EE开发WebService #### 概要 基于XML的Web服务作为一种新兴的规范,借鉴了B2B通信协作模式,为跨平台、跨产品的应用提供了统一的基础框架。利用J2EE(Java 2 Platform, Enterprise Edition)技术开发Web...
**Axis2**是一个强大的WebService容器,支持最新的Web服务标准,例如WS-I基本概要、WS-Security、WS-Addressing等。 **SOAP**(Simple Object Access Protocol)是一种基于XML的信息交换协议,用于在网络上发送结构...
本概要设计说明书详细阐述了平台的主要设计原则、模块结构以及核心功能。 1. **编写目的**: - 主要目标是建立一个Webservice服务系统,以实现实时、高效的数据传输,确保纵向(如区、国家安监部门)和横向(市安...
【标题】:应用Axis实现WebService 【描述】:本文旨在介绍如何使用Axis框架来开发Web服务,适合已了解Web服务基础概念的Java、XML开发者。 【标签】:互联网 【内容概要】:Apache Axis是一个开源的Java库,用于...
这种编码方式是自动化SOAP互操作性测试的基础,确保不同平台的Web服务能正确解析对方发送的数据。 ## 2. WSDL互操作性 WSDL(Web服务描述语言)是另一种关键因素,它描述了Web服务的接口,包括输入、输出、错误...
- CRM系统的主要目标是提供一个基础模块,专注于用户管理和授权管理,通过WebService为其他软件系统提供统一的权限管理服务。它旨在实现企业客户资源的信息化,以便更好地为企业创造价值。 2. **系统角色与需求** ...
内容概要:本应用主要使用vue框架+bootstrap前端框架+WebService,通过对百度智能云中的机器翻译WebApi资源的调用完成整个设计。在实践中掌握部分前端框架的用法,对前后端联调有初步的认识和理解,培养前端开发的...
设计理念是构建视频社区系统的基础。该系统以打造一个集资讯中心、魅力房间、靓丽主播、社区指南中心等于一体的多功能视频社区为目标,旨在为用户提供一个包含即时文本交流、语音交流、互动视频聊天等多渠道交流的...
1. **测试计划**:这是所有测试的基础,是其他测试元件的容器,定义了整个测试的结构和逻辑。 2. **线程组**:模拟并发用户,定义了用户数量并控制他们如何发送请求。 3. **采样器**:实际执行测试请求的地方,可以...
内容概要:本应用主要使用vue框架+bootstrap前端框架+WebService,通过对京东万象中的天气WebApi资源的调用完成整个设计。在实践中掌握部分前端框架的用法,对前后端联调有初步的认识和理解,培养前端开发的兴趣有利...
### jmeter学习概要 #### 一、JMeter概述 **Apache JMeter** 是一款完全由 Java 开发的开源工具,主要用于压力测试和性能测试。它最初被设计出来是为了评估 Tomcat 的前身 JServ 的执行效率,随着项目的成熟和发展...
### Jemeter学习概要详解 #### Jemeter概述 Jemeter是一款完全基于Java的开源性能测试工具,由Apache基金会开发与维护。最初设计目的是评估JServ(Tomcat的前身)的性能,随后发展成为功能全面的性能测试平台,...
系统概要设计 * 在线音乐播放器的架构设计 * 基于WebService的音乐播放器设计 系统 GUI 功能模块设计 * 播放控制模块设计 * 音乐库管理模块设计 * 用户管理模块设计 BaseWidget 基础界面类 * 基础界面类的...
在系统概要设计环节,文章展示了系统功能架构,其中Android端的客户端设计为学生学习课程提供便利。服务器端管理模块则负责用户和课程的管理工作。数据库设计部分,列出了数据库实体及其关系图,包括了用户、学生、...
内容概要:本文详细介绍了基于C#开发的工业触摸屏上位机系统,涵盖了通信模块、界面设计、多线程处理、权限管理和OPC配置等多个方面。首先,通信模块支持串口和以太网双通道,确保稳定可靠的通信。其次,界面设计...
内容概要:本文介绍了JMeter的功能特性及其使用场景,涵盖了从基础知识到高级特性的全面内容。首先对JMeter作了基本介绍,指出这是一个由纯Java开发的开源性能与功能测试工具,支持对Web、Webservice、FTP等多种应用...
- **WebService**:作为连接前端应用与后端数据的重要桥梁,WebService提供了一种跨平台、跨语言的数据交互方式,简化了开发流程。 #### 三、系统架构与设计 ##### 1. 系统设计 系统设计是将需求转化为可执行规范...
- **《JTangKernal模块设计说明书》**:提供了JTangKernal模块的设计细节,包括概要设计和详细设计文档。这对于理解JTangEJB的底层架构和设计原理非常重要。 #### 四、基本概念解析 - **IoC (Inversion of Control)...
【内容概要】:该简历的主人翁是一名拥有多年工作经验的web前端开发工程师,他具有扎实的技术基础和丰富的项目实践经验,对前端开发有浓厚的兴趣,特别在页面布局、JavaScript编程和Web语义化等方面有深入理解。...