- 浏览: 313035 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (195)
- 心情随想 (20)
- java基础 (30)
- 技术文章 (4)
- 在oracle的海洋中遨游 (25)
- unix (5)
- 没有意义 (6)
- 效率 (1)
- js (5)
- hibernate (2)
- jfreechart (3)
- 分析 (1)
- DW (2)
- on-line analytical processing (1)
- 人工智能理论 (10)
- weblogic (4)
- 我也cvs (0)
- TAM SSO 应用改造 (2)
- LADP (2)
- servlet (1)
- java 编码 (3)
- 智科 语录 (2)
- java 工作流 (1)
- swt (1)
- java pattern (1)
- xml和html基础 (19)
- c# (3)
- eclipse (1)
- db2 (4)
- 面试题 (0)
- english (2)
- Ruby (1)
- OLAP (3)
- 网友的智慧 (1)
- SOA (1)
- 搜索引擎 (4)
- 构建自己的报表工具 (1)
- JMX (1)
- 朝花朝拾 之少年记忆 (3)
- C语言 (2)
- struts2 (4)
- 元数据 数据仓库 (1)
- liferay (1)
- 分析工具 (0)
最新评论
-
yy8093:
只能在JDK1.4下监控WebLogic Server 8.x ...
weblogic JMX 中遇到的问题 -
di1984HIT:
问题找到了,就是1.4和1.5不兼容导致的,通过分析Objec ...
weblogic JMX 中遇到的问题_2 -
hillhill:
getServletContext().getRealPath ...
request.getRealPath("/") AIX不同与windows -
mrgood:
哥错了,这问题太傻逼了 一时没看出来
登录验证 struts2 -
mrgood:
LoginAction.java里面 if(getUserna ...
登录验证 struts2
出自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="&rdquo;1.jsp”"> |
<jsp:include page="&rdquo;3.jsp”"> |
<jsp:include page="&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当中。
发表评论
-
一个好用的树-dhtmlXTree
2008-09-05 16:00 3726关键字:dhtmlXTree 转载地址:http://www. ... -
JavaScript 获取浏览器的显示区域大小信息
2008-08-02 19:17 1250区域说明 JavaScript Code 网页可见区域宽 ... -
多项选择框的移入 移出 <select multiple="multiple">
2008-06-06 09:58 5349<!DOCTYPE HTML PUBLIC " ... -
The Form Garden表单花园在线生成表单样式,并有CSS文件下载
2008-05-30 19:06 2694表单花园是一个可以在线制作表单样式的网站,有一些爱好者提供表单 ... -
带输入的选择框
2008-05-08 17:28 1062<!DOCTYPE HTML PUBLIC " ... -
横向的JS相册效果
2008-04-30 17:44 3020<!DOCTYPE html PUBLIC " ... -
弹出层
2008-04-30 17:26 1099<!DOCTYPE html PUBLIC " ... -
div js 分割
2008-04-30 17:24 3816<html> <head> < ... -
拖拽div
2008-04-30 17:21 970<!DOCTYPE html PUBLIC " ... -
拖拽 handle
2008-04-30 17:19 1036<HTML> <HEAD> < ... -
tab选项卡
2008-04-30 17:16 1076<style> body {font-size: ... -
页面模板化
2008-04-30 16:25 865这个是下载合肥论坛自定义空间的模板,仅供学习使用,欢迎大家讨论 ... -
XML基础
2008-04-28 08:37 828xml元素命名必须遵守如下的规则: 1:元素的名字包含字母 ... -
HTML and XML的行为
2008-04-27 17:16 876XML 行为behavior 新的DHTML? behav ... -
XML和HTML的主要区别是什么
2008-04-27 16:46 16991:xml是用来存放数据的 2: xml不是HTML的替代品, ... -
什么是web标准 (转载)
2008-04-21 09:37 823WEB标准不是某一个标准 ... -
第二课 html的组织结构以及发展方向
2008-03-31 17:27 1176下面是一个遍历文档的例子,通过使用Dom将一个HTML文档解析 ... -
第一课 页面的加载顺序
2008-03-31 16:43 2440一般我们都知道 window.body.onload=什么是在 ...
相关推荐
**标题:“Portal技术实现[实例]”** **描述:** 这篇博客文章,通过作者weiwei2010在iteye.com上的分享,深入探讨了Portal技术的实际应用和实现方法。虽然描述部分没有提供具体信息,但我们可以从标题推测,本文将...
**Portal技术原理详解** 在IT领域,Portal技术是一种集成了多种信息和服务的统一访问平台,它为用户提供个性化、一站式的访问体验。Portal的核心概念是"Porlet",它相当于门户中的一个窗口,用户可以通过Porlet访问...
### Portal认证原理详解 #### 一、Portal协议概述 **Portal认证**,也被称作Web认证,是一种通过特定门户站点来进行用户身份验证的方法。它的基本思路是:未经过认证的用户试图访问网络资源时,会被重定向至一个...
OpenWRT实现Portal认证是一种网络认证方式,它涉及在OpenWRT开源路由器操作系统中配置特定软件来实现用户登录和身份验证。Portal认证通常用于无线网络环境中,使得用户在连接到无线热点时,必须通过一个登录页面输入...
在OpenWRT上实现Portal认证主要可以通过以下几种方案: 1. chillispot:这是一个比较早期的解决方案,但因为原维护作者停止更新,现在由***接管继续开发。它虽然功能基础,但曾经是OpenWRT上常见的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实现的...
在本示例中,我们关注的是一个基于jQuery实现的Portal布局调整功能,而不是依赖于EasyUI Portal或Sortable插件。这个功能通过拖拽操作使用户能够自定义门户页面上的组件位置,从而实现个性化的布局。 首先,我们要...
标题“使用portal实现个人工作台”涉及到的是在企业级应用中构建用户个性化界面的技术实践。在企业信息系统中,工作台通常作为用户访问各种业务功能的入口,提供个性化配置,满足不同角色用户的需求。以下是关于这一...
"基于jquery ui实现的portal"这个主题,主要涉及到如何利用jQuery UI来构建一个门户页面。门户页面通常是一个集成了多种功能和信息展示的入口,它能够根据用户需求个性化定制,提供一站式的服务体验。 首先,我们...
### 基于Liferay+Portal技术的校园信息门户研究与实现 #### 一、引言 随着信息科技与通信技术的迅猛发展,数字化校园已成为高等教育机构信息化建设的重要组成部分。数字化校园不仅为师生提供了海量信息资源和服务...
Portal认证的基本原理是:当未认证用户尝试访问互联网时,网络设备(例如华为的MA5200系列设备或其他支持Portal认证的宽带接入服务器)会强制用户登录到指定的门户网站主页。在这个主页上,用户需要完成认证流程才能...
这种认证方式通过特定的门户网站来实现用户的身份验证。当用户尝试访问互联网时,如果没有预先通过认证,设备会自动将其重定向至一个特定的门户页面。在这个页面上,用户需输入有效的凭证(例如用户名和密码),通过...
综上所述,《Portal服务器配置详细手册》全面覆盖了Portal认证的技术原理、配置步骤及实战案例,对于从事网络管理和运维工作的技术人员具有重要的参考价值。通过学习和实践这些知识点,可以有效提升网络的安全性和...
进入了爆炸性增长阶段,成为全球信息交流的主要平台。 2. Internet Information ...无论是对于IT专业人员还是业务操作员,掌握Proficy Portal的基本原理和操作方法,都将对提升工作效率和企业竞争力产生积极影响。
### Portal培训教材之第7章_常见SSO原理及其实现 #### SSO概念与原理 单点登录(Single Sign-On, SSO)是一种让用户仅需登录一次即可访问多个相互信任的应用系统的解决方案。这种机制极大地提高了用户体验并简化了...
文档首先会介绍NC65portal的基础概念,包括平台的工作原理、模块化设计、服务接口和数据模型。开发者可以从中了解到如何利用这些基础元素构建和扩展应用。文档还可能涵盖平台的API(应用程序编程接口)详解,这些API...
Portal插件利用CSS定位技术(如绝对定位、相对定位)来实现布局。它将页面划分为多个可配置的区域(或称为“portlet”),这些区域可以自由调整大小和位置。此外,插件支持响应式设计,可以根据不同的设备屏幕尺寸...