BEA WebLogic Portal 8.1" 框架的核心任务之一是创建一致且正确的 URL , 以便用户在门户页面环境中与各种 portlet 进行 交互。撰写本文的目的是为了向读者介绍 WebLogic Portal 中 URL 创建过程的基础结构。本文介绍 WebLogic Portal 如何创建 URL , 可以创建的各种 URL , URL 背 后的 API 和 层 , 以及使用 Web Services for Remote Portlets ( WSRP ) 提供或消费 portlet 时 URL 将会发生什么变化。在介绍 URL 创建过程的同时,我还将重点强调一些最佳实践。阅读本文之后,您将有能力避免大多数常见的 URL 缺陷,并且可以利用 portlet 提供一致的用户体验。
问题
为什么创建 URL 是 WebLogic Portal 的核心任务 ? 为什么 portlet 不能像在 HTML/JSP 页面中创建 URL 那样在以下示例代码中创建 URL
Click here to continue.
当用户点击与此类似的链接时 , 下面的某种情况将发生 :
用户将看到未经门户页面聚合的 next.jsp 内容。
用户将看到错误页面,带有可怕的异常堆栈跟踪。
如果门户调用 portlet 使用的是 WSRP ,但是用户不具有与 WSRP Producer 直接交互的权限,则该用户的浏览器上将显示一个 DNS 或安全性错误。
要避免这些情况的发生 , portlet 必须要求 WebLogic Portal 创建 URL 。为什么 portlet 将此任务委派给 WebLogic Portal ? 原因如下 :
提示 :在创建 portlet 时 , 不要假定关于 URL 结构的任何事情。实际结构不仅可以由部署在 portlet 的 Web 应用程序中的模板确定,而且也可以由客户确定,比如 WSRP 。
门户是访问 portlet 的网关 ―― 当用户与 portlet 交互(即提交表单或点击链接)时,门户接收用户请求,查找负责处理该请求的 portlet ,然后调用 portlet 。门户还可提供附加服务,如个性化、权利等。因此, portlet 创建的链接必须指向门户,而不是指向 portlet 的 JSP 、 servlet 或页面流。
Portlet 从门户中去耦 ――Portlet 是可重用单元,可以将其聚合到多个门户和桌面。因此, Portlet 不能对门户页面的 URL 假定太多。聚合 portlet 的门户可以位于: (a) 本地,在同一 Web 应用程序中, (b) 在同一服务器上的不同 Web 应用程序中,或者 (c) 物理远程位置。在 (b) 和 (c) 两种情况下,门户可以使用 WSRP 在页面中聚合 portlet 。实际上,可以同时将同一 portlet 聚合到这三种类型的门户页面中。
Portlet 不知道部署 ―― 更重要的是, portlet 对于如何部署它们无法假定太多。部署细节包括代理服务器、域名称、端口,等等。 Portlet 对这些无法做出任何假定 。
当您将 URL 的创建委托给 WebLogic Portal 时 , 它将对 portlet 屏蔽门户页面 URL 、域名称、代理服务器等。门户管理员和部署人员可以控制细节,无需破坏 portlet 中的任何 URL 。
如果您非常想知道上述链接的创建方式(假定您要在简单 JSP portlet 中创建这一链接),下面就是一个例子:
现在 , 我们来检查 WebLogic Portal 的 URL 的基础结构
URL模板
WebLogic Portal 使用称为 “ URL 模板 ” 的简短 URL 片断创建 URL 。它们不是有效的 URL , 需要进一步处理才能使用。要查看 URL 模板,需要创建门户项目并检查其 WEB-INF 目录。在此目录中,您将发现一个 url-templates-config.xml 文件。该文件中包含大量的默认 URL 模板。每个 URL 模板的外观如下所示:
{url:scheme}://{url:domain}:{url:port}/{url:path}?{url:queryString}{url:currentPage}
to continue.
提示 : 您可以使用已知值替换任何可选标志。例如 , 如果您认为永远不会通过 HTTP 访问门户页面 , 则可以在所有 URL 模板中使用 “ http ” 替换“url:scheme” 。
您将发现该文件不只是列出一个模板 , 而是列出多个模板。在讨论为何需要多个模板之前,我们先看一看 URL 模板的结构。
剖析URL模板
URL 模板是带有一个或多个标志的 URL 。这些标志由 WebLogic Portal 预定义,在使用远程 portlet 的情况下,是 WSRP 1.0 规范规定的。所有标志均由大括号包围 ( { , } ) 。使用 URL 模板创建 URL 时, WebLogic Portal 使用相应的值替代这些标志,这些值或者由 URL API 或者由 JSP 标记指定,或者从部署门户的方式自动派生。
每个 URL 模板中可以具有一个或多个下面的标志 :
[8]
