欢迎光临
我们一直在努力

用J2EE开发WebService-JSP教程,J2EE/EJB/服务器

建站超值云服务器,限时71元/月

i. 概要

基于xml的web服务是参照b2b通信协作模式制定的新的规范。它提供了概念上和结构上的,适用于各种不同平台和产品的基础。现在,开发者可以利用j2ee技术来开发基于xml的web服务。他们可以利用现存的j2ee技术来开发完整的,遵从xml标准的,能完全共通的web服务。无需重新设计或者构造现有的j2ee系统,开发人员就可以构建复杂的强大的web服务应用。

ii. 介绍 web服务是一种可以接收从internet或者intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。这种技术允许网络上的所有系统进行交互。随着技术的发展,一个web服务可以包含额外的指定功能并且可以在多个b2b应用中协作通讯。

web服务正在不断完善,并且以一种非常智能的动态的方法来进行。这些灵活的web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理,用以产生一个唯一的,定制的方案。这种协作机制对那些只对最终结果有兴趣的用户来说,是完全透明的。

这种web服务所遵循的xml标准可以增进事物通信的性能。开发人员将可以利用不同的平台,产品和标准来实现很多种可能。通过这种标准,开发人员可以建立一个系统使他们的web服务提供最大的协同工作的能力。

这份白皮书描述了如何方便地利用java和xml技术来实现web服务构架。它说明了web服务中的每一个关键部分以及如何使他们结合在一起。你将会对基于xml的web服务的结构以及如何与j2ee结合,有一个更加深入的了解我们从如何利用j2ee建立web服务开始。这部分将使你对如何建立一个web服务有一个了解。

iii. 总结 一般来说,在不同的事务之间进行电子通信协作会有很多阻碍。全异的系统,安全限制和不相同的数据格式,导致很多b2b系统在他们自己的领域或者客户群中形成唯一。web服务将改变这一切,使不同的事务互相通信变为可能,值得注意的是,这会降低建立商业站点的开发和维护成本。

在建立web服务的时候,有三个主要步骤:

1. 建立客户端联接 为了允许applets,applications,商业合作伙伴,浏览器和pdas 使用web服务。

2. 实现web服务 包括工作流,数据传送,商业逻辑以及数据访问。这些功能是隐藏在web服务后,并且为客户端工作的。

3. 联接后台系统 这个系统可能包括一个或多个数据库,现存的企业信息系统,商业合作伙伴自己的系统或者web服务,以及在多个系统中共享的数据。

你可以利用j2ee来实现这三个目标。用j2ee开发web服务基于以下两个技术:

xml 技术.

在web服务中,xml标准是非常重要的。xml是一种数据格式,它可以以一种连贯的方式来表现数据,并且可以在网络中以点对点的形式传送。这些不同的xml标准连同指定的处理方法是设计来支持特定的行为的。

java 技术.

developers开发人员利用 j2ee apis来创建事务和表现的逻辑,访问xml文档,以及对xml文档进行操作。信任被证实可行的java技术是非常重要的,因为它允许开发者利用现有的下部构造,在其上构建新的功能。开发者可以继续利用j2ee的标准api以及各种优秀的组件来开发系统。现在,开发者可以利用j2ee中提供的java api for xml parsing (jaxp) 来开发web服务,我们将在稍后介绍。这个新的apis主要用来处理xml数据格式以及服务,将使开发变得更容易,效率更高。

图 1 表现了基于j2ee的web服务的核心构架。请注意,很多apis在这里并没有全部表示出来,象用来解析或者传送消息的。但是,那些基于j2ee的标准,协议以及主要的子系统都表示出来了。

图 1让我们进一步看一下利用j2ee来创建web服务的细节。

iv. 客户端联接

客户端联接是关于web服务的使用者如何来使用你的系统。表格 1 显示了三种主要使用系统的客户。

客户类型 |样例 |如何联接

============================================================================

商业合作伙伴 |代理商,客户群 |基于xml的web 服务技术 (soap, uddi, wsdl, ebxml)

瘦客户端 |浏览器,pdas,无线设备 |http 协议

胖客户端 |应用小程序,应用程序,已经存在的系统 |iiop协议

