我们将使用 Struts 框架来对这个示例进行编码。WebSphere Studio Enterprise Developer 的 Struts 工具提供了下列向导:
| 向导 | 功能 |
| Web project | 功能已被扩展以创建一个带 Struts 支持的 J2EE Web 项目,或将 Struts 支持添加到现有的 J2EE Web 项目中 |
| Struts Action | 创建一个新的 Struts 操作 |
| Struts Action Mapping | 创建一个新的 Struts 操作映射 |
| Struts ActionForm | 创建一个新的 Struts 表单 bean |
| Struts configuration file | 创建一个新的 Struts 配置文件 |
| Struts module | 创建一个新的 Struts 模块 |
| JSP | 功能已被扩展以创建一个基于 Struts - 或基于现有的表单 bean 的定义 - 的 JSP |
现在可以使用这些向导来完成后面一系列的任务。为了帮助您,Enterprise Developer 提供了一个新的名为 Cheat Sheets 的超级向导(可看作上述所有向导的一个总的向导)来指导用户遍历整个开发过程,并为用户提供了一系列步骤来构建一个基于 Struts 的 Web 项目。
Cheat Sheet 是一个程序,它可以帮助您完成涉及一系列不同子任务的复杂任务。Struts EGL Cheat Sheet 可以创建使用 EGL 的基于 Struts 的 Web 应用程序。对于新手或任何喜欢这种附加指导的人来说,它能够提供很大的帮助。
要启动 Cheat Sheet,从菜单条单击 Help => Cheat Sheets。打开的级联菜单中列出了五种最常用的 Cheat Sheet。您也可以选择 Other...来打开一个对话框以选择其他 Cheat Sheet。Cheat Sheet 是以视图方式打开的。任何时候都只能打开并激活一个 Cheat Sheet,因此在打开一个新的 Cheat Sheet 之前将关闭任何已打开的 Cheat Sheet。被关闭的 cheat sheet 的完成状态将被保存。
一般来说,要使用 Cheat Sheet 来创建基于 Struts 的 Web 项目:
我们将要执行的一系列步骤(由 Cheat Sheet 指导)如下所示,在图 19 中所示的 Cheat Sheet 中也有。
我们已经在前面创建了 Web 项目,因此您可以通过单击 Cheat Sheet 的
图标绕过这一步。
Web 图表是一个文件,它可以帮助您显现基于 Struts 的 Web 应用程序的流程结构。下面的表格按照对话框的顺序显示需要您输入值的字段:
| 对话框 | 字段 | 值 | 操作 |
| 创建一个 Web 图表 | Folder name(输入或选择值) | EGLWeb/Java Source |
Finish |
| File name | EGLflow |
Web 图表编辑器将会被打开。Web 图表的一个很有用的特性是底层资源的任何改变都会实时地在图中显现出来。在我们的示例中,您将可以在编辑器的自由格式表面(FFS)中为名为 index.jsp 、 result.jsp 和 error.jsp 的 Web 页面创建节点,而这些页面现在并不存在。我们将出现在 FFS 上还没有实现的节点称作未实现(节点)。当您在图表编辑器以外创建了该 JSP,在图表编辑器得知该 JSP 已被创建后,就会在其图中作出实时的改变。
同样,如果删除图中已实现部件的底层资源,在图表编辑器得知该删除(操作)后也将在图中作出相应的改变。您可以使用图表编辑器来展示全部(或部分)Struts 应用程序。您还可以直接与图中的部件进行交互。例如,您可以直接从图表编辑器中调用 JSP 编辑器。
使用图表编辑器:
| 组件 | 连接到…/从…连接 | 转发名称 | 作用域 |
index.jsp (Web 页面节点) |
inquiry | request |
|
result.jsp (Web 页面节点) |
inquiry | valid |
|
error.jsp (Web 页面节点) |
inquiry | invalid |
|
Inquiry (操作映射节点) |
全部 | ||
InquiryForm (表单 bean 节点) |
inquiry |
这一步,您将定义并实现 JSP、操作查询以及与您的 Web 图表相关联的 bean。您可以选择 perform 按钮,这将会显示所要创建元素的列表,如图 21 所示。然后您可以双击每个元素来创建它。然而,如果您首先创建了表单 bean,那么向导就会根据您在那个表单 bean 中所指定的内容来创建 JSP 模型。创建表单 bean( InquiryForm )的步骤如下所示。
3.1 创建 InquiryForm
表单 bean(一种类型的 Java bean)是 ActionForm 类子类的实例,它既可以从提交的客户机请求中存储 HTML 或 JSP 表单数据,也可以存储来自用户选择的链接的输入数据。HTML 或 JSP 表单是由用于供用户输入信息的字段组成。
当浏览器提交 HTML 表单时,Struts ActionServlet 会进行如下操作:
此外,如果您实现了一个验证方法并在 Struts 配置文件中相应的操作映射条目上设置了验证标志,ActionServlet 将会调用那个验证方法。
我们可以在创建完 JSP 之后再创建表单 bean,但先创建表单 bean 会在生成 JSP 模型时对我们有所帮助。要创建表单 bean:
InquiryForm 。
InquiryForm 。
InquiryForm Java 类并打开了编辑器。看一下生成的代码,您会看到其中已经创建了 ID 的 getter 和 setter 方法( getID 和 setID )、name 的 getter 和 setter 方法( getName 和 setName )以及一个 validate 方法。您可以用这个 validate 方法来验证您表单中的字段。
请注意:
struts-config.xml 已被更新
InquiryForm
inquiryForm (其中 i 是小写的;小心,这可能造成混乱)。 生成的 xml 如下所示:
3.2 创建 error.jsp
要创建 error.jsp :
Error! Could be problems with Data Base connection. Check WebSphere Console.
3.3 创建 index.jsp.
要创建 index.jsp :
ID 字段的 index.jsp 。这样就会打开 JSP 并使它可供编辑。请注意生成的 JSP 中包含了选中的 ID 字段,如图 26 所示。
3.4 创建 result.jsp
要创建 result.jsp :
result.jsp 。这样就可以打开该 JSP 并使它可供编辑,同时显示“Place result.jsp's content here”行。按照下列步骤替换该行。
USERID 。
NAME 。
bean:write 标记的按钮。
Click here to return to the Index Page.
File
index.jsp
InquiryForm ,但请小心表单 bean 的名称却是 inquiryForm (首字母小写)。这两者很容易被搞混。编码改变的结果如图 29 所示。
result.jsp 的错误。请解决那些仍然存在的错误(如果有)。请注意您还没有定义 /inquiry ,因此 Tasks 视图中会有一个警告。我们将在下一步中解决这个问题。
result.jsp 编辑器。 至此,您已经创建了您将要用到的三个 JSP。请注意现在 EGLflow.gph 中这些 JSP 节点已经变为彩色的了,这表示它们已经被实现。如果“Select Web Pages”窗口仍然开着,请关闭它。
Struts 操作是 Action 类子类的实例,用来实现一部分 Web 应用程序并返回一个转发。操作映射是一个配置文件条目,它将操作名称和操作、表单 bean 及本地转发关联在一起。
这一步您将定义并实现与 Web 图表相关联的 Action inquiry。您将在操作映射向导中调用 EGL 业务逻辑。使用 Cheat Sheet:
(short)iD
name 。 (short)id
(String)name
请注意这样就创建了一个名为 InquiryAction.java 的类并且打开了编辑器。如果您愿意,您可以花一些时间去理解所生成的 Java 代码。转到 perform 方法,它是负责调用由 EGL 代码生成的 Java 类并把参数传给它们的方法。如果您想遵循执行逻辑,这也许是设置断点的一个好地方。您还会注意到 ID 字段通过工作存储(使用 Te01w01 生成的 Java bean)被发往生成的 EGL Java Wrapper( Te01aWrapper )。请参阅图 33 中的 perform 方法。
4.1 检查 Struts 转发
Struts 转发是由一个操作返回的对象,它有两个字段:一个名称和一个路径(通常是 JSP 的 URL)。其中路径是指将请求发往(或转发到)何处。转发可以是局部的(附属于一个具体的操作),也可以是全局的(对任何操作都可用)。
请确保在 InquiryAction 类的 perform 方法中正确地定义了转发。如果服务器程序中没有错误,那么转发就是 有效的;如果有错误,那它就是 无效的。
您将需要把无效转发的那一行移至正确的位置,如图 34 所示。
保存并关闭编辑器。至此 Struts 框架准备就绪。根据 Cheat Sheet 上的步骤,下一步将是实现业务逻辑组件(EGL)。
在这个步骤中,您将创建 EGL 程序来实现业务逻辑。因为我们发现在创建服务器程序时使字段定义能被重用更加容易,所以我们已经在 前面的步骤中完成了这个任务。然而,我们也可以选择在此处使用 EGL 向导来创建 EGL 源代码。
选择绕过按钮(
)。
这一步,我们使用向导来生成 EGL 程序。由于我们已经生成了用 Java 代码写的 EGL 程序,也就是说这是另一个我们可以通过选择绕过按钮(
)来绕过的步骤。
要运行应用程序:
WebSphere version 5.0 。您也可以使用已经定义的 WebSphere Application Server。
30 ,然后选择 Submit。
error.jsp ,如图 36 所示。
出什么问题了?
生成的 EGL Java 代码使用 WebSphere 数据源来访问数据库。当我们在为 EGL 定义构建描述符时,我们指定了 jdbc/SAMPLE ,并且必须为 WebSphere 定义该 JNDI 名称。请注意很多与数据库相关的错误也可能是由 WebSphere 安全性问题(或糟糕的配置)所引起的。
尽管出现上述错误,但实际上 Struts 操作仍能正常工作,因为在这种情况下应用程序会返回一个无效的转发并正确地显示 error.jsp 页面。
7.1 定义 WebSphere 测试环境的数据源
根据 Sun JDBC 2.0 Standard Extension 规范中的定义,数据源允许您管理数据库的一个连接池。使用连接池能带给您下列好处:
数据源工作流程如下:
要定义数据源:
sample
jdbc/SAMPLE SAMPLE
要再次运行应用程序,只要选择 EGLWeb/Web Content => index.jsp => Run on Server。在 Userid 中输入 30 ,然后选择 Submit。如果一切正常,您应该会看见如图 38 所示的内容。
如果您输入了一个数据库中不存在的用户标识(比如 31 ),您就应该看到如图 39 所示的内容。
该程序可以被自然地扩展为显示适当的错误消息,我们在下一步将解释它。
7.2 扩展应用程序:使用应用程序资源属性文件
Struts 应用程序可以有选择地使用一个属性文件以保存文本。它允许您不必改变任何 Java 或 JSP 代码就能将改变应用到错误消息、按钮、标题、链接或其他任何文本字段上。它还可以使您轻松地将消息翻译为其他语言。向导会创建 ApplicationResources.properties 属性文件(如果您需要,可以在“Struts Settings”对话框中改变名称和包)。缺省情况下,向导会将文件放在指定的 Java 源包中,即放在 WEB-INF/classes 子目录中。
EGLWeb/JavaSource/eglweb/resources/ApplicationResources.properties 文件,如图 40 所示。
WEB-INF/classes ,因为每次进行项目构建时都会重新生成这个文件。
<bean:message key=--/> Strut 标记来替换它们,并包含每一条具体的消息。您可以通过使用源或执行 JSP => Insert Custom?=> /Web-INF/struts-bean.tld => message =>Insert一系列步骤来实现它。在完成这些改变后, EGLWeb/Web Content/index.jsp 、 error.jsp 和 result.jsp 文件如下面三幅图所示。
EGLWeb/Java Source/eglweb/resources/ApplicationResources.properties 文件就可以了。改变的结果如图 44 和 45 所示。
祝贺您!您没有编写一行 Java 代码,就实现了一个使用 servlet、JSP 和 Java 的简单应用程序,它的服务器端是一个执行简单数据库查询的 Java 程序。您可以很容易地将这个非常简单的应用程序扩展为一个非常复杂的应用程序,但它们的编码、测试和调试的过程却是相似的。
当开发人员在 EGL 中进行编码时,他们不需要应付所有的细节问题,因为 EGL 会生成所有的连接器以使用必需的 Java 类,而这些 Java 类会在连接器生成时可用。EGL 为程序员提供了一种简单的方式,使得他们即使不具备实现 J2EE 通常所必需的所有技能,也能够进入复杂的 J2EE 世界。
本教程的第 2 部分将展示如何用 COBOL 服务器程序来实现这个应用程序。别走开!