可以看到这个页面由很多小的窗体组成,这些小窗体就是传说中的portlet,这样portal页面与portlet的关系就清楚了,一个或多个portlet组成portal页面。
其实从portlet这个名字我们很容易就想到了跟它名字上很接近的技术——servlet,其实这个portlet与servlet还真是很相像。
相同点:
1> portlet也同样是java 的web 技术组件
2> portlet也是有特定的container在管理
3> portlet也可以动态的生成各种内容
4> portlet的生命周期由container进行管理
5> portlet与客户端的互动也是通过request/response进行的
不同点:
1> portlet只是整个页面中的一个碎片,有时需要多个portlet协同才能将信息进行完整的展现。
2> portlet不直接与URL发生关系
3> 客户端必须通过portal系统才能和portlet进行交互
4> portlet默认定义portlet的窗口状态,并指出各个状态对应的功能。
5> 一个网页中可以存在零个到多个portlet。
首先来看一个最基本的portlet的例子,编程嘛,最简单的例子嘛,还是从Hello World开始吧,别坏了规矩(其实难的我不太会,呵呵~)。
首先从整体来看,其实portlet的整个生命周期与servlet不尽相同,但是可以利用servlet的生命周期来理解它,既然和servlet的周期相似就让我们先来回顾一下servlet的周期。servlet的生命周期应该算是学习Java Web 编程的入门课程了,生命周期更应该是熟得不能再熟了,init()进行初始化,service()函数包含该servlet的功能代码段,doGet(),doPost(),destroy()摧毁函数?这样翻译是不是显得太村炮了……
在讲述portlet的生命周期前应该说明的是,每个portlet都有几种状态,这个状态可以理解成,每个状态都对应着一个jsp页面,而通过每个窗体的标题栏上的小扳手(wrench)可以进行状态的切换。然而利用这个进行窗体中页面的切换显得确实很麻烦,所以我不推荐这种办法。portlet默认有三种状态,分别是VIEW(查看态)、EDIT(编辑态)、HELP(帮助态)。当然在高级的portlet编程中可以自定义portlet状态。这些状态也不是所有用户都可见的,管理员是所有状态可见的,其他用户根据所分配权限的不同,看到的内容也不一样。这里已超出我们这片文章的讨论范围。portlet的生命周期也是这样,每个portlet类通过继承GenericPorlet这个基类,这个基类中定义了如下的这些方法:
public void init(); 或 public void init(PortalConfig pc); portlet初始化方法
protected void doView(RenderRequest , RenderRespose ); portlet查看态的处理方法
protected void doEdit(RenderRequest , RenderRespose); portlet编辑态的处理方法
protected void doHelp(RenderRequest , RenderRespose); portlet帮助态的处理方法
protected void doDispatcher(RenderRequest , RenderRespose); portlet的分发方法
protected void processAction(RenderRequest , RenderRespose); portlet处理action请求
protected void render(RenderRequest , RenderRespose); portlet处理渲染请求
最后:
public void destroy(); portlet终止方法
下面就列表将servlet生命周期与portlet周期进行比较:
|
servlet
|
portlet
|
初始化阶段
|
init();
|
init();
|
处理逻辑
|
service(),doGet(),doPost();
|
portlet中要处理的请求分为两种,一种是action请求,一种是render请求,然后三种状态分别是View,Edit和Help,分别都有各自的处理函数:(省略参数)
action的请求: processAction();
render的请求: render();
view状态的请求: doView();
Edit和Help省略……
|
释放阶段
|
destroy();
|
destroy();
|
说了这么半天理论,来看程序结构,其实跟一般的程序也没什么区别:
图中可以看到IDE可能是为了清晰,具体为了什么我也不是很清楚,将程序和其他的部分分开,docroot/WEB-INF/src是在上面的,而docroot其他部分在下面。简要分析一下,docroot是默认的根路径,类似于普通ssh程序的WebRoot文件夹,WEB-INF文件夹不用说了,是整个web应用程序的核心文件夹,其中有业务逻辑的源代码src文件夹,不可避免的web.xml文件,整个web应用程序配置描述文件。剩下的这些带有严重liferay色彩的配置文件,从上到下进行解释,liferay-display.xml文件决定这个应用程序被加入到那个分类中去,所谓分类就是在我们向portal中添加portlet时所选择的分类。如下图:
这个portal-display.xml文件就决定这个我们构建的这个portlet在上图中的哪个分类中出现。liferay-plugin-package.properties这个文件定义了一些信息,供配置文件使用。liferay-portlet.xml中定义了这个portlet使用的icon图片文件,css文件,js文件信息以及用户权限配置,规定了用户对于这个portlet的访问权限。最后要介绍我们这些配置文件中最重要的portlet.xml文件,这个配置文件可以说是整个portlet配置的核心。
来看个portlet.xml文件的例子:
<?xml version="1.0"?>
<portlet-app
version="2.0"
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
>
<portlet>
<portlet-name>Demo</portlet-name>
<display-name>Demo</display-name>
<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
<init-param>
<name>view-jsp</name>
<value>/view.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
<title>Demo</title>
<short-title>Demo</short-title>
<keywords>Demo</keywords>
</portlet-info>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>
上面是一个我写的简单的portlet的portlet.xml配置文件全文。看着很简单,是因为我的这个portlet很简单。其实高级的portlet编程中,这个portlet中能够配置的信息有很多,比如说像程序中某个控件的默认值,配置验证程序代码所在位置,i18n资源文件位置信息等等。我这篇文档是portal的入门篇,这些内容显然不在我们的讨论范围之内。就上面的这个比较简单的portlet.xml文件为例,我们分析一个这个最简单的portlet.xml中应该配置什么信息?首先是portlet-name和display-name毫无疑问,字面意思,不解释。portlet-class就是我们要用哪个类来处理这个portlet中的业务逻辑,要求全路径(所谓全路径就是要带上包名)。接下来是初始化参数,这个貌似servlet中也有吧,这里不废话了。supports,支持嘛,你懂的。再往下就是portlet的信息嘛。最后是权限配置信息。这个可以说是最为简单的一个portlet的portlet.xml配置信息。
写到这里我突然有种想写一篇中高级的liferay portal编程的文章,也算是预告一下,大家期待一下吧……
下面要讲的是一个很重要的问题,那就是URL的问题,各位看官中不乏Web程序的高手,Java 语言利用其对于String字符串的强大的操纵能力,来个专业点的词汇,就是manipulate the URL string。而这点在portal程序中就会有问题。为什么呢?因为一个portal页面中会集成零个到多个portlet,而每个portlet都是一个单独的jsp页面,这样,如果我只想要其中某个特定的portlet改变其要显示的页面,要怎么实现呢?有人可能提出不是在portlet.xml中配置的了这个portlet的名字嘛?!使用这个啊……我想说这是个办法,但是portal的接口中不是这么干的,它的办法是自己定义一个PortletURL类,利用Response接口下两个子接口,其总体结构图如下:
在处理渲染的函数中利用RenderResponse接口中的createRenderURL这个方法返回一个PorletURL这个类型的返回值,这个就是portal这个系统自动生成的能够定位到这个特定的portlet中特定页面的URL值,伴随整个URL还可以进行传值和取值的操作,并且这个URL还有一个编码过程,这些我在Liferay Portal中高级编程那篇文章中我会介绍,这里就铺垫一下这个portal的特殊的URL机制,钓一下大家胃口。
相关推荐
### Liferay Portal 开发指南知识点概述 #### 一、简介 **Liferay Portal** 是一款功能强大的企业级门户平台,支持多种应用集成和技术扩展。它不仅提供了丰富的特性满足企业日常需求,同时也支持高度定制化开发。...
### Liferay Portal 性能分析 #### 执行摘要 Liferay Portal 被 Gartner 命名为领导者,在 Gartner 魔力象限 (MQ) 中因其功能完整性和投资回报率而受到认可,它是领先的开源企业门户解决方案。Liferay Portal 企业...
#### 二、Liferay Portal 5.2 概览 Liferay Portal 5.2是一个功能强大的平台,它提供了丰富的特性用于构建企业级门户应用。这些特性包括但不限于: - **自定义门户页面**:用户可以轻松地定制门户页面布局。 - **多...
Liferay Portal 6.1 源码导入到 Eclipse 需要下载 Liferay Portal 源码、Liferay IDE、JDK 和 Ant,安装并配置相关环境变量。然后,新建文件夹 D:\liferay,解压缩 Liferay IDE 和 Plugin SDK,配置 Eclipse 和 ...
**Liferay Portal 详解** Liferay Portal 是一个开源的企业级门户平台,用于构建、管理和部署Web应用程序和服务。它提供了一套全面的工具,使企业能够整合各种内容、应用和社交功能,以创建个性化的用户体验。...
### Liferay Portal数据库读写说明 #### 一、概述 Liferay Portal是一款广泛使用的开源企业级门户系统,它集成了多种功能模块,如文档管理、博客、论坛等,为企业提供了全面的信息管理和协作平台。本文将根据给定...
总结而言,Liferay Portal 模板开发涉及到前端设计、后台配置等多个方面,开发者需要具备一定的 HTML、CSS、JavaScript 基础知识,并熟悉 Liferay 的工作原理和配置方法。通过上述步骤,可以实现对 Liferay Portal ...
### Liferay Portal 安装与配置详解 #### 一、简介 Liferay Portal是一款功能强大的开源企业级门户平台,能够为企业提供一站式的解决方案,包括内容管理、社区建设、应用程序集成等服务。本指南旨在帮助开发者顺利...
总结来说,Liferay Portal的权限管理是一个多层次、灵活的系统,它通过企业管理、组织管理、地区管理、用户组管理和Portlet管理等多个维度,确保了企业资源的安全性和访问控制的精确性。通过对角色的定义和分配,...
总结,Liferay Portal的开发涉及众多方面,从portlet开发到工作流设计,再到安全权限管理,都需要开发者具备扎实的Java基础和良好的问题解决能力。通过学习和实践,开发者可以充分利用Liferay的特性,为企业构建出...
其中,“社区”(Community)是Liferay Portal 的核心概念之一,用于组织用户并管理与这些用户相关的权限和内容。 **社区(Community)** 是指由具有共同兴趣或爱好的用户组成的一个集合。在 Liferay 中,用户可以...
它包含了Liferay Portal和集成的Tomcat服务器。 - **Liferay Portal Source**: 可选资源,下载地址为[liferay-portal-src-6.2-ce-ga6]...
以下是对这8本Liferay经典书籍的知识点总结,旨在帮助读者深入理解并掌握Liferay的核心技术和应用场景。 1. 《Liferay Portal 7.x Development》 这本书详细介绍了Liferay Portal 7.x的开发过程,涵盖了portlet开发...
#### 二、Liferay的主要特点 ##### 用户友好特性 - **易于使用的AJAX UI**:通过AJAX技术实现了更加流畅的用户体验,减少了页面加载时间。 - **一键式外观更改**:允许用户轻松地更改门户的主题和布局,无需复杂的...
总结,Liferay Portal的二次开发涉及众多方面,从portlet开发到服务API的利用,再到主题和布局的定制,每个环节都需要开发者具备扎实的Java基础和对Liferay Portal特性的深入了解。通过不断实践和学习,开发者能够...
根据提供的信息,我们可以总结出以下关于“Liferay Portal 4.0 QuickStart Guide”的关键知识点: ### Liferay Portal 4.0 QuickStart Guide #### 一、简介 本快速入门指南旨在帮助那些新接触 Liferay Portal 或...
该资料是本人学习liferay的总结报告, 使用的是5.1.1和5.2.2版本,总结了网上和书中的一些有用信息,并且加入个人对于该技术的一些理解. (绝对原创教程,但主要面向开发者,而不是管理员哈.) 欢迎各位一起交流liferay-...