探索 WebSphere Application Server V6.1 Portlet 容器: 第 1 部分:Portlet 容器介绍

本系列文章对 IBM WebSphere Application Server V6.1 中提供的 JSR 168 Portlet 容器进行了分析,并说明了其与 WebSphere Portal 中使用方法的区别。

本文是系列文章中的第 1 部分,对 Portlet 容器进行了介绍。具体来说,您将了解如何安装 Portlet、如何访问它以及如何使用 URLAddressability。可以下载示例 Portlet,并通过使用它来了解 WebSphere Application Server V6.1 Portlet 容器的功能。

本文主要针对熟悉 Java Portlet API 的 Java™ Portlet 程序员。有关指向可以帮助您获得这些技能的信息的链接,请参见参考资料

Stephan Hesmer (stephan.hesmer@de.ibm.com), 性能首席开发师, EMC

Stephan HesmerStephan Hesmer 目前担任性能首席开发师。他担任的前一个职位是 WebSphere Portal 和 WebSphere Application Server 的 Portlet 运行时架构师。他负责将 JSR 168 Portlet 容器集成到 WebSphere Application Server 中。Stephan 曾从事 JSR 168 Java Portlet 规范方面的研究,并设计和实现了 JSR 168 参考实现的最初版本 Pluto。Stephan 于 2000 年获得了德国斯图加特联合教育大学 (University of Cooperative Education Stuttgart) 的信息技术专业的文凭,毕业后,他加入了 IBM B?blingen Development Laboratory,在 WebSphere Portal 团队工作。



Birga Rick (brick@de.ibm.com), Portlet Runtime 技术负责人, EMC

作者照片Birga Rick 在德国 IBM Boeblingen Lab 担任 WebSphere Application Server Portlet Runtime 技术负责人。2003 年,她加入了负责实现 JSR 168 参考实现 Pluto 的团队。她曾在 WebSphere Portal 开发团队中从事 JSR 168 方面的工作,随后负责将 Portlet Runtime 集成到 WebSphere Portal 和 WebSphere Application Server 中。



2006 年 8 月 27 日

引言

JSR 168 Portlet API 是 Portlet 开发中被广泛接受和采用的一项标准。以 Pluto 为代表的开放源代码项目和以 WebSphere Portal 为代表的企业产品中早就开始提供支持 JSR 168 Portlet API 的 Portlet 容器了。JSR 168 Portlet 容器是 WebSphere Application Server V6.1 不可或缺的部分;它是 WebSphere Portal 和 WebSphere Application Server(以下称为 Application Server)共有的一个组件。WebSphere Portal 对 Portlet 容器加以利用,并扩展了其功能。通过在应用服务器中提供 Portlet 容器,IBM 鼓励在 Web 应用程序的服务器用户界面(User Interface,UI)上使用 Portlet 编程模型。程序员可以使用任何 Application Server 安装方便地开发 Portlet,并可以通过 WebSphere Portal 重用这些 Portlet。

本文将向您介绍 Application Server 中的 JSR 168 Portlet 容器。首先,我们将概略介绍该容器的功能,然后将说明如何安装和访问您的第一个 Portlet。最后,将向您介绍 Application Server 中的 Portlet 容器的重要功能之一,URL Addressability。另外,您还可以了解这些功能与 WebSphere Portal 中的类似功能相比较的情况。

本系列文章针对多方面的受众,包括希望使用 Application Server 中的 Portlet 容器作为开发平台但尚不知(或不需要知道)如何使用 WebSphere Portal 进行开发的开发人员和架构师。本系列文章也面向已经具有 WebSphere Portal 技能且同时还希望了解如何通过将容器放入到应用服务器中来简化 Portlet 开发的开发人员和架构师。


何时使用 Application Server Portlet 容器

有了 Application Server 中的新 Portlet 容器,您可以从两个 Portlet 容器中选择使用:

  • Application Server 中的 Portlet 容器提供 JSR 168 Portlet API 等基本功能。
  • WebSphere Portal 中的 Portlet 容器使用附加功能(如属性代理事件、Portlet 服务事件和其他功能)扩展这些功能。