============================================================================

表格 1商业合作伙伴的联接

第一种访问web服务的客户类型是商业合作伙伴。他们可能使用很多种类型的编程语言,中间件或者硬件。当他们访问尼的系统的时候,web服务要求返回一个xml文件。这个文件具有标准的标记来表示商业数据,并且允许不同的系统通过这个来交互。

java servlets

当一个商业合作伙伴向web服务发布一个请求的时候,接收请求的是一个java servlet. 这个servlet是一个在管理容器中运行,负责接收请求和响应的java对象。它可以以很多种协议返回请求结果,象http, ftp或者pop。在这个例子中servlet通常使用http来响应请求,这样的话,web服务就可以利用http来通过防火墙了。

当一个请求到达j2ee web服务的时候,以下操作会发生,见图2

1. java servlet接收xml 文档。

2. servlet 处理传入的基于xml的请求

3. servlet调用一个或者多个enterprise javabeans (ejb) 组件来处理数据。

4. ejb组件进行他们自己的处理,可能会调用其他存在的系统。

5. ejb 组件把结果返回给servlet。

6. servlet 把结果汇集到xml文档中。

7. servlet 把xml传送到客户端。

图 2为了实现商业合作伙伴的联接,必须有一种方法来发布,描述,定位以及调用一个web服务。我们现在来描述如何达到这个目的。

uddi 在用户能够调用web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件。所以,我们需要一种方法来发布我们的web服务。

uddi (universal description, discovery, and integration) 是一个主要针对web服务供应商和使用者的新项目。uddi 项目中的成员可以通过uddi business registry (ubr) 来操作web服务的调用,ubr是一个全球性的服务。web服务供应商可以在ubr中描述并且注册他们的服务。用户可以在ubr中查找并定位那些他们需要的服务。

uddi是一种根据描述文档来引导系统查找相应服务的机制。uddi包含标准的"白皮书"类型的商业查询方式,"黄皮书"类型的局部查找,以及"绿皮书"类型的服务类型查找。"绿皮书"允许开发者精确查找符合服务类型的所有服务。(这一段翻的比较奇怪)

uddi利用soap消息机制(标准的xml/http)来发布,编辑,浏览以及查找注册信息。它采用xml格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

jaxr

为了支持uddi在java平台上的功能,java apis for xml registries (jaxr)允许开发者来访问注册中心。值得注意的是,jaxr并不是建立web服务必需的,你可以利用其他常用的xml apis来直接集成这些协议。jaxr是一个方便的api,它提供了java api来发布,查找以及编辑那些注册信息。它的重点在于基于xml的b2b应用,复杂的地址本查找以及对xml消息订阅的支持等web服务。它也可以用来访问其他类型的注册中心,象ebxml注册中心(稍候描述)。

这些对web服务的注册信息进行的操作,可以使用当前的一些web服务工具来完成(例如第三方的soap和ebxml消息工具)。另外,当jaxp提供了一致并具有针对性的api来完成这些操作,这将使开发变得更加容易。

wsdl

对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。wsdl (web services description language) 规范是一个描述接口,语义以及web服务为了响应请求需要经常处理的工作的xml文档。这将使简单地服务方便,快速地被描述和记录。

以下是一个wsdl的样例:

<?xml version="1.0"?>

<definitions name="stockquote"

targetnamespace="http://example.com/stockquote.wsdl"

xmlns:tns="http://example.com/stockquote.wsdl"

xmlns:xsd1="http://example.com/stockquote.xsd"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>

<schema targetnamespace=http://example.com/stockquote.xsd

xmlns="http://www.w3.org/2000/10/xmlschema">

<element name="tradepricerequest">

<complextype>

<all>

<element name="tickersymbol" type="string"/>

</all>

</complextype>

</element>

<element name="tradeprice">

<complextype>

<all>

<element name="price" type="float"/>

</all>

</complextype>

</element>

</schema>

</types>

<message name="getlasttradepriceinput">

<part name="body" element="xsd1:tradepricerequest"/>

</message>

<message name="getlasttradepriceoutput">

<part name="body" element="xsd1:tradeprice"/>

</message>

<porttype name="stockquoteporttype">

