Portal实现原理

原创 2004年12月31日 13:29:00

                                      

相关摘要
  • (一蓑烟雨任平生)Portal Server的机制与一般的Web Framework是独立的,Portal Server有自己的容器或者引擎来对Portlet进行处理,每个Portlet类似于Servlet。

    Portlet现在有两种标准,一种是以Jetspeed为主的老版本,IBM的Websphere Portal Server原先的核心API也采用Jetspeed的API,另一种是目前JCP组织制订的JSR 168标准,BEA和IBM都在自己的产品里实现了该标准,但还没有成熟。IBM的WSAD开发工具里对Portal有两种项目类型,分别支持这两种标准。

    可以将Portal做为表现层的一种类型集成到你的Web Framework中。
  • (一蓑烟雨任平生)Jetspeed是一个门户的应用管理系统,应用程序是构建在Turbine这个Web Framework上面的,可以认为Jetspeed是个用Turbine Framework开发的一个应用程序。
  • (whitehorse)portal 包括 portal server 和 portlet container ;JSR-168定义了portlet 通用api ,portlet container 的提供商需要遵循这个API,这样开发出的portlet 可以在任何一个实现jsr-168规范的portlet container下顺利移植。
    portal server 是各个开发商自行提供的,用来接受用户用求转发给相应的portlet,调整portal page 布局,单点登录等等;
    portlet container就是在servlet container上又包装了一层,portlet 类似于servlet;
    portal server 的实现一般采用 web framework 技术来构建; 比如liferay采用了struts + tiles;exo poral 采用了 jsf 等等。

    portlet开发在遵循规范的基础上可以采用web framework .
  • (kingkii)free portal server: Jetspeed, liferay, Jportal, etc
  • (flyisland)
  • baichenhong 写道:
    我觉的Portal的作用就是整合,故名意思 门户 嘛就是把所有的集成起来放到一起,你有oa,erp,crm 但是你觉得分开使用很不方便,那么好我可以把他们整合到一起,只要你登陆一次就可以使用所有的系统,这应该是一个很有用的东西

    你短短一句话包含的东西可是超级多。

    所谓集成分为很多层次的,Portal关注的是用户集成,包括访问界面、访问手段等。访问界面的集成并不要求应用程序一定要部署在一起。

    至于“只要你登陆一次就可以使用所有的系统”,一般称之为单点登陆“Single Sign-on”。Portal服务器基本都提供了认证框架,在此框架下开发的新应用实现SSO是很简单的;但如果对异构的系统进行SSO,这又是一个复杂而庞大的话题了。
  • (tommy_kin)拖放布局不是Portal的核心技术,只是一个personalize的功能而已,Portal功能在于应用的集成。所谓一站式访问。
 
 
Portal实现原理

1.Portal用例
读者可以在下面三个网站上注册自己的用户,体会Portal的功能。
http://my.msn.com
http://my.yahoo.com
http://my.liferay.com

My MSN的功能最灵活强大,用户可以任意拖放操作栏目(column)和内容版块(content)的位置和个数。
My Liferay只能选择固定的栏目(column)布局,但可以在本栏目(column)内移动内容版块(content)的位置。
My Yahoo只能选择固定的栏目(column)布局,而且不能移动内容版块(content)的位置。

Portal的结构分为三层。
(1) Page
(2) Column,或者称为Pane
(3) Content,或者称为Portlet

我们来看看Portal的整个操作流程。
(1) 每个Column的下方都有一个[Add Content]按钮,让用户选择加入自己喜欢的内容。
从这里,我们知道,Portal系统里面有一个公用的Common Portlet Repository,供用户选用。

JSR168 Portlet规范里面定义了Portlet Deployment Discriptor。Common Portlet Repository以这个Portlet Deployment Discriptor的格式存放。

开源项目JetSpeed的XReg文件用来存放Common Portlet Repository的定义。

(2) 加入Content之后,用户的Page和Column里面就多了这个Content。下次用户登陆的时候,就会看到自己订制的Portal版面。
从这里,可以看出,Portal系统会纪录用户的个人Portal配置信息 – User Portal Config。

开源项目JetSpeed的PSML文件用来存放User Portal Config的定义。

------- 综上。
Add Content的整个流程为:
Common Portlet Repository --> Add Content --> Personal Portal Config