因此,如果在 Application Server 上开发 Portlet ,它将能够在 WebSphere Portal 上运行。反过来不一定成立;如果创建了使用 Application Server Portlet 容器不支持的 WebSphere Portal 功能的 Portlet,则将不能在 Application Server 上运行。不过,可以采用特殊的方式编写代码,以允许无缝地进行功能降级。

由于 Portlet 是面向用户的应用程序,如果您的应用程序要求与 Application Server 提供的功能相符,则最好使用此平台中的 Portlet 容器。对于 Application Server,如果您仅需要在页面上显示一个面向用户的组件(而无需进行富功能聚合),则大多数情况下应如此处理。另一方面,如果您需要使用扩展编程模型进行富功能聚合,则请使用 WebSphere Portal 中的 Portlet 容器。


关于示例 Portlet

您可以下载 World Clock 示例的示例 Portlet,以在阅读本系列文章的过程中参考此示例。有关示例的详细说明,请参见文章 Converting the WorldClock portlet from the IBM Portlet API to the JSR 168 portlet API(请参见参考资料)。


Portlet 容器功能小结

此部分简要总结了 JSR 168 Portlet 容器提供的功能集,主要分为三大主题:可寻址性、可管理性和可扩展性(为了进一步提高可访问性)。表 1 中包含了这些描述,并说明了本系列文章的哪一部分将包含相应的内容。

表 1:Portlet 容器的主要功能
主要主题/功能描述对应文章
可寻址性
URLAddressabilityURLAddressability 允许在浏览器页面中通过简单的 URL 请求直接访问和呈现 Portlet,而无需使用任何装饰内容。可以像调用 Servlet 一样,通过使用上下文根和名称调用 Portlet。示例:http://localhost:9080/portlets/StdWorldClock第 1 部分
聚合聚合是通过一个 JSP 标记库进行支持的。此标记库提供了基本功能,可方便地用来在页面上聚合多个 Portlet。第 2 部分
可管理性
Portlet 安装/wsadmin可以使用 Application Server 中现有机制方便地安装 Portlet。可以使用 wsadmin 或管理控制台配置 Portlet 容器。第 1 部分
Portlet MBean API通过 Portlet MBean API,应用程序可以访问所有 Portlet 和 Portlet 应用程序。它是用于管理应用程序或 Portlet 的重要组成部分。第 3 部分
扩展部署描述符JSR 168 Java Portlet 规范之外的其他功能在扩展部署描述符中存储和配置。例如,可以访问此配置来打开或关闭 URLAddressability 功能。第 3 部分
缓存Application Server 动态缓存基础设施已得到增强,能够支持 Portlet 片段缓存。此支持是 Servlet 片段缓存的扩展,具有一些额外的选项。第 3 部分
性能指标可以允许 Portlet 容器发出有关当前正在运行的 Portlet 的性能度量,可在 Performance Viewer 中进行查看。这包括性能度量工具(Performance Measurement Instrumentation,PMI)和请求度量 (Request Metrics)。第 3 部分
可扩展性
PortletDocumentFilters为了支持 HTML 之外的标记或修饰 Portlet 片段,可以使用 PortletDocumentFilters 对 Portlet 容器进行扩展;PortletDocumentFilters 是一个基于 Servlet 筛选器的 API,允许方便地进行开发和部署。第 2 部分

现在,您已经熟悉了各个 Portlet 容器功能,接下来让我们了解如何安装 Portlet 应用程序。


安装 Portlet

JSR 168 Java Portlet 规范将 Portlet 应用程序部署包定义为 Web 应用程序的扩展。它被打包为 Web 存档(Web ARchive,WAR)文件;因此,从用户的角度而言,安装 Portlet 的过程与安装 Servlet 相同。

可以通过使用管理控制台或称为 wsadmin 的脚本编程接口安装 Portlet。下面以 World Clock Portlet 作为示例说明这两种方法。

