业务构建注释
我用 Ant 构建项目,并用 JUnit 运行单元测试。business.zip 包含构建业务项目所需的一切,当然 Ant 和 JUnit 除外。这个包脚本将构建类,运行单元测试,创建 Java 文档和 jar 文件,最后将所有这些内容压缩到一个 zip 文件中发送给客户。只要对 build.xml 作一些修改,您就可以将它部署到其他平台上。 Business.jar 位于 Web 的下载部分,因此,您并非必须下载并构建这个业务包。
Web 项目
第二个项目是用 Struts 开发的一个 Web 应用程序。您将需要一个符合 JSP 1.1 和 Servlet 2.2 规范的容器。最快的入门方法是下载并安装 Tomcat 3.2(请参阅 参考资源 )。直到有 Struts 的 1.0 发行版之前,我建议您从 Jakarta 项目获得最新的版本(请参阅 参考资源 )。这对我来说是个大问题,我不能确保我的 Web 项目样例能与您下载的 Struts 一起工作。Struts 仍在不断变化,所以我不得不经常更新我的项目。在本项目中,我使用的是 jakarta-struts-20010105.zip。图 8 显示了此 Web 项目的结构。如果您已安装了 Ant,则运行这个版本将创建一个称为 joinStruts.war 的 war 文件,您随时可以部署这个文件。
图 8. Web 项目的结构
清单 4 显示了转换后的 JSP 文件,称为 joinMVC.jsp 。这个文件从最初的 50 行变为 19 行,并且现在不含任何 Java 代码。从网页设计人员的角度来看,这是个巨大的改进。
清单 4. joinMVC.jsp -- 再访简单的 JSP| <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %> <%@ taglib uri="/WEB-INF/struts-form.tld" prefix="form" %> <html> <head> <title><struts:message key="join.title"/></title> </head> <body bgcolor="white"> <form:errors/> <form:form action="join.do" focus="email" > </body> |
网页的变化
下面是使用 Struts 标记库之后所发生变化的列表:
- Import
用于 Java 代码的 <%@page import? 已被替换为用于 Struts 标记库的 <%@ taglib uri? 。<%@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %>
- 文本
资源属性文件包含 join.title 的文本。在本例中,ApplicationResources 属性文件包含这个名值对。这使字符串更易于查看和国际化。<struts:message key="join.title"/>
- 错误
ActionServlet 或 ActionForm 构建要显示的错误消息。这些错误消息也可以包含在属性文件中。ApplicationResources 也提供了一种格式化错误的方法,即设置 error.header 和 error.footer 。<form:errors/>
- HTML 表单
<form:form action="join.do" focus="email" > - JSP <form> 标记和属性替代了 HTML <form> 标记和属性。 <form action="join.jsp" name="join"> 已更改为 <form:form action="join.do" focus="email" > 。
- HTML <input> 标记已替换为 <form:text/> 。
- HTML <submit> 标记已替换为 <form:submit/> 。
模型 -- 会话状态
JoinForm 扩展了 ActionForm 并包含表单数据。本例中的表单数据只有电子邮件地址。我已为电子邮件地址添加了一个写方法和读方法,以供框架访问。为了便于说明,我重写了 validate() 方法,并使用了 Struts 的跟踪功能。Struts 将创建 JoinForm 并设置状态信息。
模型 -- 业务逻辑
如前所述, Action 是控制器和实际业务对象之间的接口。 JoinAction 包装了对 business.jar 的调用,这些调用最初在 join.jsp 文件中。 JoinAction 的 perform() 方法在清单 5 中列表。
| public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 抽取我们将会用到的属性和参数 JoinForm joinForm = (JoinForm) form; String email = joinForm.getEmail(); ActionErrors errors = new ActionErrors(); // 存储输入.... // 将错误回显给用户 // 如需任何消息,请将指定的错误消息键保存到 // 返回到初始表单 // 将控制权转交给 Action.xml 中指定的 'success' URI |
注: perform() 返回一个称为 ActionForward 的类,该类通知控制器下一步该执行什么操作。在本例中,我使用从控制器传入的映射来决定下一步的操作。
(未完待续)