Display Portal的整个流程为:
从Personal Portal Config读取用户配置的Portlet ID --> 根据Portlet ID,从Common Portlet Repository查找详细的Portlet定义 --> 根据这个详细的Portlet定义显示这个Portlet。

2.Portal实现
我们考虑如何用Java来实现Portal。

2.1 Dynamic Include
首先,我们采用最简单的思路,我们用100个JSP文件(1.jsp, 2.jsp, 3.jsp, … 100.jsp等),代表100个Portlet。
用户页面MyPage.jsp包含用户选定的多个Portlet。
现在,假设用户选取的Portlet为1.jsp, 3.jsp, 7.jsp等3个Portlet,那么我们如何在MyPage.jsp中显示这些Portlet?最直观的做法是,用jsp:include。比如:
<table>
<tr><td>
<jsp:include page=”1.jsp” />
</td></tr>
<tr><td>
<jsp:include page=”3.jsp” />
</td></tr>
<tr><td>
<jsp:include page=”7.jsp” />
</td></tr>
</table>
由于<jsp:include>只能指定固定的jsp文件名,不能动态指定jsp文件名。我们需要把<jsp:include>翻译为Java code – RequestDispatcher.include();
下面我们换成这种写法。
java代码: 

  
  <table>
  <tr><td>
  <% request.getRequestDispatcher(1.jsp).include(request, response); />
  </td></tr>
  <tr><td>
  <% request.getRequestDispatcher(3.jsp).include(request, response); />
  </td></tr>
  <tr><td>
 10 <% request.getRequestDispatcher(7.jsp).include(request, response); />
 11 </td></tr>
 12 </table>
 13 


进一步改进MyPage.jsp。
java代码: 

  
  <% String[] fileNames = {1.jsp”, “3.jsp”, “7.jsp}; %>
  <table>
 <% for(int i = 0; i < fileNames.length; i++) {
    String fileName = fileName s[i]; %>
  <tr><td>
  <% request.getRequestDispatcher(fileName).include(request, response); />
  </td></tr>
  <% } // end for %>
 10 </table>
 11 


其中的fileNames的内容可以各种各样,只要RequestDispatcher能够处理。
比如Velocity,fileNames = {“1.vm”, “3.vm”, “7.vm”};
比如URL,fileNames = {“/portlet1.do”, “/portlet3.do”, “/portlet4.do”};
我们可以看到,如果我们从用户配置中读取fileNames的内容,这就是一个简单的Portal实现。
java代码: 

  
  <% String[] fileNames = (String[])session.getAttribute(“portlets.config); %>
  <table>
 <% for(int i = 0; i < fileNames.length; i++) {
    String fileName = fileNames[i]; %>
  <tr><td>
  <% request.getRequestDispatcher(fileName).include(request, response); />
  </td></tr>
  <% } // end for %>
 10 </table>
 11 


2.2 Portlet Interface
下面我们来扩展这个例子。
假设每个Portlet都规定实现一个Portlet接口。
java代码: 

 1  
+2  interface Portlet {
...}
 3    void render(request, response);
 4  };
 5  
 6  MyPage.jsp如下:
 7  
 8  <% String[] portletClassNames = (String[])session.getAttribute(“portlets.config”); %>
 9  <table>
+10 <% for(int i = 0; i < portletClassNames.length; i++) {
...}
 11   String className = portletClassNames[i];
 12   Portlet portlet = (Portlet)Class.forName(className).newInstance(); %>
 13 <tr><td>
 14 <% portlet. render (request, response); />
 15 </td></tr>
 16 <% } // end for %>
 17 </table>
 18 
 19 Portlet类的示例代码如下:
+20 public class Portlet7{
...}
+21   public void render(request, response){
...}
 22     request.getRequestDispatcher(“7.jsp”).include(request, response);
 23   }
 24 };
 25


上述代码是Portal显示Portlet的核心流程的一个简化版本。
JSR168 Portlet规范里面定义了真正的Portlet接口定义。

2.3 Portlet Action
Portlet的操作包括,最大化/最小化/恢复/关闭/编辑/帮助/上下移动,等等。
这些操作都有对应的Action类。
开源项目JetSpeed的module/actions/controls目录下面包含Maximize, Minimize, Close等Action类。
开源项目Liferay的portal/action目录下面包含Maximize, Minimize, Close等Action类。