使用 WebSphere 管理控制台

  1. 打开 WebSphere 管理控制台。例如,如果服务器是本地服务器,则在浏览器中打开以下网址:
    http://localhost:9060/ibm/console
  2. 登录并访问 Install New Application 部分。
  3. 输入到 World Clock Portlet 的路径名称,如图 1 中所示。
    图 1. 管理控制台中的 Install New Application 部分
    管理控制台中的 Install New Application 部分
  4. 在每页上单击 Next,一直到包含 Install 按钮的页为止。
  5. 单击 Install 按钮。部署应该像处理 Servlet 时一样正常进行,最后会显示一条成功消息。
  6. 保存更改。
  7. 在浏览器中打开以下网址,以启动应用程序:
    http://localhost:9080/worldclock/StdWorldClock

    将看到图 2 中所示的 Portlet。

图 2. 视图模式的 World Clock Portlet
视图模式的 World Clock Portlet

部署 Portlet 时的注意事项

部署 Portlet 应用程序 WAR 文件时,需要考虑以下情况。

  • Portlet 和 Servlet 一定不能使用相同的名称。清单 1 显示了如何避免这样做的示例。
    清单 1. 具有相同名称的 Portlet 和 Servlet
    <servlet>
    	<servlet-name>BookmarkPortlet</servlet-name>
    	...
    </servlet>
    <portlet>
    	<portlet-name>BookmarkPortlet</portlet-name>
    	...
    </portlet>
  • Servlet 映射的 url 模式不能与任何 /<portlet-name>/* 或 /portlet/<portlet-name>/* 相同。清单 2 显示了如何避免这样做的示例。
    清单 2. 具有相同映射的 Portlet 和 Servlet
    <servlet-mapping>
    	<servlet-name>BookmarkPortlet</servlet-name>
    	<url-pattern>/BookmarkPortlet/*</url-pattern>
    </servlet-mapping>
    
    <portlet>
    	<portlet-name>BookmarkPortlet</portlet-name>
    	...
    </portlet>

使用脚本编程接口 (wsadmin)

安装 Portlet 的另一种方法是使用脚本编程接口 wsadmin。

  1. 首先,启动 wsadmin,以使其连接到服务器。您将看到清单 3 中显示的消息:
    清单 3. 连接到服务器后看到的消息
    C:\WebSphere\bin>wsadmin
    WASX7209I: Connected to process "server1" on node 
    HESMERT40Node02 using SOAP connector;  The type of process
    is: UnManagedProcess
  2. 在命令提示符中,输入安装 Portlet 的命令,如清单 4 中所示。
    重要:请始终使用正斜杠,即使在 Windows 系统上也应如此。
    清单 4. 安装 Portlet
    wsadmin> $AdminApp installInteractive
    D:/portlets/StdWorldClock.war {-contextroot /worldclock}
    ...
    ADMA5013I: Application StdWorldClock.war10af6ae88f7 
    installed successfully.
  3. 保存配置,如清单 5 中所示。
    清单 5. 保存配置
    wsadmin> $AdminConfig save

要查看 Portlet,请使用下面的 URL 在浏览器中打开应用程序:
http://localhost:9080/worldclock/StdWorldClock

您将看到图 2 中所示的 Portlet。

与 WebSphere Portal 中的 Portlet 容器的比较

对于 WebSphere Portal,可以采用类似的方式安装 Portlet,即使用 WebSphere Portal 管理界面或名为 XMLAccess 的脚本编程接口。

其管理界面分为多个部分,以反映门户的各个区域。可以使用 Portlet 区域来管理 Portlet 的所有方面;其中包括可用于安装 Portlet 的 Manage WebModules Portlet。为了找到此功能,请在 WebSphere Portal 中打开 Administration => Portlets => Manage WebModules。与 Application Server 不同,门户管理界面仅接受 WAR 文件,而并不接受 EAR 文件。

还可以使用脚本编程接口 XMLAccess 来在 WebSphere Portal 中安装 Portlet。有关详细信息,请参见参考资料中列出的 WebSphere Portal 信息中心。可以使用 XMLAccess 安装预部署的 EAR 文件和 WAR 文件。

表 2:安装 Portlet 时的区别
主题WebSphere Application ServerWebSphere Portal
管理控制台基于 Servlet 的 Web 接口。用于安装 Portlet EAR 和 WAR 文件。基于 Portlet 的 Web 接口。仅用于安装 Portlet WAR 文件。
脚本编程接口支持使用命令行或采用 JACL 和 Python 编写的脚本直接进行交互。用于安装 EAR 和 WAR 文件。基于 XML 的脚本编程环境。用于安装 WAR 文件或预部署的 EAR 文件。WebSphere Portal 的另一个脚本编程接口称为 wpscript,与 wsadmin 非常类似,但是不支持 Portlet 的安装。

安装了 Portlet 后,可以使用浏览器访问它,与在安装 Portlet 中使用很简单的 URL 看到的简单示例一样。接下来的部分提供了有关寻址 Portlet 的更多信息,包括编辑模式等特殊 Portlet 功能。


访问和寻址 Portlet

JSR 168 Java Portlet 规范定义了一个与 Servlet 规范非常类似的具有对应部署描述符的 Java API。Servlet 规范定义了如何使用 url 映射和上下文根从浏览器访问 Servlet,以便能够查看 Servlet。

而另一方面,Portlet 设计为以聚合方式运行,而不是使用整个响应或视图,因此将始终和其他 Portlet 共享页面。这是为什么 JSR 168 Java Portlet 规范不包含任何对 Portlet 的直接访问(如使用 URL)的原因之一;其中采用的替代方式是将访问权留给门户应用程序及其聚合框架。

Application Server 是一个开发人员平台,可提供对资源方便而直接的访问,从而支持进行快速开发。引入了一项新功能,可从浏览器内直接寻址 Portlet;此功能称为 URLAddressability。

URLAddressability 增强了 JSR 168 Java Portlet 规范定义的 Portlet 概念。为 Portlet 添加了 url 映射的概念。

要详细了解 URLAddressability 的工作方式,请参考上面的示例。可以在浏览器地址栏中输入以下地址来访问 World Clock Portlet:

http://localhost:9080/worldclock/StdWorldClock

这是一个标准 URL,具有主机名、端口、上下文根和路径。由于 Portlet 打包为 WAR 文件,因此我们像处理任何其他 Servlet WAR 文件一样使用上下文根对其进行部署(在本例中为 /worldclock)。URL 的路径基于 Portlet 部署描述符 portlet.xml 文件中定义的 Portlet 名称。在本例中,Portlet 名称为 StdWorldClock。清单 6 是一个对应的 portlet.xml 代码片段:

清单 6. portlet.xml 代码片段
<portlet>
	<portlet-name>StdWorldClock</portlet-name>
	...
</portlet>

我们已经通过一个具体的示例了解到,可以通过查看通用模式来访问系统中安装的每个 Portlet。

下面的 URL 模式说明了以视图模式呈现 Portlet 的最基本 URLAddressability 定义。

http://<host>:<port>/<context root>/<portlet name>

与 WebSphere Portal 的比较

目前,在 WebSphere Portal 和 Application Server 之间寻址 Portlet 存在很大差异。

在 WebSphere Portal 中,您无法直接通过 URL 访问 Portlet;必须首先将其放置到页面上。部署后,必须使用页面自定义器来将 Portlet 放置到现有页面或新创建的页面上。然后,可以通过 Portlet State API 等编程方式直接访问 Portlet。

在 Application Server 中,寻址 Portlet 更为简单,使用 URLAddressability 即可。安装后,立即就可以访问 Portlet。不过,另一方面,其提供的聚合功能相对少一些。在 WebSphere Portal 中,可以向 Portlet 应用很多聚合功能,包括动态更改页面布局、应用细粒度访问控制、基于规则的聚合等等。

表 3:寻址 Portlet 的差异
主题WebSphere Application ServerWebSphere Portal
寻址 Portlet可通过使用 URLAddressability 直接访问每个 Portlet。只有通过使用页面自定义器将 Portlet 放到页面上,才能间接地对其进行访问。因此在其上提供了很多聚合功能。

现在,您已经了解了寻址 Portlet 的基本知识,接下来让我们了解一下 URLAddressability 的详细信息。您将了解如何在不同的 Portlet 模式或窗口状态下调用 Portlet,还将了解在此场景中 Portlet 首选项的存储位置。


探索 URLAddressability

URLAddressability 可以被视为 Portlet 功能到现有 HTTP 和 Servlet 功能的映射。窗口标识符、操作标志、Portlet 模式、窗口状态和呈现参数都是通过 URL 模式定义的。Portlet 首选项映射为存储在浏览器中的 Cookie。在这一部分,您将同时了解这两方面的详细信息。

首先,让我们了解一下 URLAddressability 的完整功能集。下面是通用 URL 模式:

http://<host>:<port>/<context>/<portlet-name> 
   [/portletwindow[/ver [/action] [/mode] [/state] [rparam]]]

我们假定您已熟悉基本寻址知识(模式的开始部分)。

  • 可以提供一个 portletwindow 标识符,此标识符在一个页面上显示多个 Portlet 时将很有用。portletwindow 可以包含任意字符串。
  • version 始终为 1 (ver=1.0),因为当前支持的唯一版本是 1.0。
  • action 标志定义是否应触发 Portlet 操作。它在 URL 中以不带其他参数的形式出现,例如: http://localhost:9080/somecontext/MyPortletName/MyWindowIdentifier/ver=1.0/action
  • modestate 定义 Portlet 模式和所寻址的 Portlet 的窗口状态。这两个参数的格式为 mode=<mode>state=<state>
  • 呈现参数 (rparam) 在 URL 中表示为 rparam=<name>=<value>。在代码中可以根据需要使用任意多的 rparams (/rparam=hello=world/rparam=hello2=world2)。
  • 如上所示,参数的顺序是通过 url 模式确定的,不能混淆。

在前一部分,您了解了如何在视图模式中访问 World Clock Portlet。

图 3 显示了使用下列 URL(符合上面所述的 URLAddressibility 语法)以编辑模式访问 Portlet 时的情况:

http://localhost:9080/worldclock/StdWorldClock/window/ver=1.0/mode=edit

图 3. 编辑模式的 World Clock Portlet
编辑模式的 World Clock Portlet

编辑模式允许用户使用 Portlet 首选项对 Portlet 进行个性化设置。URLAddressability 将 Portlet 首选项存储在由窗口标识符确定的 cookie 中,以便使用任何支持 cookie 的 HTTP 客户机存储首选项。有关首选项 cookie 的更多信息,请参见 WebSphere Application Server 信息中心(在参考资料中列出)。

用户返回视图模式后,World Clock Portlet 将与图 4 中所示类似。

图 4. 视图模式中使用 Portlet 首选项的 World Clock Portlet
视图模式中使用 Portlet 首选项的 World Clock Portlet

结束语

在本系列文章的第 1 部分中,我们向您简单介绍了 Application Server 中的 Portlet 容器。我们向您介绍了 Portlet 容器中提供的功能集,并说明了将在本系列的何处讨论这些不同的功能。我们介绍了两种安装 Portlet 的方法,并说明了如何在 Application Server 中访问 Portlet。还介绍了如何在 WebSphere Portal 中执行类似的任务。最后,我们详细分析了 URLAddressability(用于在 Application Server 中通过 URL 寻址 Portlet)。我们还演示了 URLAddressability 如何提供一种简单而方便的方法来呈现和开发 Portlet。

第 2 部分中,您将了解 Application Server 中的 JSR 168 Portlet 容器的高级功能。您将了解如何将多个 Portlet 聚合到一个页面、如何获取有关之前部署的 Portlet 的信息,以及如何更改缺省 Portlet 行为。


下载

描述名字大小
World clock portletStdWorldClock.war  ( HTTP | FTP )75 KB

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=156360
ArticleTitle=探索 WebSphere Application Server V6.1 Portlet 容器: 第 1 部分:Portlet 容器介绍
publish-date=08272006