UML软件工程组织

为您的Linux应用开发加油提速(四)
作者:Clifford Spinac 选择自 赛迪网
实现 ActionForm 类

现在需要实现 loginForm 类以处理来自 index.jsp 的输入。这个 ActionForm 类将包含一个字段,以及用于输入表单中每个域的取值方法(getter 和 setter),并且将提供简单的域检查。要帮助实现该类,您将使用 New ActionForm Class 向导。创建 ActionForm 类之后,然后您将把代码添加到该类中的 validate 方法。

在应用程序图(Login.gph)中,双击 loginForm 节点。这将启动 New ActionForm Class 向导。ActionForm 类名已经被设置为 LoginForm。单击 Next。如果 Next 按钮被任务栏遮蔽了,那么您可能必须最小化任务栏,或者将它拖到屏幕的另一边。



图 30. 启动 ActionForm 向导


在“Choose new accessors for your ActionForm class”上,展开 MyBankWeb、Web Pages、index.jsp 和 /login。对于 Choose Accessors,请选择 text:userid 和 password:password。单击 Next。(注:如果您未看到 text:userid 和 password:password,您可能需要关闭 WebSphere Studio,然后重新启动它。)



图 31. 选择取值方法


下一个页面显示了已选择的新取值方法(New Accessors)。单击 Next。

下一个页面为您的 ActionForm 类创建映射。请检查 Configuration File Name 为 WEB-INF/struts-config.xml,而 Mapping Name 为 loginForm。单击 Finish。



图 32. 配置文件名和映射名


Java 编辑器现在将打开 LoginForm.java。请注意,该向导已为您创建了 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;
}


保存并关闭 LoginForm.java。(如果刚才必须最小化任务栏或将其移到不碍事的地方,那么现在您可以恢复它。)

现在,您可以检查 Struts 配置文件,也可以不检查。在 J2EE Navigator 视图中,双击 Web Content/WEB-INF/ 目录中的 struts-config.xml,以便用 Struts 配置文件编辑器(Struts Configuration File Editor)打开它。选择 Form Beans 选项卡并选择 Bean Name 中的 loginForm。检查配置文件之后关闭它。



图 33. 检查 Struts 配置文件


关闭备忘单的 JSP 和 bean 列表。

实现操作映射(Action Mapping)和操作类(Action Class)

实现的最后一部分是实现登录操作映射和 LoginAction 类。将用来自登录表单的数据调用 LoginAction 类。该类可用于实现对业务逻辑的调用,就象包装器类一样。它还可用于确保调用业务逻辑的状态和条件是正确的。在本练习中,通过检查用户标识和密码,用它来验证用户的权限。

要验证用户标识和密码,通常将 LTPA 和权限 LDAP 目录(例如 IBM Directory)或者其它一些权限管理支持(例如 IBM Policy Director)一起使用。在本示例中,将只根据固定的用户标识和密码(userid/password)检查用户标识和密码。

显示备忘单。您应当正在查看 Create the actions 部分。单击 Perform 按钮以打开未实现操作的列表。

就象在上面对 JSP 和 bean 所做的那样,选择未实现的操作并单击 OK。这将打开 New Action Mapping 向导以创建我们的操作映射和操作类。如果您并未在使用备忘单,那么双击应用程序图(Login.gph)中的 login 操作映射节点。这样会启动 New Action Mapping 向导。Configuration File Name 已经被设置为 WEB-INF/struts-config.xml,Mapping Path 被设置为 /login,Forwards 中,Name 被设置为您定义的名称(success 和 failure)。从 Form Bean Name 下拉菜单选择 loginForm。从 Form Bean Scope 下拉菜单选择 request。单击 Next。



图 34. New Action Mapping 向导


在“Create an Action class for your mapping”上,Action Class Name 已经被设置为 LoginAction。单击 Finish。我们不再需要备忘单的操作列表了,所以在它上面单击 Close。