<operation name="getlasttradeprice">

<input message="tns:getlasttradepriceinput"/>

<output message="tns:getlasttradepriceoutput"/>

</operation>

</porttype>

<binding name="stockquotesoapbinding"

type="tns:stockquoteporttype">

<soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="getlasttradeprice">

<soap:operation

soapaction="http://example.com/getlasttradeprice"/>

<input>

<soap:body use="literal"/>

</input>

<output>

<soap:body use="literal"/>

</output>

</operation>

</binding>

<service name="stockquoteservice">

<documentation>my first service</documentation>

<port name="stockquoteport" binding="tns:stockquotebinding">

<soap:address location="http://example.com/stockquote"/>

</port>

</service>

</definitions>

它包含了以下的关键信息:

· 消息的描述和格式定义可以通过xml文档中的和 标记来传送。

· 标记中表示了消息传送机制。 (e.g. request-only, request-response, response-only) 。

· 标记指定了编码的规范 。

· 标记中表示服务所处的位置 (url)。

wsdl在uddi中总是作为一个接口描述文档。因为uddi是一个通用的用来注册wsdl规范的地方,uddi的规范并不限制任何类型或者格式描述文档。这些文档可能是一个wsdl文档,或者是一个正规的包含导向文档的web页面,也可能只是一个包含联系信息的电子邮件地址。

现在java提供了一个 java api for wsdl (jwsdl)规范。它提供了一套能快速处理wsdl文档的方法,并且不用直接对xml文档进行操作,它会比jaxp更方便,更快速。

图 3 显示了如何使用wsdl 和 uddi。

图 3

soap

当商业用户通过uddi找到你的wsdl描述文档后,他通过可以simple object access protocol (soap) 调用你建立的web服务中的一个或多个操作。

soap是xml文档形式的调用商业方法的规范,它可以支持不同的底层接口,象http(s)或者smtp。之所以使用xml是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。之所以使用http是因为几乎所有的网络系统都可以用这种协议来通信,由于它是一种简单协议,所以可以与任何系统结合,还有一个原因就是它可以利用80端口来穿越过防火墙。 soap的强大是因为它简单。soap是一种轻量级的,非常容易理解的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务平台供应商那里获得。

从技术角度来看,soap详细指明了如何响应不同的请求以及如何对参数编码。一个soap封装了可选的头信息和正文,并且通常使用http post方法来传送到一个http 服务器,当然其他方法也是可以的,例如smtp。soap同时支持消息传送和远程过程调用。以下是一个soap请求。

post /stockquote http/1.1

host: www.stockquoteserver.com

content-type: text/xml; charset="utf-8"

content-length: nnnn

soapaction: "some-uri"

<soap-env:envelope

xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"

soap-env:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/>

<soap-env:header>

<t:transaction xmlns:t="some-uri" soap-env:mustunderstand="1">

5

</t:transaction>

</soap-env:header>

<soap-env:body>

<m:getlasttradeprice xmlns:m="some-uri">

<symbol>sunw</symbol>

</m:getlasttradeprice>

</soap-env:body>

</soap-env:envelope>

jax/rpc

