引言 Struts 是一个很受欢迎的开放源代码平台基础,它是为了使复杂的 Web 应用程序的创建和维护更加容易而设计的。Struts 框架支持模型-视图-控制器(Model-View-Controller,MVC)模型,并且提出了许多重要的应用程序设计和实现需要注意的事项。为了能够在门户应用程序中实现页面导航,WebSphere® Portal V5 提供了一些标记,在开发典型 portlet 和 Struts portlet 时可将这些标记用于 Server Pages(JSP)。本文重点讨论 Struts 框架创建多模块的能力,并通过一个样本 Struts portlet 应用程序为您介绍如何采用 JSP 实现页面导航方法。
我们将关注以下两种互补的方法:
如何使用在 WebSphere Portal 中可用的某一 JSP 标记来从 JSP 实现页面导航
我们将会看到一个样本应用程序,包括开发环境和门户资源的屏幕快照,以及页面导航方法的代码样本。
如何使用 Struts portlet 框架中内置的多模块支持来组织 Web 导航方案
我们将会看到一些代码样本,它们阐述了如何使用页面导航特征来执行在门户环境中转换的多个 Struts 模块。
本文假定您已基本了解 Struts 应用程序,包括如何在 WebSphere Studio Application Developer 中创建 Struts 应用程序、如何将 Struts 作为 portlet 进行部署,同时也了解 WebSphere Portal 中的门户资源。(要获得这些方面的更多信息,请参见参考资料。)
在开发和部署我们的样本应用程序时用到了以下产品:
WebSphere Portal V5.x
WebSphere Application Server v5.x
支持 Struts Version 1.1 的 WebSphere Studio Application Developer v5.0.1 (下面称为 Application Developer)。
本文所讲解的用于实现页面导航的开发任务可同时用于标准 portlet 和 Struts portlet。
应用程序概述 在样本应用程序中,我们将会使用位于三个不同页面的三个 portlet。当用户选择其中某一 portlet 中的链接时,该用户会被定向到另一个页面,其中驻留着另一个 portlet。在整个文章中我们开发和提到的示例都会利用多 Struts 模块将 WebSphere Portal 页面导航标记并入门户环境中每个模块本身的 JSP 文件中。图 1 概括性地展示了样本应用程序将如何工作;为了把重点放在理解这些方法上,我们特意简化了样本应用程序。在本文的后面我们将会提供应用程序的细节。
图 1. 样本应用程序的高级视图 构建导航结构
WebSphere Portal 提供了自己的 JSP 标记来供 portlet JSP 使用。其中的一个标记,
,是用于创建到门户任何地方的页面链接的。我们使用该标记中一个属性,contentNode="id|name",来创建到不同页面的 URL,以便构建导航结构。该属性利用一个惟一的标识符(内容节点的名称)来指定可以从中找到该 portlet 的页面。(关于这一标记的更多信息请参见参考资料。)
在 WebSphere Portal 中选择 Administration => Portal Settings => Custom Unique Names。我们使用 Custom Unique Names 管理 portlet 来获取为 contentNode 属性指定的门户资源的惟一标识符。管理员可以使用 Custom Unique Names portlet 来查看惟一标识符并为门户资源分配(让人易读的)自定义名称。图 2 显示了这些已配置的样本页面的惟一标识符和自定义名称:
Struts_Test
Struts_Receiver
Struts_Receiver_2
图 2. Custom Unique Names portlet 在这个示例中,WebSphere Portal 分配给这些页面的惟一标识符分别为 6_0_LT、6_0_P1 和 6_0_IP。(您的值可能会有所不同。)在驻留 WebSphere Portal 的另一台机器上也创建了同样的门户资源 Struts_Test、Struts_Receiver 和 Struts_Receiver_2 portlet 页面。为了阅读和工作的方便,我们也为这些样本页面配置自定义名称,并在 JSP 文件中使用这些自定义名称(而不是惟一标记符)。
在
portlet JSP 标记主体中,可以使用 <% wpsURL %> 脚本变量将 URL 直接写入输出流。在这个示例中,我们使用以下 JSP 代码来创建从某一 JSP 页面到 Struts Receiver 页面的链接:
Any text
portlet JSP 标记属于 engine.tld 标记库,这一标记库是由门户引擎使用的。为了让该门户 JSP 标记可用于我们的 JSP 中,我们在 JSP 页面的最开始位置添加标记库指示 taglib。如以下代码所示,通过前缀 wps,我们样本中所有的 engine.tld 标记现在就都可用了:
<%@ taglib uri="/WEB-INF/tld/engine.tld" prefix="wps" %>
样本页面和 portlet 配置 该样本应用程序的页面导航条包括三个 portlet(这里提供的长名称有助于强调页面导航流程):
Overview Struts Portlet:
显示了两个用于将用户请示定向到包含电话号码或地址信息的页面上的链接,它位于 Struts_Test 页面(自定义名称:Struts_Test_Page),如图 3 所示:
图 3. Struts_Test 页面中的 Overview Struts Portlet Receive Phone Numbers Request Struts Portlet:
显示用户的电话号码,位于 Struts_Receiver_2 页面(自定义名称:Struts_Receiver_2_Page),如图 4 所示:
图 4. Struts_Receiver_2 页面中的 Receive Phone Numbers Request Struts Portlet Receive Address Request Struts Portlet:
显示用户地址信息,位于页面(自定义名称:Struts_Receiver_Page),如图 5 所示:
图 5. Struts_Receiver 页面中的 Receive Address Request Struts Portlet 请记住,到目前为止所描述的全部任务均可用于常规 portlet 或 Struts portlet 开发。接下来我们将使用多 Struts 模块中的门户 JSP 标记来实现页面导航。
在 Struts 中使用多模块支持 Struts Version 1.1 可以让我们将单个 Struts 应用程序拆分为多个模块,每个模块都有自己的操作、JSP 页面和 Struts 配置文件(图 6)。在 Struts 应用程序中实现多 Struts 模块需要以下几个步骤:
创建独立的 Struts 配置文件以及每个应用程序模块的 Struts 操作和 JSPs。
配置 Web 部署描述符(web.xml)。
从一个模块转换到另一个模块。
虽然 Struts 应用程序很容易应用,但要想在门户环境中运行 Struts 应用程序的话,您还需要执行其他的步骤。(参见参考资料)。
图 6. Struts 应用程序中的多模块支持 创建独立的 Struts 模块和文件
对于我们的样本应用程序,我们创建了四个 Struts 模块,以及它们自己的 Struts 配置文件、行为和 JSPs。这些 Struts 模块是:
address
phone-numbers
overview
default.
我们也配置了 web.xml 和 portlet.xml 文件,并使用 default 模块执行从一个模块到另一个模块的转换。
接下来,我们将会根据实现的需要讲解我们的文件需要的改动。
在 Struts 模块中开发页面导航
我们在以下三个模块中实现页面导航:
overview
address
phone-numbers.
除了存在一些细微的差别以外,这些模块中每一个的页面导航开发任务几乎都是相同的。因此,我们将讲解实现 overview 模块的页面导航的任务,然后再描述一下其他模块的实现任务与此的差别。此外,我们还会讲解特定于 Struts 模块的开发过程,该模块是为 default 模块而转换的。在我们的实现中,default 模块用于将控制权交给下一个适当的模块;并不需要页面导航。然而,由于它启动其他模块来执行模块转换并且是导航结构的一个主要部分,所以我们这里也将它包括在内。
在 Application Developer 中,我们创建一个支持 Struts Version 1.1 的 Web 项目,然后为开发任务创建文件,如下面的表 1 所示。
表 1. 开发构件列表
以下是表 1 所示构件的简要描述:
JSP 文件:
我们开发了五个 JSP 文件:
用于 default 模块的 index.jsp 和 failure.jsp 文件;
用于 address 模块的 address.jsp 文件;
用于 phone-numbers 模块的 phone-numbers.jsp 文件;
用于 overview 模块的 overview.jsp 文件。
操作:
我们在 com.test.strutstest.actions 包中创建四个 Struts 操作。它们的类为:
DisplayAction
DisplayAddressInfoAction
DisplayPhoneInfoAction
【责编:admin】
--------------------next---------------------