Java 编辑器将打开 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.java。既然已实现了所有组件,那么 Login.gph 上的组件现在都是有颜色的了。



图 35. 应用程序图中的所有组件都已实现


既然已实现了 LoginAction 类,您可以检查 Struts 配置文件以查看图表编辑器(Diagram Editor)和向导做了哪些更改。

在 J2EE Navigator 视图中,双击 Web Content/WEB-INF/ 目录中的 struts-config.xml 以在 Struts 配置文件编辑器(Struts Configuration File Editor)中打开它。

选择 Actions 选项卡。然后在 Action Path 中选择 /login。如果尚未设置好,那么在 Input 域中输入 /index.jsp。Specify Forwards 的域应当由图 34 中 Forwards 域的 Name 中为 JSP 页面指定的名称填充,这些名称分别与对应的 JSP 页面相关(success 与 /home.jsp 相关,而 failure 与 /error.jsp 相关)。



图 36. 设置操作输入


现在,通过选择 XML Source 选项卡来检查 struts-config.xml 文件的 XML 源代码。

保存和关闭 struts-config.xml 文件。

测试 Struts 应用程序

既然已经完成了 Struts 应用程序,那么可以利用内置的 WebSphere V5.0 测试环境(Test Environment)测试它。

再次显示备忘单。您应该正好看到 Run the Web Application 部分。单击执行按钮(黑色箭头)。如果您没有使用备忘单,那么可以在 J2EE Navigator 窗格中选择 index.jsp。然后用鼠标右键单击 index.jsp,并选择 Run on Server ...。

在 Server selection 对话框中,选择 WebSphere V5.0 Test Environment 并单击 OK。



图 37. 设置操作输入


该项目将被发布到测试环境服务器上。将启动服务器(Server),并且打开控制台(Console)视图。当服务器准备就绪时,控制台将显示一条以“Server server1 open for e-business”结尾的消息,该消息后面跟着另一条以 /index.jsp: init 结尾的消息。



图 38. 服务器测试环境启动


注:现在如果您关闭已完成的备忘单,那么查看控制台将更容易。

然后 index.jsp 将在 Web 浏览器中打开。输入用户标识 userid 和密码 password。单击 Login。



图 39. 登录


稍候片刻,应用程序将显示 .jsp 页面:



图 40. MyBank 主页


单击浏览器的 Back 按钮,并尝试输入不同的用户标识或密码,以查看出错页面。单击 Login。



图 41. 出错页面


然后将在 Web 浏览器中打开 index.jsp。输入用户标识 userid 和密码 password。单击 Login。



图 42. 未输入用户标识或密码


结束语

恭喜您!您刚才已经创建了一个基于 Struts 的 Web 应用程序。您使用 WebSphere Studio 构建了 JavaServer Pages、ActionForm、操作类和操作映射。您使用 Struts 应用程序图表编辑器(Struts Application Diagram Editor)设计和创建了您的应用程序。然后您利用 WebSphere Studio V5.0 测试环境(它包含在 WebSphere Studio 中)测试了您的应用程序。如果您有任何问题,请访问我们的技术支持论坛。

致谢

非常感谢 Ian Shields 为 Struts 备忘单补充了材料,并增加了有关 WebSphere Studio IDE 的使用技巧,他还通过大量的测试进行了其它许多修改。

关于作者

Clifford Spinac 是 IBM Developer Relations 组织(位于美国得克萨斯州奥斯汀市)中的一位高级电子商务架构设计师。在 IBM 的 23 年职业生涯中,他担当了各种软件开发、设计和规划职位,并且拥有 50 多项专利申请。在过去的三年中,他与软件开发人员和 Web 集成人员一起从事有关 IBM WebSphere Application Server、WebSphere Commerce Suite 和 Linux 中间件的技术咨询工作。可以通过 spinac-at-us.ibm.com 与 Cliff 联系。

 

版权所有:UML软件工程组织