Java Portlet 规范概述
首先,解释几个基本的术语。
Portal 是一种 web 应用,通常具有个性化、单点登录、来自不同源的内容聚合(aggregation)并提供信息系统表现层等特点。所谓聚合,是指将不同来源的内容整合到一个 web 页面的操作。一个 Portal 应用可通过复杂的个性化配置为用户提供定制的内容,而 Portal 页面也可含有不同的 portlet 为不同的用户生成内容。
互联网流行之初,用户与 web 的交互通常是一个 URL 访问一个单一的静态 web 站点。随着 applet、JSP 等技术的使用,出现了更多动态 web 内容的展示。但对 web 开发人员而言,缺乏跨浏览器的应用实现标准依然是困扰他们的大难题。 Portal 的出现解决了动态内容的聚合问题,并向用户提供了一个面向协作的聚合平台。
IBM 将 Portal 门户网站视为下一代的基于 Web 的桌面系统,它通过 Web 把电子商务应用程序传送到各类客户机设备。门户网站为站点用户提供了到多种类型的信息和应用程序的单点访问。不管这些信息驻留在哪里,也不管它们是什么格式的,门户网站都以一种令人满意的、适应用户的方式聚集所有的信息。一个完整的门户网站解决方案应当使用户方便地访问他们完成任务所需的每一样工作。
IBM WebSphere Portal 的可扩展的框架允许最终用户与企业应用程序、人员、内容和流程交互。他们可以个性化和组织他们自己的门户网站视图、管理他们自己的概要文件并发布和共享文档。 WebSphere Portal 提供了附加的服务,如单点登录(single sign-on)、安全性、内容管理、搜索和分类学(taxonomy)、对移动设备的支持以及站点分析。
Portlet 是基于 Java 技术的 web 组件,由 portlet 容器负责管理,portlet 的生命周期也由 porlet 容器管理。 Portal 使用 portlet 作为可插拔的用户接口组件,从而为信息系统提供表现层。 Web 客户端通过请求 / 响应机制和 portlet 交互。因用户对 portlet 的配置不同,portlet 生成的内容也各有所异。
IBM WebSphere Portal 是一个可以让用户插入新功能或者扩展(portlet)的框架。 Portlet 是 WebSphere Portal 中的应用程序。在一个起到用户通往信息和任务的窗口作用的门户网站中,开发 portlet 是最重要的任务。
Portlet 容器负责运行 portlet,并为 portlet 提供必要的运行环境。 Portlet 容器包含 portlet 并管理其生命周期,同时持久存储 portlet 的参数。 Portlet 容器接收并处理来自 portal 的请求,运行 portlet,最后生成动态的内容。需要注意的是,portlet 容器并不聚合多个 portlet 生成的内容,而是由 portal 来完成聚合的工作。
按照 Servlet 规范 v2.3 的定义,servlet 也是一种基于 Java 技术的 web 组件,由容器管理,可生成动态的内容。那么,servlet 和 portlet 有什么区别呢?表 3-1 列出了 servlet 和 portlet 的异同点。
相 同 点 | 不 同 点 |
都是基于 Java 技术的 web 组件 | Portlet 只生成标记片段(markup fragment),由 portal 来聚合所有的 portlet 标记片段得到完整的 portal 页面 |
都由专门的容器管理 | Portlet 并不直接和 URL 绑定 |
都能动态生成内容 | Web 客户端需要通过 portal 系统和 porlet 交互 |
两者的生命周期都有专门的容器维护 | Portlet 具有更精细的请求处理、动作请求和显示请求 |
都通过请求 / 响应模式与 web 客户端交互 | Portlet 有预定义的 portlet 模式(portlet mode)和窗口状态(window state),指明了 portlet 的操作功能和 portal 页面实际状态的数量 |
Portlet 可多处存在于同一 portal 页面中 |
表 3-2 列出了 portlet 和 servlet 各自独有的特点。
表 3-2. Portlet 和 Servlet 独有的特点
Portlet | Servlet |
Portlet 能够访问和存储持久化的配置信息和定制数据 | Servlet 能设置响应的字符集编码 |
Portlet 能够访问用户 profile 信息 | Servlet 能在响应中设置 HTTP 报头 |
Portlet 具有 URL override 功能,从而能在其内容中创建超链接。这样,portal 服务器无需知道页面片段中的链接和动作的创建。 | Servlet 能和 URL 对应 |
Portlet 能将瞬时数据以两种域方式存储在 portlet session 中:应用级域和 portlet 私有域 |
由于以上的不同,portlet 和 servlet 是两种不同的组件。但 portlet 在配置、类装载、web 应用、web 应用生命周期管理、session 管理和请求分发等方面和 servlet 有着相似之处。 Portlet、servlet 和 JSP 可捆绑在一个扩展的 web 应用中,称为 portlet 应用。此时,portlet、servlet 和 JSP 共享类装载器、应用上下文(context)和 session 。 Portlet 可通过请求分发器来调用 servlet 和 JSP,就如同 servlet 可调用其他 servlet 和 JSP 一样,这样,portlet 和 servlet 可实现无缝的集成。
Portlet 容器是 servlet 容器的扩展,因此,不论 portlet 容器如何实现,其运行环境都假定支持 servlet 规范 2.3 。
如 图 3-1 所示,portlet 生成片段(fragment),而 portal 通常要添加上标题、控制按钮和其他装饰性元素,而得到 portlet 窗口。最后 portal 将多个 portlet 窗口聚合而成一个完整的文档,即 portal 页面。
Portlet 在 portlet 容器中运行,容器接收 porlet 生成的内容,并传递给 portal 。由 portal 服务器组织成 portal 页面,并送交客户端设备(如浏览器)显示。 Portal 页面的生成过程如 图 3-2 所示。
- 阅读本书的 前言 和 目录。
- 阅读本书的 第 3 章:Java Portlet 规范概述。
- 阅读本书的 第 4 章:IBM WebSphere Portal 开发简介。
- 阅读本书的 第 7 章:行为模式之责任链模式(Responsibility Chain)。
- 更多推荐书籍,请访问 developerWorks 图书频道。
王立,2005 年毕业于西安交通大学计算机科学与技术系,获博士学位。先后参与过 IBM Lotus 和 Rational 产品线的相关开发工作。目前服务于 IBM 中国系统与技术中心,从事软件开发过程与企业级协作方面的研发工作。
郑长庆,2005 年毕业于浙江大学计算机应用专业,获硕士学位。从事 iSeries上IBM Workplace, WebSphere Portal 等相关产品工作。目前主要从事 IBM iSeries Web Administrator 开发。对 J2EE, Web Services, SOA 及 System i 等相关技术感兴趣。