随笔-86  评论-767  文章-3  trackbacks-3

第三节  什么是Portlet

PortletPortal中最重要的组件,负责在Portal中呈现信息内容,有相应的生命周期。通过自定义Portlet,用户很容易定义个性化的Portal页面。PortletPortlet容器负责管理、处理请求并返回动态页面,可以作为Portal的可即插即用的界面组件。

1.3.1  Portlet

一个Portlet是以Java技术为技术的Web组件,由Portlet容器所管理,专门处理客户的信息请求以及产生各种动态的信息内容。Portlet 为可插式的客户界面组件,提供呈现层成为一个信息系统。

这些由Portlet产生的内容也被称为片段,而片段是具有一些规则的标记( HTMLXHTMLWML ),而且可以和其他的片段组合而成一个复杂的文件。一个或多个 Portlet 的内容聚合而成为一个 Portal 网页。而 Portlet 的生命周期是被 Portlet 容器所管理控制的。

客户端和Portlet的互动是由Portal通过典型的请求/响应方式实现,正常来说,客户会和Portlet所产生的内容互动,举例来说,根据下一步的连接或者是确认送出的表单,结果 Portal将会接收到Portlet的动作,将这个处理状况转向到目标Portlet。这些Portlet 内容的产生可能会因为不同的使用者而有不同的变化,完全是根据客户对于这个Portlet的设置。

1.3.2  PortletServlet的关系

Portlet被定义成为一个新的组件,具有新的明确的界面与行为。为了尽可能与现有的 Servlet 结合达到重复使用的目的,Portlet 的规范利用了 Servlet 的规范,许多观念都很相似的,结合 PortletServlet Jsp 在同一个网站系统中,我们称为Portlet 应用 。在同一个 Portlet 应用 中,他们将分享同一个类加载器(ClassLoader),上下文(Context) Session

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 请求

1.3.3  Portlet的生命周期

一个Portlet有着良好的生命周期管理定义了怎样装载实例化和初始化怎样响应来自客户端的请求及怎样送出服务。这个Portlet生命周期由Portlet接口的initprocessActionrenderdestroy方法来表达。

载入和实例化:Portlet容器负责载入和实例化Portlet。当Portlet容器运行Portlet应用或者延迟到Portlet需要服务使用者的请求时,Portlet就会被载入并实例化。载入Portlet类后,Portlet类随即被实例化。

初始化:Portlet类实例化后,Portlet容器还需要初始化Portlet。以调用Portlet去响应客户端的请求。Portlet容器呼叫Portlet接口中的init方法初始化Portlet。扩展自PortletConfig的类可以取出定义在部署描述文件中的初始化参数,以及Resource Bundle

初始化异常: Portlet初始化期间,Portlet可能会丟出 UnavailableException PortletException 异常。此时,Portlet容器不能把 Portlet置入已启动的服务,并且 Portlet容器必需释放这个 Portlet destory方法不能被呼叫,因为初始化被认为执行失败。发生 失败后,Portlet容器会尝试着重新实例化及初始化 Portlet。这个异常处理的规则是:由一个UnavailableException 指定一个不能执行的最小时间,当此异常发生时,Portlet容器必需等到指定时间过去后才产生并且初始化一个新的 Portlet

在初始化过程中所丟出的 Runtime Exception异常,被当作 PortletException 来处理。

第四节  Liferay Portal工作原理

Portal系统根据需要由一个或者多个Portal页面组成,每个Portal页面包含零个或者多个的Portlet。每个Portlet呈现自己的信息内容,以此实现内容聚合。通过定义每个Portlet的可用权限,实现个性化的桌面信息定制。

1.4.1  Portlet 样式以及窗口状态

图1.4.1-1.jpg图1.4.1-2.jpg

JCP组织提出的JSR168规范定义了Portlet的实现标准。每个Portlet对外表现为一个小窗口,有自己的默认样式和窗口状态。如上图,Portlet有自己的标题,浏览状态下支持编辑、关闭、上移、下移、最大化、最小化功能,编辑状态下支持返回和关闭功能。从各种数据来源提取的信息以Portlet内容的形式呈现在Portal中。

Portlet样式指出 Portlet正处于什么模式,Portlet通常会根据所处的模式而执行不同的工作并产生不同的内容。

Portlet模式让 Portlet决定它该显示什么内容和执行什么动作。调用一个 Portlet的时候,Portlet 容器会提供一个 Portlet模式给那个 Portlet。当在处理一个请求动作时,Portlet 的模式是可以用程序来改变的。

JSR168规范定义了三个Portlet模式: 浏览、编辑和帮助,Liferay Portal支持其中的全部三个模式。同时Portal是可以根据使用者的角色,来决定是要提供(显示)哪几个 Portlet 模式给使用者操作。

例如,匿名使用者可以操作浏览和帮助等 Portlet 模式的内容, 而只有授权过的使用者可以操作编辑这个 Portlet 模式所提供的内容或动作。

在浏览这个Portlet模式里,所被期望要提供的功能是产生标记语言来表现此时 Portlet的状态。 举例来说, Portlet的 浏览 模式可以包含一个或多个画面让使用者可以浏览与互动, 或是一些不需要与使用者互动的静态内容。

   在编辑这个Portlet模式里, Portlet 需要提供内容和逻辑来让使用者定制 Portlet 的行为。典型的说,编辑模式的 Portlet 会设定或更新 Portlet 的参数设定值。

在帮助这个模式里,Portlet应该提供有关这个 Portlet的帮助信息。这个帮助信息可以是有关这个 Portlet的简单且条理清楚的视窗说明或是详细的说明整个来龙去脉。所有的Portlet并不需要都提供帮助这个模式。

一个 Portlet可以根据窗口状态来决定在一个页面里该占多少空间。当调用一个 Portlet时, Portlet容器 需要告诉该 Portlet目前的窗口状态。 此时 Portlet可以根据窗口状态来决定它该对多少信息作处理。在处理请求的过程中, Portlet可以通过程序的方式来改变窗口状态。

posted on 2005-10-20 15:13 eamoi 阅读(5429) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: