网上关于struts的介绍还少啊?
你先看看,
有什么不懂或者不清楚的再问。
你这么大的题目放在这里
没有多少人愿意来自喜回答的。

解决方案 »

  1.   

    实现MVC
    目前很流行
    参考:
    http://www-900.ibm.com/developerWorks/cn/java/j-strutscol/
    http://jakarta.apache.org/struts/api/
      

  2.   

    Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。
    采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。
    Struts有如下的主要功能:
    1. 包含一个controller servlet,能将用户的请求发送到相应的Action对象。
    2. JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。
    3. 提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。
    下载地址:http://jakarta.apache.org/struts
    JSP Framework - Struts介绍 
    Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能: 1. 包含一个controller servlet,能将用户的请求发送到相应的Action对象。 2. JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 3. 提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。 Struts是Jakarta项目的一部分,主页在http://jakarta.apache.org/struts. Version 0.5的下载地址:http://jakarta.apache.org/builds/jakarta-struts/release/v0.5 
    6.1 1、什么是MVC模式。 
    MVC(Model/View/Controller)模式是国外用得比较多的一种设计模式,好象最早是在Smaltalk中出现。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。 6.2 2、是否所有JSP应用都该采用MVC模式? 
    不一定所有的JSP应用都该采用MVC模式。但对于大型应用来说,我认为还是该采用MVC模式。不使用MVC模式,用户界面界面设计往往将这些对象混在一起,而MVC则将它们分离以提高灵活性和复用性。 6.3 3、Struts中能做XML吗,与Cocoon相比有何优点? 
    Struts把主要精力放在JSP上了。Cocoon才是专业级的XML Framework。 Struts的安装 
    7.1 安装Struts需要的软件 Java Development Kit - 你需要download和install 1.2(或之后)版本的JDK。下载地址:http://java.sun.com/j2se
    Servlet Container - 通常的选择是下载Tomcat(至少是3.1版,推荐使用3.2版)。下载地址:http://jakarta.apache.org/tomcat
    Ant Build System - 如果你通过Struts源码发布包安装,你必须下载1.1或之后版本的ant build system。在你通过Struts来开发你自己的Web应用程序是,我也推荐使用ant来build你的应用。下载地址:http://jakarta.apache.org/ant
    Servlet API Classes - 为了编译Structs自己,或应用程序使用Struts,你需要一个包含Servlet和JSP API对象的servlet.jar包。大多数Servlet container(例如Tomcat)已经自带了这个文件。否则,你必需下载:http://jakarta.apache.org/builds/jakarta-servletapi
    XML Parser - Structs需要一个与Java API for XML Parsing(JAXP)规格兼容的XML处理器。我推荐使用Xerces。下载地址:http://xml.apache.org/xerces-j
    Xalan XSLT Processor - 如果你通过Structs源码发布版来构造你的Structs系统,你必须下载和安装1_2_D01或之后版本的Xalan XSLT处理器(Xerces中已自带Xalan)。这个处理器用于将基于XML的Structs文档转换为Html文档。7.2 通过源码构造Structs 1.下载Structs的源码发布包。
    2.设置ANT_HOME环境变量,指向你的Ant目录。
    3.设置JAVA_HOME环境变量,指向你的JDK目录。
    4.设置SERVLETAPI_HOME环境变量,指向你的Servlet API目录(如果你的CLASSPATH已经包含了servlet.jar,就不需要指定该目录)
    5.将Structs的源码发布包进行解包。
    6.进入Structs目录,运行以下命令:
    ./build.sh dist
    该命令将创建Struts的二进制发布包,目录在../dist/structs(相对于你的编译目录)。7.3 通过Struts的二进制发布包安装Structs 1.下载Struts的二进制发布版。
    2.将Struts的二进制发布版进行解包。(如果你是通过Struts源码构造Struts,build的结果就已经是已解包的Struts)。解包后的Struts包含以下内容:
    lib/struts.jar - 这个文件包含了Struts的所有Java对象。你需要把它拷贝到你的Web应用的WEB-INF/lib目录。
    lib/structs.tld - 这是一个"tag library descriptor"文件,它描述了Struts库的自由tag。需要将它拷贝到你的Web应用的WEB-INF目录。
    webapps/struts-documentation.war - 这是一个"web application archive"文件,包含了所有的Struts文档。你可以将它安装到支持Servlet API 2.2或之后版本的servlet container(推荐使用tomcat)中。
    webapps/struts-example.war - 这是一个web应用实例,它广泛地演示了Struts的许多功能。你可以将它安装到兼容Servlet2.2或之后版本以及JSP1.1或之后版本规范的servlet容器中(推荐使用tomcat)。
    webapps/struts-test.war - 这个web应用包含了Struts支持的许多tag的测试网页,可以作为使用Struts tag的例子。可通过以下的步骤在你自己的应用程序中使用Struts:
    1.将Struts目录的lib/struts.jar拷贝到web应用的WEB-INF/lib目录。
    2.将Struts目录的lib/struts*.tld拷贝到web应用的WEB-INF目录。
    3.修改Web应用目录的WEB-INF/web.xml文件,增加一个<servlet>元素来定义controller servlet,增加一个<servlet-mapping>元素来建立URI请求与servlet的对应关系。可以参照Struts例子中的WEB-INF/web.xml文件来了解详细的语法要求。
    4.修改Web应用目录的WEB-INF/web.xml文件,使之包含以下的tag库定义:
    <taglib>
    <taglib-uri>/WEB-INF/struts.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>
    5.创建一个WEB-INF/action.xml文件来定义你的web应用的action映射关系。可以参照Struts例子中的action.xml文件来了解详细的语法要求。
    6.在使用Struts tag库的JSP网页中加入以下tag库定义:
    <@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %>
    <@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    7.最后,在编译你的web应用的java程序时,不要忘了在CLASSPATH中包含struts.jar文件哟。
      

  3.   

    预备知识     在开始学习Struts以前,以下的知识点,需要有所了解:模型-视图-控制的软件构架模式,JSP/Servlet的web层应用,J2EE体系结构。如果对客户标签类(Customer TagLib)有所了解也许更容易理解Struts本身的TagLib。 概述    本文主要从概念上讲解什么是struts framework,它的框架结构,组件结构,以及简单的配置讲解。对于其应用请参考后面的“struts安装及应用”和“struts实用案例分析”。    文章的包括了如下四大部分:一、             Framework的概念和体系简介(Framework Conception and Architecture)二、             Struts的概念和体系结构(Struts Conception and Architecture)三、             Struts的工作原理和组件(Struts Componennts)四、             Struts配置文件简介(Struts Deployment Description) 一、             Framework概念一直以来我们都说struts是一个web framework。那么让我么先来看看什么是Framework。(我想用“框架”一词来翻译framework,可是后来越来越发现不太理想和完备,所以就直接用Framework一词)Framework概念并不是很新了,伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上,而非繁杂的代码工程。于是人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。这也就是我们所说的Framework。    Framework的体系提供了一套明确机制,从而让开发人员很容易的扩展和控制整个framework开发上的结构。 通常,framework的结构中都有一个“命令和控制”组件("command and control" component)——Framework Factory and Manager。图片(2):Framework体系       通过基于请求响应(Request-Response)模式的应用framework,基本上有如下几个表现逻辑结构组成。       (1)控制器(Controller)——控制整个framework中各个组件的协调工作。       (2)业务逻辑层(Business Logic)——这是framework所希望解决问题的关键。当然对framwork本身来说,这里仅仅只是概念和几个提够服务的基础组件,真正的实现与客户的业务逻辑接轨,还需要开发人员在framework上再次扩展。       (3)数据逻辑层(Data Logic)——绝大应用系统都需要涉及到数据交互,这一层次主要包括了数据逻辑和数据访问接口。对于数据逻辑来说,如果你了解数据建模(Data Modeling)可能就很容易理解。         下面就进入我们的正题——Struts的结构 二、        Struts的概念和体系结构Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。 2.1 Struts的与Web App的关系 
    既然struts叫做web framework,那么其肯定主要基于web层的应用系统开发。按照J2EE Architecture的标准,struts应当和jsp/servlet一样,存在于web container一层。如图片(3)所显示图片(3): Struts与WebApp的关系 2.2 Struts的体系结构    我们说struts framework是MVC 模式的体现,下面我们就从分别从模型、视图、控制来看看struts的体系结构(Architecture)。图片(4)显示了struts framework的体系结构响应客户请求时候,各个部分工作的原理。
    图片(4):Struts体系结构     2.2.1从视图角度(View)    主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags 这几个Taglib。有关它们的详细资料请参考struts用户手册2.2.2从模型角度(Model)模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作     2.2.3 从控制器角度(Controller)    在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。 2.3 Struts的基本组件包整个struts大约有15包,近200个类所组成,而且数量还在不断的扩展。在此我们不能一一介绍,只能列举几个主要的简要的介绍一下。下表说明了目前struts api中基本的几个组件包,包括action,actions,config,util,taglib,validator。图片(5)则显现了这几个组件包之间的关系。其中action是整个struts framework的核心org.apache.struts.action
     
    基本上,控制整个struts framework的运行的核心类、组件都在这个包中,比如我们上面提到的控制器ActionServlet。已经Action,ActionForm,ActionMapping等等。struts1.1比1.0多了 DynaActionForm 类。增加了动态扩展生成FormBean功能
     
    org.apache.struts.actions
     
    这个包是主要作用是提供客户的http请求和业务逻辑处理之间的特定适配器转换功能,而1.0版本中的部分动态增删FromBean的类,也在struts1.1中被Action包的DynaActionForm组件所取代
     
    org.apache.struts.config
     
    提供对配置文件struts-config.xml元素的映射。这也是sturts1.1中新增的功能
     
    org.apache.struts.util
     
    Strtuts为了更好支持web application的应用,体统了一个些常用服务的支持,比如Connection Pool和Message Source。详细信息请参考http://jakarta.apache.org/struts/api/org/apache/struts/util/package-summary.html
     
    org.apache.struts.taglib
     
    这不是一个包,而是是一个客户标签类的集合。下面包括Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个用于构建用户界面的标签类。
     
    org.apache.struts.validator
     
    Struts1.1 framework中增加了validator framework,用于动态的配置from表单的验证。详细信息请参阅 http://home.earthlink.net/~dwinterfeldt/图片(5): Struts的基本组件关系图
      

  4.   

    三、Struts framework的工作原理和组件对于Struts 如何控制、处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明。这几个组件就是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean。3.1 Struts ActionServlet    ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts framework中扮演的角色失控制器,参看上面的“Struts体系图”。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。(在Struts1.1中新增了org.apache.struts.action.Action.RequestProcessor类,将处理请求的功能从控制器功能中分离。    按照Servelt的标准,所有得Servlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述,有关配置信息,后面将会介绍。    当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己的Action实例。 3.2 Struts Action Classes     一个Action 类的角色,就像客户请求动作和业务逻辑处理之间的一个适配器(Adaptor),其功能就是将请求与业务逻辑分开。这样的分离,使得客户请求和Action类之间可以有多个点对点的映射。而且Action类通常还提供了其它的辅助功能,比如:认证(authorization)、日志(logging)和数据验证(validation)。public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.ServletRequest request,
                                 javax.servlet.ServletResponse response)
                          throws java.io.IOException,javax.servlet.ServletException
     
          Action最为常用的是execute()方法。(注意,以前的perform方法在struts1.1中已经不再支持),还有一个execute()方法,请参考apidoc,在此不在说明。    当Controller收到客户的请求的时候,在将请求转移到一个Action实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的execute()方法。Struts Framework为应用系统中的每一个Action类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action 类运行在一个多线程的环境中。下图显示了一个execute()方法如何被访问:
    图片(6): Action实例的execute()方法    注意,客户自己继承的Action子类,必须重写execute()方法,因为Action类在默认情况下是返回null的。  3.3 Struts Action Mapping上面讲到了一个客户请求是如何被控制器转发和处理的,但是,控制器如何知道什么样的信息转发到什么样的Action类呢?这就需要一些与动作和请求信息相对应的映射配置说明。在struts 中,这些配置映射信息是存储在特定的XML文件(比如struts-config.xml)。  <action-mappings>  <action  path="/logonAction"           type="com.test.LogonAction"           name="LogonForm"           scope="request"           input="logoncheck.jsp"validate="false"><forward name="welcome" path="/welcome.jsp"/><forward name="failure" path="/logon_failure.jsp "/></action></action-mappings> 
     这些配置信息在系统启动的时候被读入内存,供struts framework在运行期间使用。在内存中,每一个<action>元素都与org.apache.struts.action.ActionMapping类的一个实例对应。下表就显示了一个登陆的配置映射。 <form-beans>  <form-bean  name="LoginForm"type="com.test.LoginForm"/></form-beans>
     上面的配置表示:当可以通过/logonAction.do(此处假设配置的控制器映射为*.do)提交请求信息的时候,控制器将信息委托com.test.LogonAction处理。调用LogonAction实例的execute()方法。同时将Mapping实例和所对应的LogonForm Bean信息传入。其中name=LogonForm,使用的form-bean元素所声明的ActionForm Bean。有关form-bean的申明如下显示。 元素<forward>则表示了当Action实例的execute()方法运行完毕或,控制器根据Mapping可将响应信息转到适当的地方。如上面现实,如果客户登陆成功,则调用welcome forward,将成功信息返回到/welcome.jsp页面。在你的execute()方法的结尾可以使用下面的实例代码而返回welcome forward。当然你的welcome forward必须在action元素属性中定义,正如上面所声明的那样。return (mapping.findForward("welcome"));
     在此稍稍说一下有关global-forwards的概念。其在配置文件中描述了整个应用系统可以使用的ActionForward,而不是仅仅是一个特定的Action。  <global-forwards>    <forward name="logout" path="/logout.do"/><forward name="error"  path="/error.jsp"/>  </global-forwards>
      3.4 Struts ActionForm Bean在上面讲解ActionServlet,Action Classes和Action Mapping的时候,我们都提到了ActionForm Bean的概念。一个应用系统的消息转移(或者说状态转移)的非持久性数据存储,是由ActionForm Bean的负责保持的。ActionForm的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。Action负责对系统数据状态的保持,而Action则负责根据业务逻辑的需要,对数据状态进行修改,在改变系统状态后,ActionForm则自动的回写新的数据状态并保持。注意:在struts1.1中,ActionForm的校验功能,逐渐被剥离出来(当然依然可以使用)。使用了validator framework对整个应用系统的表单数据验证进行统一管理。相信信息请参考:http://home.earthlink.net/~dwinterfeldt在ActionForm的使用中,Struts提倡使用到值对象(Value Object)。这样将客户或开发人员,对数据状态与对象状态能够更加清晰的理解和使用。对于每一个客户请求,Struts framework在处理ActionForm的时候,一般需要经历如下几个步骤:(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射    (2)根据name属性,查找form bean的配置信息    (3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。    (4)假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。    (5)否则,就重新构建一个form bean的实例    (6)form bean的reset()方法备调用    (7)调用对应的setter方法,对状态属性赋值    (8)如果validatede的属性北设置为true,那么就调用form bean的validate()方法。注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖。如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。
           有必要提一下有关org.apache.struts.action.DynaActionForm。这是struts1.1新增的特性。其继承自ActionForm,在struts早先版本中,我们必须人为的构造特定的ActionFrom子类,但是利用DynaActionForm,可以依据属性集而动态的创建from bean。有关其详细资料,请参考···
      

  5.   

    三、Struts framework的工作原理和组件对于Struts 如何控制、处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明。这几个组件就是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean。3.1 Struts ActionServlet    ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts framework中扮演的角色失控制器,参看上面的“Struts体系图”。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。(在Struts1.1中新增了org.apache.struts.action.Action.RequestProcessor类,将处理请求的功能从控制器功能中分离。    按照Servelt的标准,所有得Servlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述,有关配置信息,后面将会介绍。    当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己的Action实例。 3.2 Struts Action Classes     一个Action 类的角色,就像客户请求动作和业务逻辑处理之间的一个适配器(Adaptor),其功能就是将请求与业务逻辑分开。这样的分离,使得客户请求和Action类之间可以有多个点对点的映射。而且Action类通常还提供了其它的辅助功能,比如:认证(authorization)、日志(logging)和数据验证(validation)。public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.ServletRequest request,
                                 javax.servlet.ServletResponse response)
                          throws java.io.IOException,javax.servlet.ServletException
     
          Action最为常用的是execute()方法。(注意,以前的perform方法在struts1.1中已经不再支持),还有一个execute()方法,请参考apidoc,在此不在说明。    当Controller收到客户的请求的时候,在将请求转移到一个Action实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action实例的execute()方法。Struts Framework为应用系统中的每一个Action类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action 类运行在一个多线程的环境中。下图显示了一个execute()方法如何被访问:
    图片(6): Action实例的execute()方法    注意,客户自己继承的Action子类,必须重写execute()方法,因为Action类在默认情况下是返回null的。  3.3 Struts Action Mapping上面讲到了一个客户请求是如何被控制器转发和处理的,但是,控制器如何知道什么样的信息转发到什么样的Action类呢?这就需要一些与动作和请求信息相对应的映射配置说明。在struts 中,这些配置映射信息是存储在特定的XML文件(比如struts-config.xml)。  <action-mappings>  <action  path="/logonAction"           type="com.test.LogonAction"           name="LogonForm"           scope="request"           input="logoncheck.jsp"validate="false"><forward name="welcome" path="/welcome.jsp"/><forward name="failure" path="/logon_failure.jsp "/></action></action-mappings> 
     这些配置信息在系统启动的时候被读入内存,供struts framework在运行期间使用。在内存中,每一个<action>元素都与org.apache.struts.action.ActionMapping类的一个实例对应。下表就显示了一个登陆的配置映射。 <form-beans>  <form-bean  name="LoginForm"type="com.test.LoginForm"/></form-beans>
     上面的配置表示:当可以通过/logonAction.do(此处假设配置的控制器映射为*.do)提交请求信息的时候,控制器将信息委托com.test.LogonAction处理。调用LogonAction实例的execute()方法。同时将Mapping实例和所对应的LogonForm Bean信息传入。其中name=LogonForm,使用的form-bean元素所声明的ActionForm Bean。有关form-bean的申明如下显示。 元素<forward>则表示了当Action实例的execute()方法运行完毕或,控制器根据Mapping可将响应信息转到适当的地方。如上面现实,如果客户登陆成功,则调用welcome forward,将成功信息返回到/welcome.jsp页面。在你的execute()方法的结尾可以使用下面的实例代码而返回welcome forward。当然你的welcome forward必须在action元素属性中定义,正如上面所声明的那样。return (mapping.findForward("welcome"));
     在此稍稍说一下有关global-forwards的概念。其在配置文件中描述了整个应用系统可以使用的ActionForward,而不是仅仅是一个特定的Action。  <global-forwards>    <forward name="logout" path="/logout.do"/><forward name="error"  path="/error.jsp"/>  </global-forwards>
      3.4 Struts ActionForm Bean在上面讲解ActionServlet,Action Classes和Action Mapping的时候,我们都提到了ActionForm Bean的概念。一个应用系统的消息转移(或者说状态转移)的非持久性数据存储,是由ActionForm Bean的负责保持的。ActionForm的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。Action负责对系统数据状态的保持,而Action则负责根据业务逻辑的需要,对数据状态进行修改,在改变系统状态后,ActionForm则自动的回写新的数据状态并保持。注意:在struts1.1中,ActionForm的校验功能,逐渐被剥离出来(当然依然可以使用)。使用了validator framework对整个应用系统的表单数据验证进行统一管理。相信信息请参考:http://home.earthlink.net/~dwinterfeldt在ActionForm的使用中,Struts提倡使用到值对象(Value Object)。这样将客户或开发人员,对数据状态与对象状态能够更加清晰的理解和使用。对于每一个客户请求,Struts framework在处理ActionForm的时候,一般需要经历如下几个步骤:(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射    (2)根据name属性,查找form bean的配置信息    (3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。    (4)假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。    (5)否则,就重新构建一个form bean的实例    (6)form bean的reset()方法备调用    (7)调用对应的setter方法,对状态属性赋值    (8)如果validatede的属性北设置为true,那么就调用form bean的validate()方法。注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖。如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。
           有必要提一下有关org.apache.struts.action.DynaActionForm。这是struts1.1新增的特性。其继承自ActionForm,在struts早先版本中,我们必须人为的构造特定的ActionFrom子类,但是利用DynaActionForm,可以依据属性集而动态的创建from bean。有关其详细资料,请参考···