UML软件工程组织

一个掌握Struts企业级Web开发框架的实例下
作者:俞良松 选择自 开放系统世界
 构造和运行Struts应用

  要构造和运行本文的示例应用,你必须了解如何使用Jakarta的Ant工具。如果你还不了解Ant,现在该是学习它的时候了!赶紧到网站下载Ant,通常要解开压缩,设置一下ANT_HOME环境变量,然后把Ant加入到执行路径就可以了。

本文示例的build.xml需要稍微定制一下,修改指示本地Tomcat位置的配置,使它能够找到在Tomcat下编译所必需的类。另外,你还要有一份Struts的JAR。你可以去下载最新的版本。

  struts-config.xml文件是粘合Struts应用各个部分的配置文件。在部署完成后的Web应用中,struts-config.xml在Web-INF目录下。你应该修改一下数据源配置,使之符合你当前使用的DBMS环境。数据模型和SQL模式文件在下载包的DBMS目录下,SQL文件针对PostgreSQL DBMS编写。

  示例中src/com/strutsdemo/ShowCategoriesAction. java是一个简单的分配器。ActionForward()是请求分配方法,从ActionServlet调用。该方法可以完成主要的工作,例如分析请求参数、执行计算,以及构造出View使用的JavaBean。另外,该方法还要根据处理结果,确定下一个要显示的是什么页面:可能是预设的多个页面之一,也可能是一个错误信息页面。

  ActionForward()的请求分配过程

  当然,最复杂的处理过程与表单有关。ActionForward方法的请求分配过程是:

  1. ActionServlet,对请求进行解码。由于为动作指定了Form Bean,ActionServlet处理Form Bean(参见下面有关“ActionServlet如何使用Form Bean”的说明)。然后,请求传递给了EditCategoryAction。

  2. EditCategoryAction;准备处理View,或者从数据库装入现有数据,或者创建新的数据项。动作处理器利用Mapping.findForward把控制传递给EditCategory.jsp。

  3. DitCategory.jsp,显示出Form Bean,允许用户编辑数据。用户提交数据后,控制转到ActionServlet。

  4. ActionServlet,对请求进行解码。这一次,Form Bean将从View的数据初始化,因为它是一个Struts的JSP表单页面。由于有Form Bean,且struts-config.xml中指定了“validate=‘true’”,名为“catForm”的Form Bean的validate()方法被调用。如果用户提交的数据未能通过合法性验证,则控制转到EditCategory1.jsp。

  5. EditCategory1.jsp,它只是EditCategory.jsp略加修改后的一个版本。如果有必要,原始编辑页面和带有错误提示的编辑页面可以使用同一个View。Struts的JSP标记能够帮助我们轻松地办到这一点。该页面提交给/saveCategory.do。这样,用户就在这几个页面之间绕圈子,直到他跳转到一个与编辑操作无关的页面,或者他提交的数据通过了合法性验证。

  6. 如果Form Bean合法性验证通过,ActionServlet把请求(包括Form Bean)传递给SaveCategoryAction。在这个例子中,“save”可能意味着创建操作,也可能意味着更新操作,具体由URL提供的选项决定。写入数据的操作通过调用Form Bean的store()方法完成。注意:实际的应用应当使用某种类型的事务管理机制(或使用EJB,因为EJB有内建的事务管理机制),以避免并发访问带来的问题。

  ActionServlet如何使用Form Bean

  涉及Form Bean的ActionServlet处理过程包含六个步骤:

  1. 找到或创建Form Bean;

  2. 据从HTTP请求传入的相应数据,更新Form Bean的各个属性;

  3. 检查用户是否点击了“取消”按钮。如是,跳过步骤4和步骤5;

  4. 验证Form Bean数据的合法性;

  5. 如数据未能通过合法性验证,发送“input=”参数中指定的View;

  6. 否则,把Form Bean传递给动作处理器。
 

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