`

Portal实现原理 转载

阅读更多

出自http://www.iteye.com/topic/7005,转自:http://buaawhl.iteye.com

 

 

    <script type="text/javascript"></script> 关键字: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。比如:





    <jsp:include page="&amp;rdquo;1.jsp”">

    <jsp:include page="&amp;rdquo;3.jsp”">

    <jsp:include page="&amp;rdquo;7.jsp”">

    由于<jsp:include>只能指定固定的jsp文件名,不能动态指定jsp文件名。我们需要把<jsp:include>翻译为Java code – RequestDispatcher.include();
    下面我们换成这种写法。
    [code="java"]





    <% request.getRequestDispatcher(”1.jsp”).include(request, response); />

    <% request.getRequestDispatcher(”3.jsp”).include(request, response); />

    <% request.getRequestDispatcher(”7.jsp”).include(request, response); />

    [/code]
    进一步改进MyPage.jsp。
    [code="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); />

    [/code]
    其中的fileNames的内容可以各种各样,只要RequestDispatcher能够处理。
    比如Velocity,fileNames = {“1.vm”, “3.vm”, “7.vm”};
    比如URL,fileNames = {“/portlet1.do”, “/portlet3.do”, “/portlet4.do”};
    我们可以看到,如果我们从用户配置中读取fileNames的内容,这就是一个简单的Portal实现。
    [code="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); />

    [/code]
    2.2 Portlet Interface
    下面我们来扩展这个例子。
    假设每个Portlet都规定实现一个Portlet接口。
    [code="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);
    }
    };
    [/code]
    上述代码是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技术实现[实例]”** **描述:** 这篇博客文章,通过作者weiwei2010在iteye.com上的分享,深入探讨了Portal技术的实际应用和实现方法。虽然描述部分没有提供具体信息,但我们可以从标题推测,本文将...

    portal原理,详细讲解

    **Portal技术原理详解** 在IT领域,Portal技术是一种集成了多种信息和服务的统一访问平台,它为用户提供个性化、一站式的访问体验。Portal的核心概念是"Porlet",它相当于门户中的一个窗口,用户可以通过Porlet访问...

    portal认证原理

    ### Portal认证原理详解 #### 一、Portal协议概述 **Portal认证**,也被称作Web认证,是一种通过特定门户站点来进行用户身份验证的方法。它的基本思路是:未经过认证的用户试图访问网络资源时,会被重定向至一个...

    OpenWRT实现Portal认证

    OpenWRT实现Portal认证是一种网络认证方式,它涉及在OpenWRT开源路由器操作系统中配置特定软件来实现用户登录和身份验证。Portal认证通常用于无线网络环境中,使得用户在连接到无线热点时,必须通过一个登录页面输入...

    OpenWRT 下实现 Portal 认证(WEB 认证)

    在OpenWRT上实现Portal认证主要可以通过以下几种方案: 1. chillispot:这是一个比较早期的解决方案,但因为原维护作者停止更新,现在由***接管继续开发。它虽然功能基础,但曾经是OpenWRT上常见的Portal认证解决...

    js实现portal布局效果

    在本话题中,我们将探讨如何利用JS实现Portal布局效果。Portal布局是一种将不同区域的内容组合在一起,形成一个统一的入口,为用户提供无缝浏览体验的设计模式。这种布局方式常见于企业门户、新闻网站等,可以有效地...

    基于php实现的Intechnic In-portal platform v1.0.7-in-portal107

    基于php实现的Intechnic In-portal platform v1.0.7_in-portal107基于php实现的Intechnic In-portal platform v1.0.7_in-portal107基于php实现的Intechnic In-portal platform v1.0.7_in-portal107基于php实现的...

    基于jquery实现的portal 拖拽实现布局调整

    在本示例中,我们关注的是一个基于jQuery实现的Portal布局调整功能,而不是依赖于EasyUI Portal或Sortable插件。这个功能通过拖拽操作使用户能够自定义门户页面上的组件位置,从而实现个性化的布局。 首先,我们要...

    使用portal实现个人工作台

    标题“使用portal实现个人工作台”涉及到的是在企业级应用中构建用户个性化界面的技术实践。在企业信息系统中,工作台通常作为用户访问各种业务功能的入口,提供个性化配置,满足不同角色用户的需求。以下是关于这一...

    基于jquery ui实现的portal

    "基于jquery ui实现的portal"这个主题,主要涉及到如何利用jQuery UI来构建一个门户页面。门户页面通常是一个集成了多种功能和信息展示的入口,它能够根据用户需求个性化定制,提供一站式的服务体验。 首先,我们...

    基于Liferay+Portal技术的校园信息门户研究与实现

    ### 基于Liferay+Portal技术的校园信息门户研究与实现 #### 一、引言 随着信息科技与通信技术的迅猛发展,数字化校园已成为高等教育机构信息化建设的重要组成部分。数字化校园不仅为师生提供了海量信息资源和服务...

    portal应用配置案例

    Portal认证的基本原理是:当未认证用户尝试访问互联网时,网络设备(例如华为的MA5200系列设备或其他支持Portal认证的宽带接入服务器)会强制用户登录到指定的门户网站主页。在这个主页上,用户需要完成认证流程才能...

    portal介绍,portal系统组成

    这种认证方式通过特定的门户网站来实现用户的身份验证。当用户尝试访问互联网时,如果没有预先通过认证,设备会自动将其重定向至一个特定的门户页面。在这个页面上,用户需输入有效的凭证(例如用户名和密码),通过...

    portal服务器配置详细手册

    综上所述,《Portal服务器配置详细手册》全面覆盖了Portal认证的技术原理、配置步骤及实战案例,对于从事网络管理和运维工作的技术人员具有重要的参考价值。通过学习和实践这些知识点,可以有效提升网络的安全性和...

    Proficy_Portal培训

    进入了爆炸性增长阶段,成为全球信息交流的主要平台。 2. Internet Information ...无论是对于IT专业人员还是业务操作员,掌握Proficy Portal的基本原理和操作方法,都将对提升工作效率和企业竞争力产生积极影响。

    Portal培訓教材之第7章_常见SSO原理及其实现_FromIBM(7)

    ### Portal培训教材之第7章_常见SSO原理及其实现 #### SSO概念与原理 单点登录(Single Sign-On, SSO)是一种让用户仅需登录一次即可访问多个相互信任的应用系统的解决方案。这种机制极大地提高了用户体验并简化了...

    NC65portal开发文档.rar

    文档首先会介绍NC65portal的基础概念,包括平台的工作原理、模块化设计、服务接口和数据模型。开发者可以从中了解到如何利用这些基础元素构建和扩展应用。文档还可能涵盖平台的API(应用程序编程接口)详解,这些API...

    jQuery布局插件portal.zip

    Portal插件利用CSS定位技术(如绝对定位、相对定位)来实现布局。它将页面划分为多个可配置的区域(或称为“portlet”),这些区域可以自由调整大小和位置。此外,插件支持响应式设计,可以根据不同的设备屏幕尺寸...

Global site tag (gtag.js) - Google Analytics