Liferay Portal学习笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Liferay Portal学习笔记相关的知识,希望对你有一定的参考价值。
Portal:
是一个基于web的应用程序,他主要提供个性化、单点登录、不同来源的内容整合以及存放信息系统的表示层。
特点:
低成本的集成技术,如果你的网站或企业已经有了很多信息系统,Portal可以很容易的将浙西系统集成起来,并以统一的方式提供给用户。
统一可以有:
流程的统一:如,登录,定制,浏览
界面的统一:如,显示风格高度的模块化
通过Portal技术提供的plugin技术,可以根据企业,网游的需求编制标准的模块,并嵌入Portal系统,供企业,网友使用
高度的扩展性,已经有了很多产品和标准来制定Portal,作为这些产品和标准,如 jsr-168,通过Portal的概念来对Portal的功能进行扩展
Potal的作用:
一是针对跟人(网友)的应用。由于Portal的特色,企业和网站可以很容易的将自己的服务进行标准封装,插入Portal系统,
提供给用户使用。现在很多门户网站和专业网站有很多服务,但是很多服务用户根本就没有使用过,发现过,通过Potal的形式给用户一个集中体验的场所。
二是针对企业,企业可以将现有的信息系统、资源通过Portal来进行封装,提供给用户使用,比如有些公司的报销系统,考核系统,会议系统,但这些系统都是彼此分离的,使用和界面并不统一
,通过Portal可以很容易的将这些系统提供的服务封装并呈给用户使用
产品介绍:
Portal产品发展很快,功能不断增强,应用更加方便,并进一步向SOA(面向服务)靠拢,在SOA架构中扮演着用户展示层的角色。
Portal系统配套的软件主要有:Java应用服务器软件、Portal服务软件、数据库系统或LDAP,身份认证和权限管理系统,相关的协作软件如电子邮件、网络会议、聊天和论坛、博客和威客等,
liferay是Portal的开源产品
Portlet概念:
构成Portal页面的是能够简历和展现不同内容的一系列Portlet。Portlet使用Portlet作为可插拔用户接口组建,提供信息系统的表示层。
Portlet是部署在特定容器内用来生成动态内容的可重用web组建。Portlet处理从Portal传递来的用户请求,动态生成输出内容的一个片段,展现在Portal页面的某个位置上。
Portlet特点:
Portlet是基于Java技术的Web组件。
由专门的容器管理Portlet。
Portlet用于生成动态内容。
Portlet至声称标记片段,并不产生完整的Web页面。由Portal负责将Portlet片段整合成完整的Portal页面。
Portlet不直接捆绑到URL
web用户通过Portal同Portlet进行交互
Portlet具有预定义的模版和视窗状态
Portlet容器是Portlet的运行环境,它负责管理Portlet的生命周期,保存Portlet的定制信息。通俗的讲,Portlet容器就是Portlet组件工作的管理器,这一点类似于Servlet容器和Servlet之间的关系
Portlet中的对象:
1.PortletRequest分为RenderRequest和ActionRequest两种,分别由renderURL和
actionURL来触发。
2.Portlet的开发过程中尽量使用renderURL避免actionURL.
3.actionURL适用于有确实的Action的情况下,例如form提交后Persistent状态的改变,session的改变
perference的修改等。
4.使用acionURL的java代码:
<%
portlet URL pu = renderResponse.createActionURL();
pu.setParameter("ACTION","LOGIN");
<form name="userform" method="post" action="%=pu.toString()%">
%>
(表单提交最好使用Post方法而不是Get方法,因为某些Potal服务器可能会将内部状态编码到URL的Query字符串中)
5.使用renderURL代码:
<%
Portlet URL pu=renderResponse.createRenderURL();
pu.setParameter("PAGE",Number);
%>
<a href="<%=pu%>"下一页</a>
6.renderURL和actionURL的处理方式
当客户端请求是由一个renderURL触发的时候,Potal服务器会调用该Potal页面所有Portlet的render方法
当客户端请求是由一个actionURL触发的时候,Potal服务器会先按用该页面所有Portlet的processAction方法再调用render方法。
7.RenderRequest和ActionRequest的parameter参数作用范围:
当客户端请求由一个actionRequest触发时,所有parameter参数的取得都必须在processAction方法中进行,比如:
public void processAction(ActionRequest req,ActionResponse resp){
String str = req.getParameter("ACTION");
//response.setRenderParameter("ACTION".action);
}
public void doView(ActionRequest req,ActionResponse res){
String str = req.getParameter("ACTION");
}
action request的参数,render方法中不可以直接取到,必须使用setRenderParameter方法再次传递一次。
8.Response对象:
和Request对象一样,Response对象也有两种:RenderResponse和ActionResponse,分别用来封装对应的RenderRequest和ActionRequest的返回信息,
比如重定向、窗口状态、Portlet模式等。他们两者的父类PortletResponse拥有setPorperty和getPorperty两个方法,用来传递信息给Portal容器。
ActitonResponse主要用来处理以下功能:
a)重定向
b)改变窗口状态、Portlet模式
c)传递parameter参数到RenderRequest中去
RenderResponse主要用来提供一下功能:
d)设置ContentType
e)得到OutputStream和Writer对象,用来输出页面内容
f)Buffering缓冲
g)设定Portlet的标题,但是必须在Portlet输出前调用,否则将被忽略
9.PortletConfig对象:
和ServletConfig对象类似,Portlet对象提供对Portlet初始化信息以及PortletContext对象存取的方法
和ServletConfig对象不同的是,PortletConfig对象提供对Portlet的标题资源的i18n支持,可以通过设定不同的ResourceBundle文件以提供多种语言支持
10.Session对象:
由于容器不同,Portal的Session对象与Selet的Session对象略有不同。由于Portlet处于Portal服务器的缘故,Portlet的Session分为Application Scope和PortletScope
两者的区别:
a)Application Scope范围的Session中保存的对象,对于同一个Portlet应用范围内的所有Portlet都是可用的
b)Port Scope范围的Session中保存的对象,只对本Portlet可用,其他Portlet即使在同一个应用中,也不可用
但是对于Portlet应用来数,可以通过HttpSession来访问,毕竟Port应用也是Web应用,在使用Session对象的时候,最好能明确指出使用的是哪个Scope范围的Session
xml代码:
<portlet:actionURL windowState="NORMAL" portletMode="view" var="pu1">
<portlet:param name="ACTION" value="ApplicationScope"/>
</portlet:actionURL>
<portlet:actionURL windowState="NORMAL" portletMode="view" var="pu2">
<portlet:param name="ACTION" value="PortletScope"/>
</portlet:actionURL>
这个JSP创建了两个ActionURL,分别产生了两种PortletSession对象
java代码:
PortletSession ps = req.getPortletSession();
if(ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE)!=null){
app=ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE).toString();
}
if(ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE)!=null){
portlet=ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE).toString();
}
以上代码根据需要去的不同Scope范围的Session对象值,同一个应用下,可以直接通过ServletSession取得
PortletSession.APPLICATION_SCOPE范围下的Session对象值
HttpSession se = request.getSession();
if(se.getAttribute("PortletSession.AS")!=null){
app=se.getAttribute("PortletSession.AS");
}
11.preference对象
Preference对象被设计用来实现用户的个性化设置,可以帮助用户对Portlet进行符合用户需求的显示定制和行为定制,可以替代部分的数据库功能,需要
指出的是,Preference对象只是用来存取简单的配置信息,并不能完全替代数据库应用。Preference对象对于配置信息采用键-值的形式存取,用户可以将需要的信息暂时保存在Preference中
java代码:
PortletPreference p = req.getPortletPreference();
p.setValue("educhina.username","educhina");
p.store();
Preference对象用来存取用户的个性化信息,所以不同用户的Preference对象不能共享,这点跟Session不同,可以在Portlet.xml中配置Preference信息:
<portlet-preferences>
<preference>
<name>educhina.username</name>
<value>educhina</value>
<read-only>true<read-only>
</preference>
</portlet-preferences>
http://blog.csdn.net/liwenjian/article/details/7902966
liferay开发环境
Portal结构:
Portal是一个web页面,它由一个或若干个Portal页面组织而成,portlet以窗口的形式出现在Portal页面里
Portlet窗口由两部分构成,其一是外观,包含有标题条、窗口控制和边框样式,其二是内容,即Portlet片段
Portal逻辑架构:
Portal系统一般由Portal服务器、支持Servlet的Java应用服务器或web服务器。数据库服务器、LDAP服务器组成,此外还可以加上身份认证和访问控制服务器等,前面所说的Portlet容器通常是打包在Portal服务器中的。
Portal功能结构:
- 单点登录
- 资源整合
- 定制与个性化
- 协作功能
- 工作流
- 信息检索
- 客户端
Liferay简介:
Liferay是当今较为成熟的开源企业级Portal软件产品。Liferay采用java与web2.0技术构建,采用了uixin的java技术和架构,提供了功能较强的内容管理器支持22中语言,提供了较为完整的技术文档
由于采用了良好的技术架构,liferay能够提供较大型的企业级应用。使用者还可以对Liferay源码进行修改,通过二次开发添加新的功能,来满足实际生产的需要。
Liferay也是一个构建高效企业应用程序和解决方案的开源平台,Liferay具备高可靠性,高扩展性,提供高效的开发工具。
Liferay 功能分类:
Liferay具备健壮的功能体系,提供超过60多个开箱即用的portlet.主要分为三类:
a) 门户、内容管理&web发布
Liferay门户的内容管理系统结构完整,系统支持基于角色的工作流管理,实现从内容编辑、审批到最终发布展现的全过程控制,内容编辑与展现分离、支持版本管理。文档库管理支持文档锁定、协作中的文档自动类型转换、webdev支持、整合微软office实现动态文件共享。内容也可以存储在第三方系统中,例如Jackrabbit,Magnolia,和Alfresco等。同时,用户也可以通过无缝的整合本地、网络内容或者第三方应用程序,发布完整的企业级解决方案到web上
b) 协作应用
Liferay协作应用套间包含公告、Blogs、wiki、RSS标记、通用元数据、社交书签等,在Liferay灵活的组织和社区中进行应用。通过这些应用,可以方便的讨论共同感兴趣的只是;不仅用户自己可以通过邮件客户端和日历管理工作过程,也可以在一个群体里面相互分享经验与想法。
c) 社交应用
Liferay内容与协作管理功能旨在为企业提供开箱即用的社交网络套间,例如通过即时消息和活动跟踪等功能,可以方便的进行实时沟通与交流。同时Liferay Social API为用户构建本地化的社交程序提供一个平台支持。用户可以随意插入Liferay的社交特性,Liferay允许第三方应用程序加入到Liferay的activityfeeds,member,”friend”列表等。
Liferay提供构建完整社交网络功能的工具和框架,通过定制,可以满足各类独特的需求。
Liferay特点:
a) 兼容主流数据库,操作系统及应用服务器中间件。
b) 良好的系统分层结构
c) 细粒度、灵活的权限管理系统
d) 高可靠性,单机应用可支持超过5000(33000同时在线用户)并发
e) 案例丰富,
f) 支持22种语言,开箱即用
g) 丰富的用户接口
特点:易用性
Liferay提供丰富、易用的”web2.0”接口,充分应用Ajax和其他的展现层技术。具有简洁的基于GUI的个性化机制、托拉拽、动态导航和面包屑导航(面包屑导航的在作用是告诉访问者他啊门目前在网站中的位置以及如何返回)等特点,平台同时也整合了YUI3,jQuery等特性,也可以方便的整合个性化的javascript库
特点:组织灵活性
Liferay Portal可以通过部门、地理位置、办公室、或者跨部门的团队、工作组进行用户组织。每一个社区和组织都能够击沉和定义自己的权限和管理员、组,通过角色管理确定所选择包含的portlet。虚拟主机允许社区和组织定义独立的友好访问地址(域名地址)、主题和配置等。各社区和组织之间相互独立。
特点:soa架构
Liferay Portal架构灵活、抑郁继承,平台采用面向服务的架构(soa),有效加快用户开发周期,支撑构建可重用的服务和复合应用程序开发。
特点:开放性
Liferay Portal是一个开放的框架,对Web Service(SOAP),JSON,RMI以及Liferay专有的隧道均有完整的API支持,只要已存在的应用程序是开放的,且是通过service层或者API提供支撑,均可以使用Liferay进行整合。
特点:安全性可控
Liferay Portal应用工业级标准,政府级安全加密技术,使用DES,MD5,RSA等高级算法,提供可定制的单独登录解决方案,整合Yale CAS,JAAS,LDAP,Netegrlt
Liferay Portal提供强健的用户管理以及密码保护,用户题型设置,安全登录过程等安全特性。遵循OWASP原则,减少安全缺陷导致的风险
Liferay其他安全特性包括:
可插拔的认证机制;
Email验证
特点:高性能
应用服务器上,经过测试,Liferay Portal支持超过3000并发,平均一秒钟时间,系统吞吐量可达79次登陆以上。。。
Liferay Portal也可以部署在云环境和虚拟服务器环境,采用以下策略确保高可用性及高性能:
a) 硬件/软件 负载均衡,http故障转移,Session复制
b) 应用轻量级多播协议,支持分布式缓存
c) Terracotta,Oracle RAC以及其他可扩展的解决方案
https://wenku.baidu.com/view/aed6ef008762caaedd33d4e0.html
34页开始 安装及开发环境
1.PortletRequest分为RenderRequest和ActionRequest两种,分别由renderURL和
actionURL来触发。
2.Portlet的开发过程中尽量使用renderURL避免actionURL.
3.actionURL适用于有确实的Action的情况下,例如form提交后Persistent状态的改变,session的改变
perference的修改等。
4.使用acionURL的java代码:
<%
portlet URL pu = renderResponse.createActionURL();
pu.setParameter("ACTION","LOGIN");
<form name="userform" method="post" action="%=pu.toString()%">
%>
(表单提交最好使用Post方法而不是Get方法,因为某些Potal服务器可能会将内部状态编码到URL的Query字符串中)
5.使用renderURL代码:
<%
Portlet URL pu=renderResponse.createRenderURL();
pu.setParameter("PAGE",Number);
%>
<a href="<%=pu%>"下一页</a>
6.renderURL和actionURL的处理方式
当客户端请求是由一个renderURL触发的时候,Potal服务器会调用该Potal页面所有Portlet的render方法
当客户端请求是由一个actionURL触发的时候,Potal服务器会先按用该页面所有Portlet的processAction方法再调用render方法。
7.RenderRequest和ActionRequest的parameter参数作用范围:
当客户端请求由一个actionRequest触发时,所有parameter参数的取得都必须在processAction方法中进行,比如:
public void processAction(ActionRequest req,ActionResponse resp){
String str = req.getParameter("ACTION");
//response.setRenderParameter("ACTION".action);
}
public void doView(ActionRequest req,ActionResponse res){
String str = req.getParameter("ACTION");
}
action request的参数,render方法中不可以直接取到,必须使用setRenderParameter方法再次传递一次。
8.Response对象:
和Request对象一样,Response对象也有两种:RenderResponse和ActionResponse,分别用来封装对应的RenderRequest和ActionRequest的返回信息,
比如重定向、窗口状态、Portlet模式等。他们两者的父类PortletResponse拥有setPorperty和getPorperty两个方法,用来传递信息给Portal容器。
ActitonResponse主要用来处理以下功能:
a)重定向
b)改变窗口状态、Portlet模式
c)传递parameter参数到RenderRequest中去
RenderResponse主要用来提供一下功能:
d)设置ContentType
e)得到OutputStream和Writer对象,用来输出页面内容
f)Buffering缓冲
g)设定Portlet的标题,但是必须在Portlet输出前调用,否则将被忽略
9.PortletConfig对象:
和ServletConfig对象类似,Portlet对象提供对Portlet初始化信息以及PortletContext对象存取的方法
和ServletConfig对象不同的是,PortletConfig对象提供对Portlet的标题资源的i18n支持,可以通过设定不同的ResourceBundle文件以提供多种语言支持
10.Session对象:
由于容器不同,Portal的Session对象与Selet的Session对象略有不同。由于Portlet处于Portal服务器的缘故,Portlet的Session分为Application Scope和PortletScope
两者的区别:
a)Application Scope范围的Session中保存的对象,对于同一个Portlet应用范围内的所有Portlet都是可用的
b)Port Scope范围的Session中保存的对象,只对本Portlet可用,其他Portlet即使在同一个应用中,也不可用
但是对于Portlet应用来数,可以通过HttpSession来访问,毕竟Port应用也是Web应用,在使用Session对象的时候,最好能明确指出使用的是哪个Scope范围的Session
xml代码:
<portlet:actionURL windowState="NORMAL" portletMode="view" var="pu1">
<portlet:param name="ACTION" value="ApplicationScope"/>
</portlet:actionURL>
<portlet:actionURL windowState="NORMAL" portletMode="view" var="pu2">
<portlet:param name="ACTION" value="PortletScope"/>
</portlet:actionURL>
这个JSP创建了两个ActionURL,分别产生了两种PortletSession对象
java代码:
PortletSession ps = req.getPortletSession();
if(ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE)!=null){
app=ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE).toString();
}
if(ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE)!=null){
portlet=ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE).toString();
}
以上代码根据需要去的不同Scope范围的Session对象值,同一个应用下,可以直接通过ServletSession取得
PortletSession.APPLICATION_SCOPE范围下的Session对象值
HttpSession se = request.getSession();
if(se.getAttribute("PortletSession.AS")!=null){
app=se.getAttribute("PortletSession.AS");
}
11.preference对象
Preference对象被设计用来实现用户的个性化设置,可以帮助用户对Portlet进行符合用户需求的显示定制和行为定制,可以替代部分的数据库功能,需要
指出的是,Preference对象只是用来存取简单的配置信息,并不能完全替代数据库应用。Preference对象对于配置信息采用键-值的形式存取,用户可以将需要的信息暂时保存在Preference中
java代码:
PortletPreference p = req.getPortletPreference();
p.setValue("educhina.username","educhina");
p.store();
Preference对象用来存取用户的个性化信息,所以不同用户的Preference对象不能共享,这点跟Session不同,可以在Portlet.xml中配置Preference信息:
<portlet-preferences>
<preference>
<name>educhina.username</name>
<value>educhina</value>
<read-only>true<read-only>
</preference>
</portlet-preferences>
http://blog.csdn.net/liwenjian/article/details/7902966
liferay开发环境
以上是关于Liferay Portal学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
Liferay 用户创建异常 com.liferay.portal.GroupFriendlyURLException