随着企业级Portal的大量涌现,不同提供商创建了不同的Portal组件API,即Portlet。不同的不兼容给应用服务商,Portal用户和Portal Server提供商都造成了问题。为了消除这些问题,JSR168,即Portlet规范提出,从而提供Portlet和Portal间的互操作性。JSR168定义,Portlet是基于Java的Web组件,Portlet容器处理request并生成动态内容,管理Portlet。Portal使用Portlet作为可插入用户接口组件,提供信息系统的表示层。
JSR168的目标是:
定义Portlet的运行时环境,即Portlet容器
定义Portlet和Portlet容器之间的API集
提供Portlet存储易失数据和持久数据的机制
提供Portlet包含Servlet和JSP的机制
定义方便部署的Portlet打包方法
提供JSR168规范下的Portal的二进制Portlet便携性
通过WSRP(Web Service for Remote Portlet)协议运行符合JSR168规范的远程Portlet
IT界已经广泛的接受了JSR168规范。所有的Portal领域主要公司都是JSR168专家组的成员:Apache, AGT, BEA, Boeing, Borland, Broadvision, Citrix, EDS, Fujitsu, Hitachi, IBM, Novell, Oracle, SAP, SAS Institute, Sun Microsystems, Sybase, TIBCO, and Vignette。官方支持列表甚至更长。
JSR168最终版本已在2003年九月发布。
本文中,首先定义了Portal和Portlet,然后解释了JSR168的概念,包括API的基本对象。接下来,深入到JSR的高级功能,比如用户信息,本地化和缓存。然后讲到了扩展,从而使Portal提供者扩展当前Portlet规范的函数功能。本文包含了Portlet应用的打包和部署。
基本定义这部分中,讲述Portlet规范中的基础定义,包括Portal基本构架,Portlet容器和Portal页面。
PortalPortal是一个基于Web的应用,它能提供个性化,单点登录,不同源的内容聚合,和信息系统的表示层集中。聚合是整合不同Web页面源数据的过程。为了提供用户定制的内容,Portal可能包含复杂的个性化特征。为不同用户创建内容的Portal页,可能包含不同的Portlet集。表示了Portal的基本架构。
Portal Web应用处理客户请求,找回用户当前页中的Portlet,然后调用Portlet容器,重新获取各个Portlet的内容。Portlet容器提供Portlet的运行时环境,并通过Portlet API调用Portlet。Portal通过Portlet Invoker API调用Portlet容器。Portlet容器通过Portlet Provider SPI(Service Provide Interface)获取Portal信息。表示了基本的Portal页面组件。
Portal页面本身代表一个完整的标记文档,并且聚集了一些Portlet窗口。除Portlet外,页面可能还包含导航区和标志区(Navigation Area and Banners)。一个Portlet窗口包含一个标题栏,装饰,和Portlet产生的内容。装饰可以包括改变Portlet窗口状态和模式的按钮(后文将解释这些概念)。
Portlet正如上文所说,Portlet是基于Java的Web组件,处理request并产生动态内容。Portlet产生的内容称为片段,即一段遵守中心规则的标记(比如HTML, XHTML,WML(无线标记语言)),多个片段可以聚合成一个完整的文档。多个Portlet聚合在一起,组成Portal页。Portlet容器控制Portlet的生命周期。
Web客户通过Portal实现的request/response范例与Portlet交互。通常,Portlet中的动作会被Portal接受,从而用户与Portlet中的内容交互(比如点击Portlet中的链接,提交表单),提交到Portlet的目标。
对不同的用户,根据其配置,同一个Portlet会产生不同的内容。
容器Portlet容器提供它们需求的运行时环境并运行Portlet。它包含Portlets并控制它们的生命周期。容器提供Portlet参数的持久存储机制,它接受来自Portal的request,并在其持有的Portlet上执行request。容器不负责Portlet产生内容的聚合,Portal自己处理内容聚合。