作为先前描述的web.xml 设置的结果,Web 应用程序服务器将请求的一个子集按路径发送至ActionServlet,它通常调用一系列操作和JSP。ActionServlet 的响应是基于配置文件struts-config.xml 的内容的。有关其DTD 文档的描述, 请参考
http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd
一般struts-config(version1.1)包含了如下几个部分:
(1)form-bean
(2)global-forwards
(3)action-mappings
(4)data-sources
我们知道,对于这样的一个请求(例如,表示为“/login.do”),执行下列步骤:
1、寻找操作类对象(继承org. apache.struts.action.Action 的类)
2、ActionServlet 调用操作类对象的执行方法
操作类中的执行方法的特征符为如下所示:
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
映射对象(ActionMapping),它包含指示如何响应方法的每个可能结果的规则(“映射”)
Struts 表单bean(ActionForm),它保存发送至HTML 表单或接收自HTML 表单的数据
请求和响应对象(HttpServletReques/ HttpServletResponse)
3、从执行方法返回ActionForward 对象,用于指导ActionServlet 接着访问哪个操作类或JSP
返回的ActionForward 对象中的信息取决于两个值:
方法的结果(如在“成功”或“故障”等字符串中所述)
映射对象,它包含从Struts 配置文件中读取的信息要弄明白某些运行时关系,要明白struts-config.xml 该文件包括下面的一组条目:
<form-beans>标记标识每个表单bean
<action-mappings>标记包括用于指导应用程序流的信息,每个<action>子标记都使相对URL 与操作类和潜在的后续操作相关。
Struts 配置文件中的一个示例<form-bean>子元素为如下所示:
<form-bean name=“registerForm” type=“strutscommon.RegisterForm”/>
每个<form-bean>子元素都包括下列属性:
name
表单bean 的名称,稍后在配置文件中会用到。ActionServlet 举例说明了该bean(如果需要的话)并在将对bean 的引用存储在请求或会话对象中时将该名称用作键。
type
类的全限定名称,它继承org.apache.struts.action.ActionForm 该类必须在类路径中。接受“Struts 贸易样本”中的注册的表单bean 包括HTML 注册表单中每个字段的getter 和setter 方法。该bean 还包括验证方法,如下节“验证”中所述。
Struts 配置文件中的一个示例<action>元素为如下所示:
<action path=“/register” type=“strutsEGL.RegisterAction” name=“registerForm” input=“/register.jsp” scope=“request” <forward name=“success”path=“/home.do”/> < forward name=“failure”path=“/register.jsp”/> </action>
每个<action>元素都包括下列属性中的某些属性或所有属性:
path
将请求指定为非限定URL,不带文件扩展名(例如,“/register”)请求是根据<action>元素中的其它属性来处理的,并且是用户输入的结果或者是在different<action>元素中标识的转发的结。
type
指定在发出请求时调用其执行方法的操作类的全限定名。该类必须在类路径中。
注:不指定要实例化的类,可以通过使用forward 属性来转发请求,该属性在“Struts 贸易样本”中未使用,并且与后面描述的<forward>子元素不相同。
name
用于保存发送至HTML 表单或接收自HTML 表单的数据表单bean 的名称。
input
指定相对URL(例如,“/register.do”或“/index.jsp”)必须包括后缀,如果表单bean 的验证方法指示发生了输入错误,则会调用URL;有关详细信息,参见下节的“验证”。
scope
指定将对表单bean 的引用存储在哪个作用域中。其值为“会话”(缺省值)或“请求”。
Struts 配置文件中的每个<action>元素还包括子元素<forward>,它指定从方法结果至后续调用的映射。每个<forward>子元素都包括下列属性
name
指定导致在运行时使用当前映射的字符串(例如,“success”),但是只限于以下情况:在type 中引用的操作类的执行方法使用完全相同的字符串来配置返回至ActionServlet 的ActionForward 对象。下面的执行方法不是很重要,但是会导致使用“success”映射:
public ActionForward exectue( ActionMapping mapping, ActoinForm form, HttpServletRequest request, HttpServletResponse response) Throws IOException,ServletException { ActionForward forward=new ActionForward(); Forward=mapping,findForward(“success”); return(forward); }
path
指定非限定URL(例如,“/home.do” 或“/index.jsp”)必须包括文件扩展名,仅当使用当前映射时才会调用该URL,转发操作类是根据different<action>元素中的属性来处理的,尤其是,在其path 属性标识相同URL 的<action>元素中。有必要提一下的是,在struts1.1 中,提出了对Multiple Application Support。在struts 的早先版本中,只有一个struts 配置文件,一般叫struts-config.xml。但是,对于越来越复杂的应用系统的发展,只有一个地方存放这个一个文件,对大型项目来说,使用和修改这个配置文件,使其成为了一个应用的瓶颈问题。在struts1.1 中,你可以定义多了配置文件协同工作。
注:当用户或ActionServlet 调用JSP 时,请求是由Web 应用程序服务器直接处理的不会
受到ActionServlet 的干预。