基于jetspeed的portlet开发探讨


第 26 卷 第 6 期 2004 年 6 月 武 汉 理 工 大 学 学 报 JOURNALOF W UHAN UN IVERSITY OFTECHNOLOGY V o l. 26 N o. 6  Jun. 2004 基于 Jetspeed 的 Portlet 开发探讨 邹承明, 钟 珞, 童琪薇 (武汉理工大学计算机科学与技术学院, 武汉 430070) 摘 要:  门户为内部和外部用户访问W eb 站点的信息和应用提供了一个单一的访问入口, 一个 po rtlet 是门户中提供 特殊服务或信息的窗口。文中基于公开源代码的企业信息门户软件 Jetspeed 上讨论了 Jetspeed 的体系结构及其调用流 程, 给出了开发 po rtlet 的例子, 并详细研究了对 po rtlet 的外观的改进方法—— 通过改写 BasePortletSkin 基类和 A bstractPortletControl 基类的属性和行为, 以及在 PortletSkin 和 PortletControl 中增加相应的接口来实现改进。 关键词:  Jetspeed;  po rtlet;  门户 中图分类号:  TF 12 文献标识码:  A 文章编号: 167124431(2004) 0620070204 收稿日期: 2004202210. 作者简介: 邹承明(19752) , 男, 博士. E2m ail: zoucm @m ail. w hut. edu. cn D evelop ing Portlet Based on Jetspeed ZOU Cheng 2m ing , ZHONG L uo, TONG Q i2w ei (Schoo l of Computer Science and T echno logy,WUT,W uhan 430070, Ch ina) Abstract:  Po rtals are W eb sites that serve as a starting po int to info rm ation and app lications on the Internet o r from an intranet. A po rtlet is a w indow in the po rtal that p rovides a specific service o r info rm ation. T h is paper is based on Jetspeed, w h ich is an Open Source imp lementation of an Enterp rise Info rm ation Po rtal, firstly discusses the architecture of Jetspeed, then gives an examp le of how to develop a po rtlet, lastly studies the m ethod of how to rep lace sk in of po rtlet. A po rlet can change its appearance by rew riting BasePortletSkin base class and A bstarctPortletControl base class. A t the sam e time, PortletSkin interface class and PortletControl interface class m ust be added to the correspondence interface function. Key words:  Jetspeed;  po rtlet;  po rtal 门户(po rtal) 是建立在 J2EE 基础上的一种具体应用层次的概念[1 ], 迎合了企业内部各种资源进行整合 的需要, 侧重在应用层和展示层进行系统的整合。门户提供了一个单一的访问入口, 能够为内部和外部用户 提供个性化服务, 为用户在不同的位置及时提供其所需的信息和服务。为保证系统的安全, 根据每个用户的 不同角色, 按策略划分为不同的级别, 访问不同的系统, 制定不同的界面, 实施不同的操作[2, 3 ]。例如经理和保 安的等级不同, 他们访问的系统也不同, 保安可以查询与物业安全相关的内容, 而经理可以查询财务、人事、 销售等方面的内容。在构建门户的过程中, 要应用到po rtlet 技术。一般地, po rtlet 是构建在W eb Service 技 术之上, 能够直接被调用的应用组件, po rtlet 是使用 Java 开发的, 可嵌入到前端的浏览器中, 许多的 po rtlet 可组装成一个门户。Jetspeed 为开发门户提供了一个免费的po rtlet 开发平台, 但Jetspeed 存在某些不足, 因 此如何在 Jetspeed 的基础上开发界面友好的po rtlet 值得探讨。 1 Jetspeed 体系结构及流程 1. 1 主要概念 1) 页面组件(modu les)  在 Jetspeed 的开发框架 T u rb ine 中主要有 5 种页面组件(modu les) , 这 5 种页 面界面分别为 action、layou t、navigation、screen、page, 它们是用来执行页面的显示和控制的, 另外有一个 localization 文件用于定义当前所使用的语言, 缺省为英语, 当需要转换到其它国语言时可以修改该文件。 2) 服务(services)  services 为整个系统提供了一些可插入的功能实现, 通过配置文件可以轻松的替换 和加入服务, 事实上 Jetspeed 中的一些核心的功能都是由一些 services 来提供的。 3) 模版(temp lates)  在页面组件执行页面显示的时候, 需要调用相应的模板来生成H TM L 页面代码。 模板也就是一些事先写好的JSP 页面。模板目前主要支持 JSP 和 velocity。 4) 对象关系模型(OM)  在 Jetspeed 中, 用户数据及授权数据存放在数据库中, 同时也提供了和数据库 数据相对应的 Java 对象来访问用户数据及授权数据。这些对象会被缓存在poo l 中, 在数据库中相关的数 据, 在 poo l 中形成了相关的对象, 这就成为关系对象模型。 5) Portlet&portal 在 Jetspeed 系统中 po rtlet 和 po rtal 是作为modu les 的一部分来运行的, 它们也同 样 需要模板来显示页面。po rtal 页面由 con tro ller、con tro l 和 po rtlet 构成。 Screen 中包含 con tro ller, con tro ller 又可以包含 con tro ller 或 con tro l, 实际上 con tro ller 代表和实现了 layou t (布局) , 布局可以嵌套使 用, con tro l 代表和实现了 po rtlet 边框, 一个 con tro l 中允许有多个 po rtlet, 但一般只有一个。 图 1 Jetspeed 体 系结构模型 1. 2 体系结构 Jetspeed 是 Jakarta A pache 项目中的一个开源 po rtal 应用框架, 可以帮助开发人员 更快地建立po rtal 应用。Jetspeed 本身不是一个W eb Application Server, 不能独自运行, 而需以w ar 文件的形式发布到某个W eb Application Server 上才能运行(比如 Tom cat、 W eb logic 等)。Jetspeed 的核心是 T u rb ine, 其体系结构模型如图 1。 1. 3 流 程 Jetspeed 以 T u rb ine 为开发框架, 依照MVC 模型来构建, 整个系统的主要调用流程 如图 2 所示。由图 2 可以知道po rtal servlet 是整个系统的入口,modu les 用来生成和控制 图 2 Jetspeed 调用流程 页面的各种页面组件, services 用来完成系 统的一些主要功能, OM 是对象关系模型, temp lates 是 显 示 页 面 的 模 版, po rtal 是 po rtlet 的 po rtal 模块。 所有请求由 po rtal servlet 来处理, 然后调用各种 service 为显 示页面作数据准备, 最后传给modu les 中的 page 对象, 由 page 调用具体的 actionhandler 处理 action, 最后由 layou t 负责绘制整个页 面, 在这个过程中OM 提供了对用户数据的 访问和存储。在 Jetspeed 中 secu rity 包含了 所有用户、角色、组与权限的对应与控制类, 用 户 数 据 及 授 权 数 据 存 放 在 数 据 库 中, secu rity 同时也提供了和数据库数据相对应 的 Java 对象来访问用户数据及授权数据。 OM 正是由运行时存在缓存中的这些数据形 成。 2 Jetspeed 中的 portlet 如果要在 po rtal 中包含 po rtlet[4 ] , 则必须实现 po rtlet 接口 o rg. apache. jetspeed. po rtal. po rtlet。 Jetspeed 提供了许多类, 它们用于实现拥有最常用功能的po rtlet 接口。A bstractPortlet 类是这些预定义类 17第 26 卷 第 6 期           邹承明, 等: 基于 Jetspeed 的 Po rtlet 开发探讨             中最简单的一个。R unD ata 对象被传递到 getCon ten t (), 因为必须将它传递给该 po rtal 框架中许多其它方 法。Po rtlet 使用元素构造集(ECS)API 显示内容。以下所示的代码就是一个最简单的po rtlet。 impo rt o rg. apache. jetspeed. po rtal. po rtlets. A bstractPortlet; impo rt o rg. apache. tu rb ine. u til. R unD ate; impo rt o rg. apache. ecs. ConcreteElement; impo rt o rg. apache. ecs. StringElement; pub lic class HelloWorldPortlet ex tends A bstractPortlet {   pub lic ConcreteElement getCon ten t (R unD ata runD ata)   {    retu rn (new StringElement (“这是最简单的一个 Po rtlet! ”));   } } 从以上的代码可以看出要在 Jetspeed 中加入一个 po rtlet 就必须从A bstractPortlet 类派生一个类, 并 且要实现其中的 getCon ten t 方法。 但为了使 po rtlet 具有丰富多彩的行为还需要实现其它的方法, 例如 buildContent 方法。 3 Jetspeed 中 portlet 外观设计的改进 如上所述, po rtal 页面由 con tro ller、con tro l 和 po rtlet 构成, 即一个页面可以包含多个 po rtlets。在这些 po rtlets 中有一个为根po rtlet, 根po rtlet 中包含了嵌套的po rtlets 和po rtlet, po rtlets 定义了嵌套的po rtlets 和 po rtlet 的布置方式和共用的外观格式, 各 po rtlet 定义了数据内容和各自的外观格式, 并通过模版最终表 现出来, 组合成网页浏览者看到的网页。各个po rtlets 和 po rtlet 都各表现为一个 tab le。而m enu pane 形式 的 po rtlets 又包括左右 2 个 tab le。T ab pane 形式的po rtlets 包括上下 2 个 tab le。可以直接设置这些 tab le 的 属性, 从而确定网页的外观, 也可以使用样式来设置这些 tab le 的外观。这些样式是可以重用的, 以保持外观 的一致性。当直接设置的属性和通过样式设置的属性值相冲突时, 直接设置的属性值生效。目前虽然已有的 属性有 13 种, 例如: 正文颜色(tex t2co lor)、背景颜色(background2co lor) , 缺省值白色、标题字体颜色 (title2 tex t2co lor) 等等, 但这些属性尚不能设计各种外观, 例如 po rtlet 的背景图像。因此需要增加属性以扩展功 能。现以背景图像为例, 探讨如何改进 po rtlet 的外观属性。 在 Jetspeed 的 classes 目录下, 有如下几个接口和类: 用来提供属性的 PortletSkin 接口; 实现属性设置 的 BasePortletSkin 基 类; 控 制 po rtlet 显 示 的 PortletControl 接 口; 以 及 控 制 po rtlet 显 示 的 A bstractPortletControl 基类。在显示属性时首先通过 PortletSkin 接口从BasePortletSkin 类中进行调用, 该 类读取存储在 sk in s. x reg 文件或 local2sk in s. x reg 文件中的值, 然后输出给 PortletControl 控制po rtlet 显示 的基类A bstractPortletControl 进行显示。因此增加属性必须对这 4 个接口或类进行改写。具体实施如下: 1) 在 PortletSkin 接口中增加表示背景图片的属性字符串 pub lic static final String BA CKGROUND P ICTU R E= ″background2p ictu re″; 2) 在 PortletSkin 接口中增加读取和设置背景图片的方法 pub lic String getBackgroundPicture (); pub lic vo id setBackgroundPicture (String p ictu re); 3) 在BasePortletSkin 类中实现 2) 中的读取和设置背景图片方法 pub lic String getBackgroundPicture (){   retu rn (String) get (BA CKGROUND P ICTU R E); } pub lic vo id setBackgroundPicture(String p ictu re) {   if (p ictu re! = nu ll)   { 27                  武 汉 理 工 大 学 学 报              2004 年 6 月     pu t (BA CKGROUND P ICTU R E, p ictu re);   } } 4) 在 PortletControl 接口中增加读取和设置背景图片的方法 pub lic String getBackgroundPicture (); pub lic vo id setBackgroundPicture (String p ictu re); 5) 在A bsractPortletControl 类中实现 4) 中的读取和设置背景图片方法 pub lic String getBackgroundPicture (){ retu rn getPo rtlet (). getPortletConfig (). getPortletSkin (). getBackgroundPicture (); } pub lic vo id setBackgroundPicture (String p ictu re) { getPo rtlet (). getPortletConfig (). getPortletSkin (). setBackgroundPicture(p ictu re); } 6) 用来添加和修改 Sk in 属性的 po rtlet 的VM 文件 sk in2fo rm. vm; 7) 修改需要显示背景图片的 po rtlet 相应的VM 文件。 至此就可以在po rtlet 中添加和显示背景图片了。为了增加其它属性可以按照上述方法进行相应的操作 即可。 4 结 语 目前关于 Jetspeed 开发的资料还不多, 文中通过分析 Jetspeed 的体系结构和流程, 探讨了如何在 Jetspeed 中编写 po rtlet, 同时改进了 Jetspeed 中 po rtlet 外观显示的不足, 为开发界面友好的 po rtlet 提供了 一种可行的方法。 参考文献 [1 ] 谢小轩, 张 浩, 夏敬华, 等. 企业应用集成综述[J ]. 计算机工程与应用, 2002, 22: 1~ 5. [2 ] 邵云峰, 蒋丽艳. E IP2企业制胜的法宝[J ]. 现代情报, 2003, 9: 211~ 213. [3 ] 雷远平. 网络门户网站登录技术的研究[J ]. 武汉理工大学学报, 2003, 25(10): 85~ 86. [ 4 ] Stephan H esmer, Peter F ischer, T ed Buckner, et al. Po rtlet Development Guide[EPöOL]. h ttp: ööwww. 106. ibm. com ö develperworksöw ebsphereözonesöpo rtalöpo rtlet develop m ent guide. h tm l, 2003208220. 37第 26 卷 第 6 期           邹承明, 等: 基于 Jetspeed 的 Po rtlet 开发探讨            
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

dagf113225

贡献于2017-02-07

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf