Portal技术标准简介

JEE作为建立在Java平台上的企业级应用解决方案,经过这些年不断发展,已经成为企业级开发的工业标准和首选平台。众多厂商如IBM,BEA和 Oracle等都围绕该规范推出了相应的,功能强大的产品。JEE规范组中最受业界认同和取得最大成功的就是JEE Web层面规范,发展到今天,已经步入门户(Portal)的时代。

门户,简言之就是提供包括内容聚合、单点登陆、个性化定制和安全管理等服务的基础Web平台。 在Java EE里,Portal有两种标准: JSR 168和 JSR 286。同时OASIS组织还为Portal的远程调用定义了相关WebServicds标准 WSRP。

[size=large][b]名词解释[/b][/size]
[table]
|名词|解释|
|Portal|门户,提供包括内容聚合、单点登陆、个性化定制和安全管理等服务的基础Web平台。|
|Portlet|Portlet 是基于 web 的 Java 组件。它由 Portlet 容器管理,能够处理请求,产生动态内容。 Portlet 被 Portal 用作为可插拔的用户接口组件,为信息系统提供展现。由 Portlet动态产生的内容也被叫做 fragment 。 fragment 是遵循某种规则的标记(例如:HTML, XHTML,WML),可与其他的fragment一起建立一个完整的文档。一般一个 Portlet 产生的内容和其他的Portlet产生的内容聚集在一起形成Portal网页。|
|Portlet Container|Portlet 在 Portlet 容器中运行, Portlet 容器为 Portlet 提供必需的运行环境。 Portlet 容器包含 Portlet (组件)并且管理它们的生命周期,它也为 Portlet 的参数设置提供持久化的存储。 Portlet 容器不是一个类似于 servlet 容器的独立容器。它是在 servlet 容器上通过扩展方式实现的,并重用 servlet 容器提供的功能。从 Portal 的角度来看, Portlet Container 是 Portal 平台所提供的众多服务之一。
|JSR168,JSR286|由于越来越多的公司开发了各自的 Portal 组件和基于其的 Portal 产品(如Bea, IBM, Oracle, Sun, Sybase, Novell, SAP, Jetspeed, Vignette 等.这种互不兼容的接口实现不断带给程序提供商各种问题和麻烦, 为了解决这种问题, JCP 发布了 JSR168 (Java Specification Request), Portlet Specification, 用以提供不同 Portal 和 Portlets 之间的互用性。JSR 286 是 168 规范的延伸,是目前最新标准规范。
|SSO Single Sign-On|即单点登陆。当一个大系统中存在多个子系统时,用户只需要正确登陆其中任何一个子系统,就可以在各个子系统中来回自由切换和使用授予该用户权限的各种资源。一般可以分为两种类型:Web应用之间的单点登陆和门户 Web 应用和它所连接的后台系统之间的单点登陆。 SSO是任何一个门户产品必须解决的问题,必须提供的服务。
|WSRP|WSRP 是 OASIS 组织的一个规范,它定义了远程门户网站的 Web 服务。通过 Web Service 将远程内容抓取到本地,最后通过本地内容聚合引擎展示出来。
[/table]

[size=medium][b]JSR 168和JSR 286[/b][/size]

Portlet 是部署在容器内用来生成动态内容的 Web 组件,与 servlet 类似,portlet 的整个生命周期从 init 到 destroy 的过程都在 portlet 容器中进行。Java Portlet Specification 对 portlet API、标准化用户数据、参数设置、portlet 请求以及响应、部署、打包以及安全等方面都做了详细的规定,以此来实现 portlet 之间以及 portlet 与 portlet 容器之间的交互和协作。 Java Portlet Specification 1.0, 即 Java Specification Request(JSR)168 发布于 2003 年 10 月。

JSR 168 目前在业界受到广泛支持,而且它由开放源码支持。标准和产品的第一个版本存在一定的缺陷,仅支持最基本的用例,在功能上有一些限制。而且 Java Portlet Specification V1.0 也存在这种情况,因此,经过三年之后,大多数支持 Java Portlet Specification V1.0 的门户产品都提供一些附加扩展,以支持更高级的用例,这些附加的扩展造成了各个门户产品的标准不统一,彼此间的交互协作成了不可避免的问题。为了更好地规范 portlet 开发,以适应业界发展,并提供适应于最高级别用例的标准解决方案,从而为这些高级功能提供互操作性,在 2005 年 11 月开始了 Java Portlet Specification V2.0(称为 JSR 286)的开发,Java Portlet Specification V2.0 已在2008年2月25日正式定稿,并于2008年6月12日正式发布。

[size=medium][b]Portal 标准概念[/b][/size]

一个 Portal 由多个 Portal Page 组成。每个 Portal Page 都包含了多个 Portlet 。一个 Portal Page 的结构如下图:

[img]/upload/attachment/124981/b7bbf9ef-db98-3718-9f14-f888cda51604.png[/img]

每个Portlet Page由一个或多个 Portlet Window 组成,每个 Portlet Window 又分为两部分:一个是Decorations and controls ,它决定了portlet窗口的标题条、控制和边界的样式;另一个是 Portlet Fragment,它由 Portlet Context 填充。

[size=medium][b]Portlet vs Servlet[/b][/size]

* Portlet 在以下方面与 Servlet 相似:
1. Portlet 由特定的容器管理。
2. Portlet 生成动态内容。
3. Portlet 的生命周期由容器管理。
4. Portlet 通过请求/响应模式与web客户端交互。

* Portlet 在以下方面与 Servlet 相异:
1. Portlet 只能生成标记段,而不是整个文档。
2. Portlet 没有可供直接访问的URL地址。不过你还是能够让别人通过URL访问到 Portlet,你可以把包含该 Portlet 的页面的URL发给他。
3. Portlet 不能随意地生成内容,这是因为 Portlet 生成的内容最终要成为 Portal 页面的一部分。如果 Portal 服务器要求的是html/text类型,那么所有的 Portlet 都应生成html/text类型的内容。再比方说,如果 Portal 服务器要求的是WML类型,那么所有的 Portlet 都应生成WML类型的内容。

* Portlet 还提供了一些附加的功能:
1. 设置参数的持久化存储: Portlet 提供了一个 PortletPreferences? 对象用来保存用户的设置参数。这些参数被存入一个持久化数据库,这样服务器重启后数据依然有效。开发者不必关心这些数据存储的具体实现机制。
2. 请求处理: Portlet 提供了更为细粒度的请求处理。对于用户在 Portlet 上动作时向该 Portlet 发出的请求(一种称为活跃期的状态),或者因用户在其它 Portlet 上动作而引发的刷新页面请求,Portal服务器提供了两种不同的回调方法来处理。
3. Portlet 模式: Portlet 用模式的概念来表示用户在做什么。 Portlet标准定义了三种模式:VIEW、EDIT、HELP。在使用mail应用的时候,你可能会用它来读信、写信或检查信件――这些都是mail 应用的预定功能, Portlets 通常以VIEW模式提供这些功能。但还有一些活动,像指定刷新时间或(重新)设置用户名和密码,这些活动允许用户定制应用的行为,因此它们用的是EDIT 模式。Mail应用的帮助功能用的是HELP模式。
4. 窗口状态:窗口状态决定了 Portal 页面上留给 Portlet 生成内容的空间。如果点击最大化按钮, Portlet 将占据整个屏幕,成为用户唯一可用的 Portlet ;而在最小化状态, Portlet 只显示为标题条。作为开发者应当根据可用空间的大小来定做内容。
5. 用户信息:通常 Portlet 向发出请求的用户提供个性化的内容,为了能更加行之有效,Portlet 需要访问用户的属性信息,如姓名、email、电话等。Portlet API为此提供了用户属性的概念,开发者能够用标准的方式访问这些属性,并由管理员负责在这些属性与真实的用户信息数据库(通常是LDAP服务器)之间建立映射关系。

[size=medium][b]JSR 286 介绍[/b][/size]

JSR 286 兼容了 JSR 168,并完善了 JSR 168 的部分功能,并提供了诸多 JSR 168 所没有的新特性,例如资源服务、事件、portlet 过滤器、共享呈现参数及 portlet 窗口等。与 V1.0 类似,V2.0 也将基于 J2EE 1.4,因此可让 Portlet 使用 J2EE 1.4 增强(如 JSP 2.0)。下面是该新规范的一些主要功能及特性:

1. 资源服务:JSR 168定义的直接链接到资源方式,无法访问到相关 Portlet 的信息,包括 Portlet 模式、窗口状态、当前呈现参数或 Portlet 首选项等。JSR 286 采用了一种新的资源服务方式 —— Portlet 资源服务

2. 事件:通过发送事件和接收事件来实现 portlet 之间的通信。JSR 286 定义的事件模型是一种松耦合的代理事件模型。在此模型中,Portlet 定义可以接收以及在 Portlet 部署描述符中公布的事件。在运行时,门户管理员(或业务用户)可以将不同的 Portlet 连接在一起。

3. Portlet 过滤器:与 servlet 过滤器类似,根据 Portlet 请求和响应动态的呈现内容的变换。但是它们两者之间存在巨大差异。Servlet 过滤器是一个门户级过滤器,它可以修改由一些小的部分(来自页面上所有 Portlet 的响应)集合而成的整个门户页面;而 Portlet 过滤器只能用于那些小的部分。。存在以下四种类型的 portlet 过滤器:
* Action 过滤器
* Render 过滤器
* Resource 过滤器
* Event 过滤器

4. 共享呈现参数:除了 portlet 私有的呈现参数之外,新增了可以在 portlet 之间共享的呈现参数,从而创建一个页面上下文。共享呈现参数与事件相比的优势就在于避免了事件处理过程调用的繁琐。

5. Portlet 窗口:提供 portlet 窗口 ID 供 portlet 使用。在 Portal 容器中布局同一个 Portlet 多次的情况下,窗口 ID 可以用来区分同一个 Portlet 的不同窗口,从而可以使这些 Portlet 窗口缓存并呈现不同的数据。


[size=large][b]WSRP[/b][/size]

WSRP(Web Services for Remote Portlets), 一个定义了如何利用基于 SOAP 的 Web 服务在门户应用程序中生成标记片断的规范。通过定义一组公共接口,WSRP 允许门户在它们的页面中显示远程运行的 portlet,而不需要门户开发人员进行任何编程。对于最终用户,这些 porlet 就和运行在他们本地的门户上一样,但是实际上这些 portlet 来自于远程运行的 portlet 容器,并且交互是通过 SOAP 消息的交换来实现的。在面向服务的体系结构中利用 WSRP 将是一个强大的组合,从而使面向呈现的 portlet 应用程序可以被发现并重用而不用任何额外的开发和部署活动。

WSRP 规范是 OASIS(Organization for the Advancement of Structured Information Standards)的一个产品,这个组织是推动技术标准采纳的一个协会。WSRP 规范的 1.0 版本在 2003 年的八月份发布,2.0版本在2008年4月发布。获得了众多门户市场主要厂商的支持,包括 IBM®,BEA,Oracle 和 Microsoft®。OASIS 的 WSRP 规范定义了通用的,设计良好的接口,可以与可插入的,面向呈现的 Web 服务进行交互。这些服务处理用户交互,并且为门户集合提供了标记片断。

[size=medium][b]为什么需要WSRP[/b][/size]

如果 Web 服务提供一个机制来创建独立于平台的服务,且 JSR 168 和 JSR 286 定义了一个标准来开发 portlet,那么我们为什么需要 WSRP 呢?答案很简单。虽然 Web 服务提供了重用后端服务的能力,WSRP 却让我们能够重用整个用户接口!

例如,我们可能想要为门户的最终用户提供输入证券代码可以查询股票信息的能力。我们知道目前很可能已经有 Web 服务提供了完整的功能。我们可以在 UDDI 中查询这些股票报价服务。在查找到一个这种服务的基础上,接下来我们需要编写一个客户端来绑定并使用 Web 服务,也可以开发一个 portlet 来允许门户用户与这个服务进行交互。使用 Web 服务工具包可以使 Web 服务客户端的开发相对容易;然而,开发用户接口可能不是这么简单。而且,我们必须执行在我们的门户服务器上部署新开发的 portlet 和 Web 服务的全部步骤。到这一步,我们必须开发、编译和部署一些新的代码来向最终用户提供股票报价服务功能。虽然利用第三方开发的股票报价服务可以减少开发时间,但开发和部署为门户用户提供功能的前端应用程序的流程却是繁琐且耗时的。

在这个例子中加入 WSRP,我们可以更加容易的将股票报价 portlet 集成到我们的门户中。我们可以浏览 UDDI 目录来为用户提供 portlet 本身,或者提供用户浏览 portlet 注册表的能力。一旦发现了 Stock Quote Portlet,将其添加到门户上只需要点击几下鼠标就完成了。我们不需要执行任何代码编写或者部署活动,因为该 portlet 是通过 WSRP 来调用的。最终用户不需要了解任何关于 WSRP 的知识,甚至不知道他们的 portlet 实际上是远程托管的!最终用户只知道他们有一个可用的 portlet 目录,他们可以从中进行挑选。还有什么可以更容易呢?

[size=medium][b]WSRP 参与者 [/b][/size]

在深入了解 WSRP 实际工作以前,让我们简要的说明一下 WSRP 体系结构中的不同部分。下面的图示举例说明了 WSRP 体系结构中的每个主要参与者,以及门户在聚集标记片断中所扮演的角色。虽然这个图只是显示了一个门户仅使用来自一个生产者的 WSRP portlet,但是没有理由说门户不能使用多个 WSRP 生产者提供的 portlet。WSRP 规范在 WRSP 体系结构中定义了如下的参与者:

[img]/upload/attachment/124975/18e0f274-8cce-30a5-b88e-9ad7821180d3.gif[/img]

* WSRP 生产者(WSRP producer):这是一个 Web 服务,提供了一个或者多个 portlet,并且实现了一套 WSRP 接口,因此也为消费者提供了一组常用操作。生产者仅仅可以提供一个 portlet,或者提供一个运行时(或容器)来部署和管理多个 portlet,这取决于实现方式。 WSRP 生产者是一个真实的 Web 服务,通过 WSDL 和一组端点完成。WSRP 中的每个生产者都是通过标准的 WSDL 文档来描述的。

* WSRP portlet: WSRP portlet 是一个可插入的用户接口组件,存在于 WSRP 生产者内,通过生产者定义的接口进行远程访问。WSRP portlet 并不是一个 Web 服务(它不能被直接访问,必须通过他的父生产者来访问)。

* WSRP 消费者(WSRP consumer):这是一个 Web 服务客户端,调用生产者提供的 WSRP Web 服务并且为用户提供环境来同一个或多个生产者提供的 portlet 进行交互。WSRP 消费者最常见的例子是门户。

[size=medium][b]WSRP 接口[/b][/size]

正如前面间接提到的那样,WSRP 定义了一组公共接口,所有的 WSRP 生产者都需要实现这些接口,并且WSRP 消费者必须使用这些接口来同远程运行的 portlet 进行交互。由于这些接口已经被完善定义,用来同任何符合 WSRP 的生产者进行通信,因此标准化这些接口使门户可以与远程运行的 portlet 进行交互。WSRP 规范需要每个生产者实现两个必需的接口,还可以实现另外两个可选接口:

* 服务描述接口(必选): 服务描述接口允许 WSRP 生产者向消费者介绍它的功能。WSRP 消费者可以使用这个接口来查询生产者,以便发现其提供了哪些 portlet,以及关于生产者自身的一些其他元数据。这个接口可以作为一个发现机制来确定所提供的 portlet,但是同样重要的是让消费者可以了解关于生产者技术能力的附加信息。生产者元数据可以包含消费者与任何 portlet 交互之前,生产者是否需要注册或初始化 cookie 的信息。

* 标记接口(必选): 标记接口允许 WSRP 消费者同 WSRP 生产者的远程运行的 portlet 进行交互。例如,当用户通过门户页面提供一个表单时需要使用这个接口执行一些交互。另外,门户可能需要根据 portlet 当前的状态来获取最新的标记(例如当用户点击刷新或者与当前页面的另一个 portlet 进行交互的时候)。

* 注册接口(可选): 注册接口允许 WSRP 生产者要求 WSRP 消费者在通过服务描述和标记接口与服务进行交互之前进行某种形式的注册。通过这个机制,生产者可以为特定类型的消费者定制他的行为。例如,生产者可能基于特定的消费者过滤一些提供的 portlet。另外,注册接口提供了一个机制允许生产者和消费者进行对话,这样他们可以交换关于彼此技术能力的信息。

* Portlet 管理接口(可选): Portlet 管理接口使 WSRP 消费者可以访问远程运行的 portlet 的生命周期。通过这个接口,消费者具备定制 portlet 行为甚至是销毁一个远程运行的 portlet 实例的能力。

[size=medium]后记[/size]

这里的资料从网上各种地方收集而成,非原创。

[size=medium]参考[/size]
http://www.ibm.com/developerworks/cn/webservices/ws-wsrp/
http://www.ibm.com/developerworks/cn/java/j-lo-jsr286-1/index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值