Struts是一个用于开发 Web 应用程序的概念框架。它是模型-视图-控制器(Model-View-Controller,MVC)设计范例的一个变体,其中 控制器的功能是作为应用程序逻辑( 模型)和数据表示( 视图)之间的中间介质。该框架包含一组 Java 类和 JSP 标记库。同 IBM WebSphere Studio 中的工具一起,Struts 可以帮助开发人员快速地设计和实现 Web 应用程序。Struts 是 Apache 软件基金会 Jakarta 项目所拥有的众多产品中的一种。
本文为您演示了如何使用 IBM WebSphere Studio Site Developer 来创建一些初始组件,它们是基于 Struts 的 Web 应用程序所必需的。这些组件包括:
ActionForm 类,它验证用户是否输入了用户标识和密码,如果未输入则发出错误消息
Action 类(在实际的应用程序中,应当由 WebSphere 或 IBM Policy Director 管理安全性,例如用户标识/密码认证)
请安装 Red Hat Linux 7.2、Red Hat Linux 7.3、 SuSE Linux 7.3或 安装 SuSE Linux Enterprise Server(SLES)8。
您将需要 WebSphere Studio Site Developer。通过索取包含 WebSphere Studio Site Developer 和其它 IBM 试用软件的免费 CD 集,或者通过下载,可以获得免费的 60 天试用版本。可在“Speed-start your Linux application”概述页面上找到有关 索取 CD 集或下载产品的信息。尽管本文中的示例使用了 IBM WebSphere Studio Site Developer,但是也可以使用 IBM WebSphere Studio Application Developer,它包含了其它特性,例如 EJB 支持。本文以下部分将这两个产品都称为“WebSphere Studio”。
您应当使用 Help->Software Updates菜单功能将您的 WebSphere Studio 软件升级到 5.0.1 级别。这将纠正下面提及的一些接口问题;否则,这些问题将要求您停止和重新启动 WebSphere Studio。
您是 Linux 新手吗?如果您是一位 Linux 新手,并且需要有关登录和注销、挂装 CD-ROM 或打开终端窗口方面的帮助,请参阅“ 针对 Linux 开发新手的基本任务”,它介绍了这些任务,以及其它任务。
在本节中,我们将登录,然后启动 WebSphere Studio 并在新的工作空间中创建用于 Struts 应用程序的 Web 项目。
以某个用户身份(不要以 root 用户身份)登录并启动 WebSphere Studio Site Developer。从终端窗口运行 wssitedev50。如果您的路径中无 /usr/bin,那么请运行 /usr/bin/wssitedev50。还可以从桌面的任务栏启动程序。例如,对于 KDE,选择 Start Application > Run Command...并根据情况相应地输入 wssitedev50或 /usr/bin/wssitedev50。对于本示例,我们将创建一个名为 MyBank 的新工作空间,以便于将该项目与您可能正在进行的其它项目区分开。
创建工作空间时,您会看到显示 Site Developer 徽标。这一工作可能需要花费一些时间,请耐心等待。
当工作空间打开时,您的首要任务是创建一个新项目。对于本项目,我们将向您介绍 基于 Struts 的 Web 应用程序备忘单(cheat sheet)。有关创建项目的更多方法,请参阅文章“ 用 WebSphere Studio Application Developer 在 90 秒内快速启动您的 Linux 应用开发:“Hello, World””。顺带我们将指出备忘单的功能,并且将介绍一些备忘单未涉及的一些功能。要启动一个带有备忘单的新 Struts 项目,请单击 Help > Cheat Sheets > Create a Struts-based Web application,如图 4 所示。
打开了备忘单介绍。现在,在左边的导航区域有一个备忘单图标,当看不见备忘单时,可以使用该图标来打开它。还有一个形状为黑色箭头的按钮,可以使用它跳到备忘单的下一步。现在单击它以转到备忘单的下一个阶段,在那将开始创建我们的项目。
单击执行按钮(黑色箭头)以创建一个 Web 项目。
在下一个屏幕上,在 Project name 域中输入 MyBankWeb。备忘单已经选择了 Web Project features 下的 Add Struts support。选项 Create a default CSS file应当已处于被选中状态。单击 Next。
在 J2EE Settings Page 上,在 New project name 域中输入 MyBankEAR,并在 Context root 域中输入 MyBank。使用缺省的 J2EE 级别 1.3。单击 Next。
Struts Settings 窗口上的缺省值是可接受的。请注意选中了 Create a Resource Bundle for Struts Project。在下一部分处理中,我们将向该资源束(Resource bundle)添加屏幕文本和出错消息特性。在资源束中保存这样的字符串有助于将我们的 Web 页面翻译成另一种语言。单击 Finish。
您将返回到备忘单,现在多了一个处于选中状态的项。单击备忘单上的 最小化(_)按钮,因为我们在下一步中要使用工作空间的其它一些特性。
在继续之前,我们需要介绍一个重要的概念。WebSphere Studio 是一个面向任务的工具,它的用户界面是为要执行的任务定制的。用于开发 JSP 的界面与用于服务器开发的界面有很大的不同。通过切换您正在使用的透视图,Site Developer 允许您对查看哪些窗口和视图进行控制。 透视图是一组视图,这些视图显示了执行具体任务时您需要的资源。WebSphere Studio 拥有为 Web 应用程序开发、J2EE 开发、调试和许多其它常见任务而定义的透视图。左边的导航栏包含了几个图标,这些图标允许您方便地打开透视图或在透视图之间切换。
|
|
|
|
|
上面我们提到过,我们将创建资源束,以允许翻译文本。根据这个应用程序的初始设计,它将包含三个 JavaServer Pages:index.jsp、home.jsp 和 error.jsp。我们将为您演示如何为要在所有页面、出错消息、按钮文本和用户标识及密码提示上使用的标题创建应用程序资源。尽管我们在实际的应用程序中不会混合使用不同的方法,但是我们还是会将一些文本直接编辑进页面,这样您就可以看到不同的工作方法。
这些资源存储在应用程序资源特性文件中。在本节中,我们将为您演示几个有关 IDE 的技巧,然后创建这些应用程序资源。
如果你从头至尾都是按照我们的步骤进行的,那么您现在应当看到了 Web 透视图。如果没有,那么请单击左边导航栏中的 Web 透视图图标(见上面的 WebSphere Studio 中的透视图中的描述),或者选择 Window > Open Perspective > Web。我们将使用 Web 透视图中的 J2EE Navigator 窗格来浏览应用程序资源文件,然后打开它进行编辑。窗格底部的选项卡允许您在窗格之间切换。
现在通过单击加号(+)展开 Web 项目树,以显示如图 12 所示的 ApplicationResources.properties 文件。如果 J2EE 窗格非常小,可以在标题上按鼠标右键以弹出上下文菜单,然后最大化该窗格。
双击 MyBankWeb.Web Content.WEB-INF.classes.mybankweb.resources 中的 ApplicationResources.properties,以利用特性文件编辑器(Properties File Editor)打开它。请注意当您这样做时 J2EE Navigator 窗格是如何恢复成以前大小的。尽管超出了本文的范围,但是如果您愿意,也可以使用其它编辑器。选择 Window > Preferences,并且在首选项树的 Workbench部分的 File associations下面进行查看。
除去 errors.header 和 errors.footer 特性前的 #。在 errors.footer 特性之后添加如下面清单所示的那些行。
提示:Linux 的应用程序有时候会共享剪贴板,但并非始终如此。在共享的情况下,Edit > copy(ctrl-C)和 Edit > paste(ctrl-V)通常分别用做复制和粘贴。如果这无法工作,那么如果您有一个三键鼠标(或者如果您已经对鼠标进行了设置,通过协调两个按键 — 即同时按下两个按键来模拟三键鼠标),通常有一个较为“古老”的方法可以使用。按下鼠标左键,在某个窗口的文本上拖动鼠标,然后使用中间的按键(或在 2 键鼠标上同时按下两个按键)将突出显示的文本粘贴进编辑器窗格。您可以在一个窗口中或多个窗口之间使用这个便捷的技巧。
清单 1. 将这些行添加到 ApplicationResources.properties 文件中的 errors.footer 特性之后
# Optional header and footer for <errors/> tag. errors.header=<ul> errors.footer=</ul> index.title=MyBank Application button.login=Login global.field.userid=User ID global.field.password=Password error.login.nouserid=<li>You must enter a User ID. error.login.nopassword=<li>You must enter a Password. error.login.failed=<li>Invalid User ID and/or Password entered. error.login.exception=<li>Exception occurred in action. |
在这一步中,我们将返回到备忘单,并且创建 Struts 应用程序图,我们将用它来设计和构建我们的应用程序组件。
如果您没在使用备忘单,那么通过单击工具栏按钮(或选择 File > New > Other....)可以打开 New 向导。在 Select 对话框的左边窗格上,展开 Web并选择 Struts。在右边的窗格中选择 Web Diagram。单击 Next。
注:如果您不喜欢使用 Struts 应用程序图,那么通过使用 File > New > Other... 下可用的新建文件向导,然后选择 Web > Struts 和您希望构建的组件,您仍可以为该项目创建每个组件。
|
|
|
|
|
|
|
|
|
现在我们将返回到备忘单,以实现我们的 JSP:index.jsp(登录入口页面)、主页和出错页面。
右下窗格包含一条表明 /login 目标不存在的消息。我们需要编辑几个特性,所以这里我们将打开 properties 视图。要做到这一点,请选择 Window > Show View > Other。在弹出的对话框中,展开 Basic,选择 Properties,然后单击 OK。 Properties选项卡将被添加到右下窗格,该窗格将在 Properties视图中打开。您的屏幕现在应当如图 20 所示。
<h1><bean:message key="index.title"/></h1> <h2>Welcome <bean:write name="loginForm" property="userid"/></h2> <h2>To MyBank Home Page</h2> |
<h1><bean:message key="index.title"/></h1> <h2>Error Page</h2> <p> <html:errors/> <p> <a href="index.jsp"><b>Return to Login Page</b></a> |
loginForm 类以处理来自 index.jsp 的输入。这个 ActionForm 类将包含一个字段,以及用于输入表单中每个域的取值方法(getter 和 setter),并且将提供简单的域检查。要帮助实现该类,您将使用 New ActionForm Class 向导。创建 ActionForm 类之后,然后您将把代码添加到该类中的 validate 方法。
ActionForm 类名已经被设置为 LoginForm。单击 Next。 如果 Next 按钮被任务栏遮蔽了,那么您可能必须最小化任务栏,或者将它拖到屏幕的另一边。
ActionForm 类创建映射。请检查 Configuration File Name 为 WEB-INF/struts-config.xml,而 Mapping Name 为 loginForm。单击 Finish。
ActionForm 类的大部分内容,包括两个字段(userid 和 password)及其 setter 和 getter 方法。向下滚动文件至 ActionErrors validate 方法(接近源文件的底部),用以下代码替代该方法。
public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
// Validate the fields in your form,
// adding each error to this.errors as found
if ((getUserid() == null) || (getUserid().length() == 0))
errors.add("userid",
new ActionError("error.login.nouserid"));
if ((getPassword() == null) || (getPassword().length() == 0))
errors.add("password",
new ActionError("error.login.nopassword"));
return errors;
} |
实现的最后一部分是实现登录操作映射和 LoginAction 类。将用来自登录表单的数据调用 LoginAction 类。该类可用于实现对业务逻辑的调用,就象包装器类一样。它还可用于确保调用业务逻辑的状态和条件是正确的。在本练习中,通过检查用户标识和密码,用它来验证用户的权限。
要验证用户标识和密码,通常将 LTPA 和权限 LDAP 目录(例如 IBM Directory)或者其它一些权限管理支持(例如 IBM Policy Director)一起使用。在本示例中,将只根据固定的用户标识和密码(userid/password)检查用户标识和密码。
LoginAction 类文件。向下滚动到 perform 方法,并利用下列代码替换它。
public ActionForward perform(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
ActionErrors errors = new ActionErrors();
ActionForward forward = new ActionForward();
// return value
LoginForm loginForm = (LoginForm) form;
try {
// do something here
if (!loginForm.getUserid().equals("userid")
|| !loginForm.getPassword().equals("password"))
errors.add("login", new ActionError("error.login.failed"));
} catch (Exception e) {
// Report the error using the appropriate name and ID.
errors.add("login", new ActionError("error.login.exception"));
}
// If a message is required, save the specified key(s)
// into the request for use by the <struts:errors> tag.
if (!errors.empty()) {
saveErrors(request, errors);
// Forward control to the failure URI
forward = mapping.findForward("failure");
} else {
// Forward control to the success URI
forward = mapping.findForward("success");
}
// Finish with
return (forward);
} |
LoginAction 类,您可以检查 Struts 配置文件以查看图表编辑器(Diagram Editor)和向导做了哪些更改。
既然已经完成了 Struts 应用程序,那么可以利用内置的 WebSphere V5.0 测试环境(Test Environment)测试它。
/index.jsp: init 结尾的消息。
注:现在如果您关闭已完成的备忘单,那么查看控制台将更容易。
恭喜您!您刚才已经创建了一个基于 Struts 的 Web 应用程序。您使用 WebSphere Studio 构建了 JavaServer Pages、ActionForm、操作类和操作映射。您使用 Struts 应用程序图表编辑器(Struts Application Diagram Editor)设计和创建了您的应用程序。然后您利用 WebSphere Studio V5.0 测试环境(它包含在 WebSphere Studio 中)测试了您的应用程序。如果您有任何问题,请访问我们的 技术支持论坛。