为了使开发人员专注于建立象soap那样的基于xml的请求,jcp正在开发基于rpc (jax/rpc) 的java api。jax/rpc是用来发送和接收方法调用请求的,它基于xml协议,象soap,或者其他的象xmlp (xml protocol,要了解更多可以参考http://www.w3.org/2000/xp/)。jax/rpc使你不用再关注这些协议的规范,使应用的开发更快速。不久,开发人员就不用直接以xml表示方法调用了。

目前有很多第三方实现了soap,开发人员可以在不同的层次上调用soap,并选择使用哪一种。将来,jax/rpc会取代这些apis并提供一个统一的接口来构造以及处理soap rpc请求。

在接收一个从商业伙伴那里过来的soap请求的时候,一个java servlet用jax/rpc来接收这个基于xml的请求。一旦接收到请求后,servlet会调用商务方法,并且把结果回复给商业伙伴。

ebxml 对于具有高扩展性的商业交易来说,他们需要一种可信任的结构来实现商业事务,多请求的事务,计划以及文档流程,应用的需求经常超越了基于纯soap的实现。因为soap只是提供了一个底层的结构,而你可能需要一个更高级的框架结构。

ebxml就是为了这个目的的,它是一套处理b2b应用间的合作与通信的xml规范。以下是ebxml中的关键组件:

collaboration protocol profile (cpp)

cpp提供了一种标准并且简单的方法描述了公司提供的产品。另外,它还描述了消息交换的能力以及公司支持的商务合作。它也描述了公司的商务处理方法,包括合伙人如何与公司合作。cpp定义了b2b交易中双方的商务协作。例如,它同时定义了买卖双方的商务处理方法。

collaboration protocol agreement (cpa)

cpa描述了两个公司之间进行交易时的详细需求以及机制。它包含有由手工或者自动从经过买卖双方认可的cpps中的信息。这个cpa是双方进行指定交易的合约。 cpp和cpa的样例,以及关于规范的细节可以从以下网站获得:

http://ebxml.org/project_teams/trade_partner/cpp-example.xml

http://ebxml.org/project_teams/trade_partner/cpa-example.xml

http://www.ebxml.org/specs/ebccp.pdf

business process and information modeling

ebxml还以xml的形式描述了商业事务处理的规范。它包括交易,文档流程,数字通信,数据封装格式以及其他更多。这些规范是用来建立cpps,描述以及共享商业事务和信息时用的。

core components

ebxml中另外一个重要的部分是一系列的xml标记,我们叫它核心组件。这些标记包含了商务数据,象日期,税,账户,交易合同以及其他的。它指明了商业合约和实体,但对每个不同的行业,可能都不一样。

messaging

ebxml消息格式包含了所有相关的消息导向信息(同步或者异步,可靠性)。一般来说,一个ebxml消息包含了cpa中的可视化内容,并强制执行交易规则。 ebxml是建立在soap消息封装机制上的。它扩展了soap的协议,增加了多层框架结构来支持附件,安全性以及传送的可靠性。

registry/repository

ebxml注册中心是存储cpps, cpas, ebxml核心组件和与ebxml相关的文档的服务。它具有强大的查询功能,允许用户查找相关的组件以及发掘潜在客户。jaxr api也可以用来访问ebxml注册中心。商业服务定义了cpps,并且被存储在ebxml注册中心,然后发布到uddi中。一个关键的概念是,uddi提供了一个全球唯一的web服务的描述信息,但那些真实的信息,还是保存在本地的ebxml库中。这样的话,一个潜在的客户首先到uddi中查找相关内容,然后根据这些到ebxml库中找cpps或者其他相关文档。

jaxm

当从商业合作伙伴那里接收一个web服务的请求时,我们需要java api实现一个servlet来处理ebxml消息,就象我们用jax/rpc来处理soap请求一样。

java api for xml messaging (jaxm)

是集成xml消息标准(象ebxml消息或者soap消息)的规范。这个api是用来推动xml消息处理的,它检测那些预定单的消息格式以及约束。它控制了所有的消息封装机制,用一种直观的方式分割了消息中的信息,象路由信息,发货单。这样,开发人员只要关注消息的有效负载,而不用去担心那些消息的重复处理。

目前的开发人员用jaxp来实现jaxm将要提供的功能,jaxm将会提供一套非常具有针对性的api来处理基于xml的消息传送。这将大大简化开发人员的代码,并使它们具有统一的接口。

jaxm和jax/rpc的差别在于处理消息导向的中间件以及远程过程调用的不同。jaxm注重于消息导向,而jax/rpc是用来完成远程过程调用的。以下是图解。

图 4

请注意,在jaxm 和 jax/rpc技术成熟之前,开发人员还是依赖于第三方的soap apis,象apache soap, idooxoap, 以及 glue。当jaxm 和 jax/rpc正式发布后,它将为当前不同的soap和ebxml消息提供统一的接口。就象jdbc位多种不同的数据库提供统一的接口。

以上是对于让商业合作伙伴访问你的web服务的讨论。下面我们来讨论瘦客户端和胖客户端。

thin client connectivity

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用J2EE开发WebService-JSP教程,J2EE/EJB/服务器
分享到: 更多 (0)

相关推荐

  • 暂无文章