-
2004-08-29
Portal展现机制研究
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://flyisland.blogbus.com/logs/357938.html
0、前言buaawhl在JavaEye上贴出了Portal实现原理这篇文章,作为企业信息和应用的统一入口,Portal所涵盖的内容是很广的,Portal到底应该包含那些功能也没有一个统一的定义。buaawhl这个帖子的“2.1 Dynamic Include”部分提到实际上是Portal展现机制,正好是我之前比较感兴趣的一部分,可以借这个机会整理一下。1、需求首先让我们看看涉及到Portal展现部分,存在哪些需求:1)最终用户。a. 能够自由定制自己的版面,选择想要看的部分b. 能够更改版面的显示风格,包括布局、颜色、字体等2)管理人员a. 管理人员的需求和最终用户类似,但他可以制定全局的版面,权限更大3)开发人员a. 能够根据客户需求开发特定展现方案b. 容易开发上面的需求总结的比较粗略。2、组件树一个Portal应用可能包含十几个到上百个Portlet,为了分门别类地管理、显示这些Portlet,需要引入新的组件对Portlet进行组织,例如buaawhl提到“Portal的结构分为三层(Page,Pane,Portlet)”。对Portal/Portlet的组织方式没有标准,每种产品叫法各自不同,但作用都是类似的,在本文中,我用Book/Page/Portlet来描述这个结构。实际上这个层次不是固定的,例如Book也可以包含Book,那么我们就能得到一个无限扩展的结构。商业产品在这方面的定义很更加复杂,这里是BEA WebLogic Portal 8.1对Portal/Portlet的组织方式一张图(http://dev2dev.bea.com.cn/download/school/workshop/WorkshopCNHelp/doc/zh/portal/images/ovPortalHierarchy.gif)。这个结构可以称之为Portal组件树,如下图:
对于用户而言,个性化自己的版面,就是在定制自己的组件树;管理人员也可以事先制订好一些组件树模版提供给最终用户。而所谓Portal展现机制,就是如何将这样的一棵组件树转换为最终的界面。
3、展现(render)机制那么采用什么方法将Portal组件树转换为最终的界面呢?buaawhl列举了几种方法,这些方法解决了存在多个Portlet的情况。但是整个组件树的结构实际上是存放在JSP文件中,只是Portlet部分可变。实际应该中Portal组件树的结构要求的灵活性更高,例如下面的一个应用:
我们很难实现写出这个不算复杂的JSP页面,这样的一个组件树结构应该是存放在数据库(或其他存储机制)中,当用户访问应用时,Portal系统根据相关信息查询数据库,构建出当前用户所需要的组件树。因此相关的显示页面应该是Portal系统在遍历组件树的过程中动态生成的:
现在的问题是,对于具体的组件Portal系统如何来展现它呢?例如对于Page组件,是采用HTML TABLE还是其他手段,能否提供多种机制?这个问题的解决方法就是让组件来决定自己应该如何展现。这样遍历过程中,展现引擎只需调用每个组件的展现方法,将所有组件的展现输出组合起来,就成了最终的、完整的HTML页面,如下图:
nbsp;4、展现方案最后的问题是如何来定义每个组件的展现方法,一种方法是通过分离的JSP文件来实现,每个组件对应一个指定名称的JSP文件。在遍历Portal组件树的过程中,除了叶子节点外其他节点都会经过两次。在上图中我们可以看到Page组件的输出内容是需要包含Portlet组件的输出内容,也就是Page组件的输出是分为“开头”和“结尾”两部分的。因此组件的JSP文件也需要分为两部分,遍历过程中每次经过时输出其中一部分,这部分可以通过JSP Tag实现。JSP文件负责将Portal应用转换为HTML页面,以及界面的布局等等。但是对于图标、颜色、字体等情况,则可以独立出来以CSS的形式定义,只是要求实现定义好HTML页面中每种元素的CSS Class。这样整个展现机制就是:
在这个机制中,一套JSP文件加上CSS文件加上一些图片,就是一套展现方案。开发人员可以根据客户的需求开发各种展现方案,例如在Book.jsp中加上树形导航菜单;而用户可以通过变更展现方案获得不同的显示界面。如果做得更加灵活的话,则允许每个组件选用不同的展现方案,例如存在多个Page,每个Page可以选用不同的展现方案。另外还可以针对特定的设备(例如Palm, PPC)编写相应的展现方案,而且JSP页面并不限于输出HTML代码,还可以输出WML代码支持WAP手机。当然这种情况下还要求我们的Portlet也可以适应不同的设备。5、小结本文讨论Portal应用的展现机制,主要的观点是:1)Portal组件树。构造灵活结构的Portal应用,用户自定制Portal结构的基础;2)让组件来决定自己应该如何展现。3)JSP文件 + CSS文件 + 图片 = 展现方案本文的结果主要是基于对BEA WebLogic Portal 8.1的学习,欢迎各位讨论补充。讨论请移步到JavaEye上的相关帖子Portal展现机制研究 。随机文章:
google map @ china 2005-06-23PocketPC 开发未遂 2005-06-20del.icio.us的改进 2005-06-12软件产品成功的因素 2005-06-12Spring Web Flow 2005-06-05
收藏到:Del.icio.us