Portal的操作不仅包括上述Portlet的操作,而且包括其它更高级别的操作。
比如,Add/Move Page, Add/Move Column, 换Layout, 换Skin,之类。

2.4 Portlet Cache
我们操作Portlet的时候,往往只操作某个特定的Portlet,或者只是变化Portlet的位置。这时候,页面中大多数的Porlet的内容是不变的,只有一小块Portlet变化。
我们需要把Portlet的内容缓存起来。Portlet接口有一个render(request, response)方法,我们可以订制定制response类,截获portlet的输出,保存到Portal系统的内容Cache当中。
比如,前面提到liferay开源项目,其StringServletResponse类把Portlet的输出保存到一个String当中。
 
 
参考资料:

 

Portal实现原理

Portal实现原理1.Portal用例 读者可以在下面三个网站上注册自己的用户,体会Portal的功能。 http://my.msn.com http://my.yahoo.com http...
  • jonathan_q_bo
  • jonathan_q_bo
  • 2006年10月26日 11:52
  • 1874

Portal实现原理

Portal实现原理 1.Portal用例 读者可以在下面三个网站上注册自己的用户,体会Portal的功能。 http://my.msn.com http://my.yahoo.com http://...
  • wenbinhua
  • wenbinhua
  • 2009年07月14日 15:49
  • 240

Portal实现原理

 Portal实现原理 1.Portal用例 读者可以在下面三个网站上注册自己的用户,体会Portal的功能。 http://my.msn.com http://my.yahoo.com http:/...
  • sunnish8
  • sunnish8
  • 2009年09月10日 11:07
  • 283

Portal实现原理- -

相关摘要(一蓑烟雨任平生)Portal Server的机制与一般的Web Framework是独立的,Portal Server有自己的容器或者引擎来对Portlet进行处理,每个Portlet类似于...
  • sukyle
  • sukyle
  • 2011年05月31日 14:57
  • 1945

(转)Portal实现原理

1.Portal用例 读者可以在下面三个网站上注册自己的用户,体会Portal的功能。 http://my.msn.com http://my.yahoo.com http://my.lif...
  • housheng3319
  • housheng3319
  • 2013年06月18日 11:11
  • 521

Portal协议分析

关键词:Portal,CAMS,安全,认证 摘    要:Portal认证也叫Web认证,即通过HTTP页面接受用户输入的用户名和密码,对用户进行认证。 常用术语: 缩略语 英文全称 ...
  • zyz0678
  • zyz0678
  • 2013年09月05日 15:57
  • 3904

Android 连接wifi 检测是否需要portal 认证

前言 最近在做一个新需求,就是针对开机欢迎引导页,当连接如星巴克,KFC,地铁上等公共场所的WIFI时,都需要认证功能,而我要调起这个认证页面呈现给用户,登陆任何网页会跳转到wifi得认证页面,输入...
  • u011974987
  • u011974987
  • 2016年11月09日 10:49
  • 4313

portal(web)概述

PORTAL概述 Portal在英语中是入口的意思。Portal认证通常也称为Web认证,一般将Portal认证网站称为门户网站。它提供了一种较为简单的用户认证方法,对用户而言,相对其它认证方式更易...
  • xianweijian
  • xianweijian
  • 2015年10月27日 16:49
  • 16698

Portal for ArcGIS是什么东东

Portal for ArcGIS是什么东东?背景 自从上家公司离职就没有认认真真玩过arcgis了,现在的公司之前也有专人负责这一块,自己的重心当时全部放在从.net阵营转java阵营。没想到公...
  • NianChenCao
  • NianChenCao
  • 2017年06月02日 13:51
  • 635

Portal相关技术及架构

Portal以用户为中心,提供统一的用户登录,实现信息的集中访问,集成了办公商务一体的工作流环境。利用Portal技术,可以方便地将员工所需要的,来源于各种渠道的信息资料集成在一个统一的桌面视窗之内。...
  • sophiazhou
  • sophiazhou
  • 2012年11月23日 13:37
  • 16421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Portal实现原理
举报原因:
原因补充:

(最多只允许输入30个字)