- 浏览: 307316 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 3695关键字:dhtmlXTree 转载地址:http://www. ... -
JavaScript 获取浏览器的显示区域大小信息
2008-08-02 19:17 1218区域说明 JavaScript Code 网页可见区域宽 ... -
多项选择框的移入 移出 <select multiple="multiple">
2008-06-06 09:58 5312<!DOCTYPE HTML PUBLIC " ... -
The Form Garden表单花园在线生成表单样式,并有CSS文件下载
2008-05-30 19:06 2653表单花园是一个可以在线制作表单样式的网站,有一些爱好者提供表单 ... -
带输入的选择框
2008-05-08 17:28 1032<!DOCTYPE HTML PUBLIC " ... -
横向的JS相册效果
2008-04-30 17:44 2992<!DOCTYPE html PUBLIC " ... -
弹出层
2008-04-30 17:26 1069<!DOCTYPE html PUBLIC " ... -
div js 分割
2008-04-30 17:24 3771<html> <head> < ... -
拖拽div
2008-04-30 17:21 940<!DOCTYPE html PUBLIC " ... -
拖拽 handle
2008-04-30 17:19 978<HTML> <HEAD> < ... -
tab选项卡
2008-04-30 17:16 1044<style> body {font-size: ... -
页面模板化
2008-04-30 16:25 840这个是下载合肥论坛自定义空间的模板,仅供学习使用,欢迎大家讨论 ... -
XML基础
2008-04-28 08:37 798xml元素命名必须遵守如下的规则: 1:元素的名字包含字母 ... -
HTML and XML的行为
2008-04-27 17:16 848XML 行为behavior 新的DHTML? behav ... -
XML和HTML的主要区别是什么
2008-04-27 16:46 16631:xml是用来存放数据的 2: xml不是HTML的替代品, ... -
什么是web标准 (转载)
2008-04-21 09:37 803WEB标准不是某一个标准 ... -
第二课 html的组织结构以及发展方向
2008-03-31 17:27 1148下面是一个遍历文档的例子,通过使用Dom将一个HTML文档解析 ... -
第一课 页面的加载顺序
2008-03-31 16:43 2409一般我们都知道 window.body.onload=什么是在 ...
相关推荐
portal原理,详细讲解,portal原理,详细讲解
js实现portal布局效果 js实现portal布局效果 js实现portal布局效果
主要介绍portal认证的原理,认证的协议交互流程
基于jquery实现的portal 拖拽实现布局调整,基于jquery实现的portal,不是easyui portal,和sortable
讲解wifidog+authpuppy实现OpenWRT下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实现的...
OpenWRT 下实现 Portal 认证(WEB 认证),转载
NULL 博文链接:https://weiwei2010.iteye.com/blog/669237
Portal开发Portal开发Portal开发Portal开发Portal开发Portal开发Portal开发Portal开发Portal开发
使用jquery ui实现的portal演示,可供制作门户页面参考。
基于Liferay+Portal技术的校园信息门户研究与实现
GridPortal的原理和实现 GridPortal的原理和实现 GridPortal的原理和实现 GridPortal的原理和实现
交换机的portal配置方法,非常经典 华为三层交换机:QUIDWAY S3700SI/EI/HI,QUIDWAY S5700SI/EI/HI,QUIDWAY S7700SI/EI/HI
The dictionary defines a portal as a grand or imposing door or entrance; hence, that picture on the cover. In this book, you will learn why the word portal has become a major buzzword in the world of ...
WASWebSphere Portal v6.1 的认证资讯原理.pdf
利用UUP实现Portal和LDAP同步用户信息
Portal 在英语中是入口的意思。Portal 认证通常也称为Web 认证,一般将Portal 认证网站称为门户网站。
Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal Extjs portal
liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南liferay portal 开发指南
jQuery布局插件portal