Portal技术原理
advanceroot 发表于 2005-8-8 22:29:00
JSR168将Portal 的组成分为三部份 (1) Portal Server (2) Portlet Container (3) Portlet。
Portal Server的定义
建立在HTTP Server上。负责接收HTTP请求,调用Portlet,并将Portlet产生的内容聚集到Portal页面返回给用户。(Portal Server有时简称Portal)
Portlet Container 的定义
Portal Container:管理Portlet的生命周期并且提供其运行所需要的必要环境。同时也提供Portlet相关信息的存储。一个Portlet container 接收到来自Portal 的请求后,接着将这个请求传递给存在Container 的Portlet 执行。Portlet Container 没有义务去组合Portlets 产生的信息內容,这个工作必须由Portal (即Portal Server)来处理。Portal 和Portlet Container 可以放在一起视为同一个系统的组件,或者分开成为两个独立的组件。
Portlet的定义
一个 Portlet 是以 Java 技术为技术的 Web 组件,由 Portlet Container 所管理,专门处理客户的 request 以及产生各种动态的信息内容。Portlets 为可插式 ( pluggable ) 的客户界面组件,提供呈现层成为一个信息系统。
这些由 portlet 产生的内容也被称为片段 (fragment),而片段是具有一些规则的Markup( HTML、XHTML、WML ),而且可以和其他的片段组合而成一个复杂的文件。而 Portlet 中的内容正常来说是与其他 Portlet 的内容聚合而成为一个 Portal 网页。而 Portlet 的生命周期是被 Portlet Container 所管理控制的。
客户端和 portlets 的互动是由 portal 通过典型的 request/response 方式实现,正常来说,客户会和 portlets 所产生的内容互动,举例来说,根据下一步的连接或者是确认送出的表单,结果 portal 将会接收到 portlet 的动作,将这个处理状况转向到目标 portlet。这些 portlet 内容的产生可能会因为不同的使用者而有不同的变化,完全是根据客户对于这个 portlet 的设置。
Portlet生命周期
Portlet接口的四个方法构成一个完整的生命周期:
public void init(PortletConfig config) throws PortletException;
由Portlet容器调用,在将Portlet放入服务区前调用。Portlet容器在初始Portlet后,直接调用这个方法。
public void processAction (ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException;
由Portlet容器调用,用来处理action request。
public void render (RenderRequest request, RenderResponse response) throwsPortletException, java.io.IOException;
由Portlet容器调用,用来生成输出。
public void destroy() ;
将Portlet从服务区中删除。
一个Portal处理流程
1. 一个客户端(例如:一个web浏览器)在被验证之后向Portal发出HTTP请求;
2. Portal(或称为Portal Server)接收到请求;
3. Portal判断请求是否包含与组成门户网站网页的portlet有关的动作;
4. 如果存在与某个portlet相关的动作,Portal请求portlet容器调用portlet处理动作;
5. Portal通过portlet容器调用portlet,获得被包含在产生的门户网站网页中的内容片段;
6. Portal将portlet产生的结果聚集于门户网站的网页,然后将网页返回至客户端。
在下图中需要注意的是Portal服务器是建立在Http服务器的基础上的。Portal服务器不可独立的运行。
http://www.blog.edu.cn/user2/34856/archives/2005/260777.shtml
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。比如:
由于只能指定固定的jsp文件名,不能动态指定jsp文件名。我们需要把翻译为Java code – RequestDispatcher.include();
下面我们换成这种写法。
java代码:
<% request.getRequestDispatcher(”1.jsp”).include(request, response); />
<% request.getRequestDispatcher(”3.jsp”).include(request, response); />
<% request.getRequestDispatcher(”7.jsp”).include(request, response); />
进一步改进MyPage.jsp。
java代码:
<% String[] fileNames = {“1.jsp”, “3.jsp”, “7.jsp”}; %>
<% for(int i = 0; i < fileNames.length; i++) {
String fileName = fileName s[i]; %>
<% } // end for %>
<% request.getRequestDispatcher(fileName).include(request, response); />
其中的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”); %>
<% for(int i = 0; i < fileNames.length; i++) {
String fileName = fileNames[i]; %>
<% } // end for %>
<% request.getRequestDispatcher(fileName).include(request, response); />
2.2 Portlet Interface
下面我们来扩展这个例子。
假设每个Portlet都规定实现一个Portlet接口。
java代码:
interface Portlet {
void render(request, response);
};
MyPage.jsp如下:
<% String[] portletClassNames = (String[])session.getAttribute(“portlets.config”); %>
<% for(int i = 0; i < portletClassNames.length; i++) {
String className = portletClassNames[i];
Portlet portlet = (Portlet)Class.forName(className).newInstance(); %>
<% } // end for %>
<% portlet. render (request, response); />
Portlet类的示例代码如下:
public class Portlet7{
public void render(request, response){
request.getRequestDispatcher(“7.jsp”).include(request, response);
}
};
上述代码是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当中。
http://forum.javaeye.com/viewtopic.php?t=5506&highlight=Portal
http://forum.javaeye.com/viewtopic.php?t=4413&highlight=Portal
http://forum.javaeye.com/viewtopic.php?t=4413&highlight=Portal
http://forum.javaeye.com/viewtopic.php?t=5159&highlight=Portal
欢迎应用、研究、实现Portal的程序员一起讨论研究Portal实现的原理,Patteren, Best Practice.
主流企业门户应用性能评测
http://www2.ccw.com.cn/04/0430/d/0430d31_1.asp
几种Portal技术的比较与评述
http://www.ccw.com.cn/cio/research/info/htm2004/20040813_13UNG.asp
4款EIP软件评测揭晓
http://www.zdnet.com.cn/bizstrategy/eb/tech/story/0,3800029745,39156043,00.htm
How the portals scored
http://www.infoworld.com/article/04/04/30/18FEportalbl_1.html
Enterprise Portals Suites
Portal Power
http://www.networkcomputing.com/shared/article/printFullArticle.jhtml?articleID=18900467
---------------
jsr 168:
http://jcp.org/en/jsr/detail?id=168
---------------
转自 http://blog.tianya.cn/blogger/post_show.asp?BlogID=423541&PostID=5310210
分享到:
相关推荐
**Portal技术原理详解** 在IT领域,Portal技术是一种集成了多种信息和服务的统一访问平台,它为用户提供个性化、一站式的访问体验。Portal的核心概念是"Porlet",它相当于门户中的一个窗口,用户可以通过Porlet访问...
### Portal认证原理详解 #### 一、Portal协议概述 **Portal认证**,也被称作Web认证,是一种通过特定门户站点来进行用户...通过深入了解其原理与组网方式,我们可以更好地利用这一技术来提高网络安全性和用户体验。
### Portal技术白皮书知识点详解 #### 一、概述 Portal技术是一种允许用户通过Web浏览器进行身份验证的技术,用户在连接网络之前必须先通过Portal页面完成认证过程。该技术不仅简化了用户认证流程,还提供了丰富的...
虽然描述部分没有提供具体信息,但我们可以从标题推测,本文将围绕Portal技术的基本概念、工作原理以及一个实际的示例来展开讨论,帮助读者理解如何在项目中运用Portal技术。 **知识点详解:** 1. **Portal技术...
6.1_Portal认证技术_Portal技术原理 6.2.1_Portal认证技术_Portal配置部署1 6.2.2_Portal认证技术_Portal配置部署2 6.3_Portal认证技术_Portal故障处理 7.1_访客管理技术_访客管理功能及接入原理 7.2_访客管理...
强制门户演示 这是一个简单的强制网络门户的演示使用NodeMCU / ESP8266。 要求 需要将RGB LED指示灯连接到端口5、4、0(这些是ESP8266端口号,而不是NodeMCU的端口号) 如何使用它 import captive ...
根据提供的文件信息,我们可以整理出以下关于Portal开发学习的技术要求,这些内容对于希望从事或提升在Portal开发领域技能的学习者非常有用。 ### Portal开发基础知识 #### 1. Java 应用开发基础 - **Java**: Java...
综上所述,《Portal服务器配置详细手册》全面覆盖了Portal认证的技术原理、配置步骤及实战案例,对于从事网络管理和运维工作的技术人员具有重要的参考价值。通过学习和实践这些知识点,可以有效提升网络的安全性和...
总的来说,Portal技术是现代企业信息化的重要工具,掌握其原理和实践方法对于IT专业人士来说具有很高的价值。通过图文并茂的方式,结合数据库的高效管理,可以构建出满足用户需求,同时提升企业信息共享与协作水平的...
Portal认证的基本原理是:当未认证用户尝试访问互联网时,网络设备(例如华为的MA5200系列设备或其他支持Portal认证的宽带接入服务器)会强制用户登录到指定的门户网站主页。在这个主页上,用户需要完成认证流程才能...
进入了爆炸性增长阶段,成为全球信息交流的主要平台。 2. Internet Information ...无论是对于IT专业人员还是业务操作员,掌握Proficy Portal的基本原理和操作方法,都将对提升工作效率和企业竞争力产生积极影响。
本文介绍了防火墙用户管理技术,主要包括AAA(认证、授权、计费)技术原理及其在防火墙中的应用。文章详细阐述了用户组织架构及分类、用户认证流程、认证策略和用户认证配置等方面的内容。重点介绍了AAA技术的实现...
Portal认证的工作原理是,当未认证的设备试图访问网络时,BRAS(Broadband Remote Access Server,宽带远程接入服务器)会拦截该请求,并将用户重定向到一个认证页面。这个页面通常由认证服务器提供,用户在此输入...
虽然上述方案可以实现Portal认证,但它们可能还不够灵活或需要较深的技术知识。因此,了解Wifidog的工作原理,并自行编写一个轻量级的WebPortal认证服务器是一个值得探索的方向。编写这样的服务器需要具备程序设计...
在信息化建设日益发达的今天,Portal技术成为了企业级应用集成的重要手段,它为用户提供了一站式访问各种信息和服务的统一入口。本文将深入探讨Portal的基础概念、核心功能以及如何进行入门学习。 1. **Portal的...
《JBoss Portal Server Development》是一本专注于JBoss Portal Server开发的专业书籍,提供了丰富的实例和源码,帮助开发者深入理解并掌握该技术。书中的每个章节都对应着一系列的代码示例,这些示例覆盖了从基础到...