开源平台Portal  liferay介绍:
一、 平台已经提供的功能:
1. 个性化平台
2. 基本的portlet组件(用户管理、组织机构管理、角管理、portlet管理、日历、论坛、博客、文档库、图片库、CMS)
3. 与其他开源项目的集成
单点登陆:CAS
工作流:JBPM
即时通讯:jabber
邮件:
4. 移动门户
5. 功能扩展
二、 平台相关分析
1. 技术构成:
2. 权限结构
01.用户管理
  02.组织机构管理
  03.权限划分:用户-用户组-角-portlet
3. portal应用的目录结构
4. 对外服务:
已提供服务接口
三、 二次开发
1. jsr168标准
01. 与servlet的异同
Portlet Servlet 的相似之处
Portlet 也是 Java 技术的 web 组件
Portlet 也是有特定的 container 在管理
Portlet 可以动态产生各种内容
Portlet 的生命周期由 container 所管理
Portlet 和客户端的互动是通过 request/response 的机制
Portlet Servlet 的一些不同
  Portlet 只产生 markup 信息片段,不是完整的网页文件。而 Portal 会将所有的Portlet markup 信息片段放到一个完整的 Portal 网页。
  Portlet 不会和 URL 有直接的关系
  客户端必须通过 portal 系统才能和 Portlet 互动
  Portlet 有一些定义好的 request 处理,action request 以及 render request
Portlet 默认定义 Portlet modes 及窗口状态可以指出在网页中该 Portlet 的哪个功
能正在执行及现在的 状态。
  Portlet 可以在同一个 portal 网页之中存在多个。
Portlet 有一些附加的功能是 Servlet 所没有的
Portlet 能够存取及储存永久配置文件及定制资料。
  Portlet 可以存取使用者数据
  Portlet 具有 URL 的重写功能在文件中去动态建立连结,允许 portal server 不用去
知道如何在网页的片 段之中建立连结及动作。
  Portlet 可以储存临时性的数据在 Portlet session 之中,拥有两个不同的范围
application-wide scope Portlet private scope
Portlet 不具有一些功能, 但是 Servlet 却有提供
  Servlet 具有设置输出的文字编码( character set encoding)方式
  Servlet 可以设置 HTTP 输出的 header
  Servlet 才能够接收客户对于 portal 发出的 URL 请求
02. Portal对象
Request对象
Action Request:由actionURL触发,通常处理表单 form提交后 Persistent 状态的改变、session 的改变、perference 的修改等等
Render Request:由renderURL触发,通常处理portlet导航
Response对象
ActionResponsea重定向 b 改变窗口状态、Portlet 模式c 传递 parameter 参数到 RenderRequest 中去
RenderResponsea 设置 ContentType b 得到 OutputStream Writer 对象,用来输出页面内容 c Buffering 缓冲 d 设定 Portlet 的标题,但是必须在 Portlet 输出前调用,否则将被忽略
PortletConfig 对像
ServletConfig 对象类似,PortletConfig 对象提供对 Portlet 初始化信息以及PortletContext 对象存取的方法。
ServletConfig 对象不同的是,PortletConfig 对象提供对 Portlet 的标题等资源的 I18N支持,可以通过设定不同的 Resource Bundle 文件以提供多种语言支持。
Session对象
Application Scope :范围的 Session 中保存的对象,对于同一个 Portlet 应用范围内的所有Portlet 都是可用的。
Portlet Scope 范围的 Session 中保存的对象,只对本 Portlet 可用,其他 Portlet 即使在同一个应用中,也不可用。
Preference对象
用来实现用户的个性化设置,可以帮助用户对 Portlet 进行符合用
户需求的显示定制和行为定制,可以替代部分的数据库功能。
说明:Preference 对象只是用来存取简单的配置信息,并不能完全替代数据库应用
2. Portlet(HelloWorld)的开发
01. 目录结构
02. 说明
配置文件:
l: 用来定义Portlet的诸如部署名称、初始化参数、支持模式、resource bundle等普通的初始化信息,包括:portlet-namedisplay-nameportlet-classinit-paramexpiration-cathesupports portlet-info security-role-ref 等等
l: 定义Portlet默认可用的用户组、默认模板、是否支持多个实例等
:定义Portal,默认所处的类别
基类:GenericPortlet
统一定义了可供 Portal 容器识别和调用的方法,包括:
public Init():初始化;
public Init(PortletConfig) :初始化;
public getInitParameter(String):取得在 l 中定义的初始化参数;
public getInitParameterNames():取得在 l 中定义的全部初始化参数;
public getPortletConfig():取得包含初始化参数的配置对象 PortletConfig 实例;
public getPortletContext():取得 Portlet 上下文;
public getPortletName():取得在 l 中定义的 Portlet 名称。
public getResourceBundle(Locale) :取得 Portlet 国际化的 Resource Bundle
protected getTitle(RenderRequest) iframe参数传递:取得 Portlet 的标题;
protected doView(RenderRequestRenderResponse) Portlet 浏览模式的处理方法;
protected doEdit(RenderRequestRenderResponse) Portlet 编辑模式的处理方法;
protected doHelp(RenderRequestRenderResponse) Portlet 帮助模式的处理方法;
protected doDispatch(RenderRequestRenderResponse) Portlet 行为分发;
protected processAction(RenderRequestRenderResponse) Portlet 处理 Action Request的方法;