WebService(一)
1.简介
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。分布式:设计定好接口,每个系统开放具有一定功能的接口来对外提供服务和数据交换 。Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。
三要素:
SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。
2.SOAP(简单对象访问协议)
SOAP曾经代表“Simple Object Access Protocol”,但是这种缩写已经在标准的1.2版后被废止了。1.2版在2003年6月24日成为W3C的推荐版本。
soap协议是webservice是传输协议,即简单对象访问协议。Soap协议是xml格式,理解为基于http传输xml数据。
Soap=http+xml
- SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。
- 采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。
- 采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。
- xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。
- XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。
- 当前非SOAP协议的webService以轻量为首要目标,比如rest webservice也是webservice的一种方式。
wsdl
WSDL 是基于 XML 的用于描述Web Service及其函数、参数和返回值。通俗理解Wsdl是webservice的使用说明书。
wsdl是webservice的使用说明书。根据wsdl去如何调用webservice。从下往上读,找到service服务视图,通过binding找到portType(服务类)。
UDDI
UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。企业将自己提供的Web Service注册在UDDI,也可以使用别的企业在UDDI注册的web service服务,从而达到资源共享。
UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。
但是使用webservice并不是必须使用UDDI,因为用户通过WSDL知道了web service的地址,可以直接通过WSDL调用webservice。
UDDI是一个目录服务,存储了全球的webservice地址。
UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。
Wsdl是什么?
WSDL 指网络服务描述语言(Web Services Description Language)。
WSDL是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
WSDL 是一种 XML 文档
WSDL 用于描述网络服务
WSDL 也可用于定位网络服务
wsdl 说明书结构
<service> 服务视图,webservice的服务结点,它包括了服务端点
<binding> 为每个服务端点定义消息格式和协议细节
<portType> 服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType
<message> 定义一个操作(方法)的数据参数(可有多个参数)
<types> 定义 web service 使用的全部数据类型
wsdl 说明书阅读方式
从下往上读
先找到服务视图,通过binging找到protType,找到了protType就找到了我们要调用的webservice方法。
3.JAX-WS
JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,
SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,
为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,
JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,
相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,
隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。
需要大家重视,当前比较流行,因为jax-RS可以发布 rest风格webservice,因为rest的webservice不采用soap传输,直接采用http传输,可以返回xml或json,比较轻量。
4.优缺点
优点:
1.采用xml支持跨平台远程调用。
2.基于http的soap协议,可跨越防火墙。
3.支持面向对象开发。
4.有利于软件和数据重用,实现松耦合。
缺点:
1.由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高,
随着soap协议的完善,soap协议增加了许多内容,
这样就导致了使用soap协议去完成简单的数据传输的效率不高。
如果直接用http传输自定义数据内容比webservice开发更快捷,
例如第三方支付公司的支持接口。
5.soap与socket
1.WebService 通过Soap协议进行传输
Socket需要经过三次握手之后才能进行传输。
2.soap协议
基于http的应用层协议,http也是应用层协议。
基于socket传输数据。http或soap都是跨平台的。
jaxws开发webService,传输数据是面向对象的方式,不用程序员自己解析数据。
因为webservice要经过两次序列化,所以传输速度不快。
缺点:
传输慢。
优点:
面向对象开发,soap协议是一个标准协议,方便进行跨平台,跨公司进行接口开发。
应用场景:
不考虑传输速度前提下,根据soap标准协议,方便进行接口定义。
3.Socket协议
是一种传输协议。
常用的是udp、tcp。
Socket是操作系统提供的一套网络接口,不同的编程语言都有实现。Socket是跨平台的。
传输数据时,需要程序员自己去解析数据流。
应用场景:
如果要考虑传输速度,优先使用socket
Socket:
优点:传输速度快
缺点:需要手动解析数据流,如果用socket传输数据需要接口双方定义接口协议格式(传什么格式xml,传什么json???),自定义协议,不方便进行接口开发。
场景:要考虑传输速度,优先使用socket,但是需要自定义协议(接口双方定义一个传输的数据格式)。
Socket开发:
注意:socket服务可持续性,高并发性。
Webservice:
优点:采用标准soap协议,接口双方只要遵循标准协议开发使用接口。通过wsdl知道接口内容。方便进行接口开发。
缺点:传输速度慢。
场景:公开接口,在不考虑客户端类型或传输性能,接口面向整个互联网,优先考虑webservice。
Webservice性能差的原因:如果传输soap经过两次对象序列化,webservice的性能依赖中间件的性能。
6.CXF
Cxf,apache下的webservice的开源框架。
Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。Apache CXF 是一个开源的 web Services 框架,CXF 帮助您构建和开发 web Services ,它支持多种协议,比如:SOAP1.1,1,2、XML/HTTP、RESTful HTTP 或者 CORBA。
CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
Cxf是基于SOA总线结构,依靠spring完成模块的集成,实现SOA方式。
灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),weblogic上面。
7.Axis2
如果只是需要快速搭建webservice,建议用Jaxws,不需要任何配置,直接java代码搞定;
Eclipse自带的axis2,使用axis2搭建webservice也很方便,不过相对上面还是复杂些;
Axis2是Apache Axis2的简称,是最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构)。
WebService(一)的更多相关文章
- webService
什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用. 1:从WebService的工作模式上 ...
- 开始webservice了
一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...
- Spring WebService入门
Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布 ...
- 浅谈跨域以及WebService对跨域的支持
跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源. 在 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1. ...
- java调用CXF WebService接口的两种方式
通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...
- VS2010编写WebService与在IIS的发布<之简单讲解>
工具VS2010,window环境win7 一:Webservice的创建与方法查看调用 1.新建空web应用程序项目 2.新建web服务 3.自动生成 4.直接跑起来,可以看到有2个方法 5.点击H ...
- webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口
webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...
- webService学习之路(二):springMVC集成CXF快速发布webService
继上一篇webService入门之后,http://www.cnblogs.com/xiaochangwei/p/4969448.html ,现在我将我周六在家研究的结果公布出来 本次集成是基于之前已 ...
随机推荐
- CentOS7和OpenStack的笔记(一)
CentOS7和OpenStack的笔记(一) 最近搞CentOS7系统和OpenStack框架,整了近一个星期,系统装了好几次,框架搭了又从搭.虽然最后的实例没能启动成功,但是在这专研的一个星期里, ...
- python学习之路-基本数据类型1 变量的概念、数字、字符串
1 什么是数据类型? 每种编程语言都有自己的数据类型,用于标识计算机可以认识的数据,Python中主要的数据类型为字符串,整数,浮点数,列表,元祖,字典,集合七种主要的数据类型,其中以列表,字典为最主 ...
- # 第五周课下测试(ch03)补交
第五周课下测试(ch03)补交 1.( 多选题 | 1 分) 有关gdb调试汇编,下面说法正确的是() A . 可以用disas反汇编当前函数 B . 以16进制形式打印%rax中内容的命令是 pri ...
- 20155301 《Java程序设计》实验五网络编程与安全
20155301 <Java程序设计>实验五网络编程与安全 实验内容 实验1: 两人一组结对编程:参考http://www.cnblogs.com/rocedu/p/6766748.htm ...
- 20145234黄斐《Java程序设计》实验一—Java开发环境的熟悉(Linux + Eclipse)
实验步骤 由于实验时间比较紧张,这里只有最终结果的截图 (一)命令行下Java程序开发 (二)Eclipse下Java程序开发.调试 (三)练习 实现求正整数1-N之间所有质数的功能,并进行测试 实验 ...
- 【转载】GC基本算法及C++GC机制
原文: GC基本算法及C++GC机制 阅读目录 前言 基本概念 有向可达图与根集 三种基本的垃圾收集算法及其改进算法 1.引用计数算法 2. Mark & Sweep 算法 3. 节点复制算法 ...
- DIRECT3D状态详解
Microsoft® Direct3D®设备是一个状态机.应用程序设置光照.渲染和变换模块的状态,然后在渲染时传递数据给它们. 本节描述图形流水线用到的所有不同类型的状态. 渲染状态 取样器状态 纹理 ...
- 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)
强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...
- SVN部署与简单使用
原文发表于cu:2016-05-24 参考文档: http://www.tuicool.com/articles/Yv2iyu7 http://www.centoscn.com/CentosServe ...
- GitLab 搭建与使用
操作系统:Centos 7 环境:VM虚拟机 0x00:这里说下VM 虚拟机的配置 然后选择NAT模式 接下来配置网络 cd /etc/sysconfig/network-scripts/ 编辑:vi ...