第三节 什么是Portlet
Portlet是Portal中最重要的组件,负责在Portal中呈现信息内容,有相应的生命周期。通过自定义Portlet,用户很容易定义个性化的Portal页面。Portlet由Portlet容器负责管理、处理请求并返回动态页面,可以作为Portal的可即插即用的界面组件。
1.3.1 Portlet
一个Portlet是以Java技术为技术的Web组件,由Portlet容器所管理,专门处理客户的信息请求以及产生各种动态的信息内容。Portlet 为可插式的客户界面组件,提供呈现层成为一个信息系统。
这些由Portlet产生的内容也被称为片段,而片段是具有一些规则的标记( HTML、XHTML、WML ),而且可以和其他的片段组合而成一个复杂的文件。一个或多个 Portlet 的内容聚合而成为一个 Portal 网页。而 Portlet 的生命周期是被 Portlet 容器所管理控制的。
客户端和Portlet的互动是由Portal通过典型的请求/响应方式实现,正常来说,客户会和Portlet所产生的内容互动,举例来说,根据下一步的连接或者是确认送出的表单,结果 Portal将会接收到Portlet的动作,将这个处理状况转向到目标Portlet。这些Portlet 内容的产生可能会因为不同的使用者而有不同的变化,完全是根据客户对于这个Portlet的设置。
1.3.2 Portlet与Servlet的关系
Portlet被定义成为一个新的组件,具有新的明确的界面与行为。为了尽可能与现有的 Servlet 结合达到重复使用的目的,Portlet 的规范利用了 Servlet 的规范,许多观念都很相似的,结合 Portlet、Servlet 及 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接口的init,processAction,render和destroy方法来表达。
载入和实例化: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 样式以及窗口状态
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 阅读(5443)
评论(0) 编辑 收藏 所属分类:
Java