工做中接触到了一些webservice应用,进而想整理出一些东西,给组里如我同样的毛头小伙子分享下,后来以为在OSC一直默默潜水了快两年了,好像没留下过什么有价值的东西,就顺路记在这里吧,望老鸟和高手多多批评指正,新手多多交流~java
暂时写了两篇草稿,第一篇是理论篇,介绍了我所认识的webservice,主要摘录了Andrew830314#163.com的《Java的webservice支持》的部份内容,而后加上了我本身对webservice的一些理解,不求多详细复杂,只但愿有JavaWeb基础但没有 webservice基础的开发人员,对 webservice有一个初步的认识,知道它是什么,有什么,作什么的;第二篇是实践篇,介绍了我用cxf作的一个demo,主要参考了http://cxf.apache.org/,力求例子简单直观,让开发人员知道怎样使用最基本的webservice,为掌握 webservice开发预热。web
正文以下apache
SOA(Service-Oriented Architecture)面向服务架构,将应用程序的不一样功能单元经过中立的契约(独立于硬件平台、操做系统、编程语言和应用)联系起来。
@路飞 例如一个iphone上的在线销售系统:服务端基于Java,部署在Linux服务器上,提供了某功能X,例如根据输入的商品ID和数量,从商品库中检索单价,而后计算总额,最后输出总额;客户端基于Object-C,是安装在iphone上的app,提供了某功能Y,例如根据用户选择的商品及其数量,告诉客户所选商品的总额;这里,Y功能须要经过中立的契约(穿越了Linux和IOS,穿越了Java和Object-C)来与X功能通讯,从而使整个应用程序完整。
@路飞 PS 关于iphone和Object-C彻底是我杜撰的,我对iphone和Object-C一无所知,这里只是为了说明“中立的契约”,以及赶时髦。。。要是这个例子有问题,能够换成Windows和.NET。。。。。。
目前来讲,webservice是SOA的一种较好的实现方式,webservice采用HTTP做为传输协议,SOAP(Simple Object Access Protocol)做为传输消息的格式。但webservice并非彻底符合SOA的概念,由于SOAP协议是webservice的特有协议,并未符合SOA的传输协议透明化的要求。
@路飞 webservice这个东西基本实现了上面“中立的契约”的功能:“SOAP做为传输消息的格式”,SOAP格式实际上是使用了xml这种跨平台的文件格式,即webservice传输的消息被解析成xml格式,而后“webservice采用HTTP做为传输协议”,http协议固然各个平台都支持了,因而从传输通道到传输的内容都实现了跨平台。具体细节如SOAP传输消息的格式暂时还请不要太深究,个人经验是没亲身试用以前越想得多越不利于深刻学习。。。
@路飞 “并未符合SOA的传输协议透明化的要求”这一点,我理解的也不很清楚,下面是一点不成熟的见解:SOAP是webservice的消息传输格式,X功能和Y功能想要使用webservice进行通讯,就必须针对SOAP格式进行额外的开发工做,而不能直接使用对全部平台都透明的消息传输格式格式(如http,即不只使用http作传输通道,还直接使用它的消息格式携带信息,而不是先转成SOAP格式再让http传输(最新研究 JAX-RS发现这个webservice好像差很少实现了,须要进一步确认)(果真是知道的越多,才发现本身无知的越多,JAX-RS刚看到不久,结果引出了这个很差处理的问题,对新手的建议是这部分了解下就能够了,咱们的目的是掌握webservice的最小功能,其余的功能等有基础了再进一步学习))。但是既然想经过“中立的契约”跨平台交互,这种本地适应化工做不是必须的么,“传输协议透明化”是为了追求本地适应化的最小工做量么?
@路飞 我工做中接触到的webservice的中立性主要体如今了跨应用上,即主要用于不一样的Java应用进行交互,如服务端和客户端是两个不一样的应用,而后客户端经过webservice调用服务端的某核心功能,跨硬件平台、编程语言这种复杂应用还没接触到~
@路飞 总结一下,我所理解的最小功能的webservice,就是A和B两个java应用,其中A为服务端server,对外提供了某项功能的webservice接口,B为客户端Client,须要调用这个webservice接口实现某业务。这其中涉及到的东西包括A如何把本身的普通方法对外暴露成webservice接口,以及B如何使用别的应用(A)的接口为本身的业务工做。这些东西在第二篇实践篇中将会有一个详细的demo级别的demo为你们作介绍,该demo的最低技能要求为:一、知道什么是javaweb的MVC分层,二、知道Spring配置IOC是什么。实践篇还在修改中,但愿尽快发出来,敬请期待~
下面是一些更抽象(至少对于我是。。。)的东西,新手建议了解下就能够了
PS 如今还只接触了JAX-WS,在实践篇介绍的demo也是基于JAX-WS的,JAX-RS在学习中,可能在实践篇2.0会介绍
Java中共有三种WebService规范,分别是
JAX-WS(Java API For XML-WebService)
JAXM&SAAJ(Java API For XML Message)
JAX-RS,是Java针对REST(Representation State Transfer)制定的服务规范
JAX-WS和JAXM&SAAJ都是基于SOAP的web服务,相比之下JAXM&SAAJ暴露了SOAP更多的底层细节,若是想控制SOAP消息的更多细节,可使用;而JAX-WS更加抽象,隐藏了更多的细节,更加面向对象,实现时基本不须要关系SOAP的任何细节。
JAX-RS REST是一种软件架构模式,不是像SOAP那样自己承载着一种消息协议。REST中重要的两个概念就是资源定位和资源操做,而HTTP协议刚好完整的提供了这两个要点,HTTP协议中的URI能够完成资源定位,GET、POST、OPTION等方法能够完成资源操做,所以REST彻底依赖HTTP协议就能够完成Web服务,而不像SOAP协议那样只利用HTTP的传输特性,定位与操做由SOAP协议自身完成。
看的累了吧,休息下,来个小福利