ActionServlet 把全部提交的请求都被控制器委托到RequestProcessor 对象。RequestProcessor 使用struts-config.xml 文件检查请求URI 找到动作Action 标示符。一个Action 类的角色,就像客户请求动作和业务逻辑处理之间的一个适配器(Adaptor),其功能就是将请求与业务逻辑分开。这样的分离,使得客户请求和Action 类之间可以有多个点对点的映射。而且Action 类通常还提供了其它的辅助功能,比如:认证(authorization)、日志(logging)和数据验证(validation)。
<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>
Action 最为常用的是execute()方法。(注意,以前的perform 方法在struts1.1 中已经不再支持),还有一个execute()方法,请参考apidoc,在此不在说明。当Controller 收到客户的请求的时候,在将请求转移到一个Action 实例时,如果这个实例不存在,控制器会首先创建,然后会调用这个Action 实例的execute()方法。Struts Framework 为应用系统中的每一个Action 类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action 类运行在一个多线程的环境中。下图显示了一个execute()方法如何被访问:
Action 实例的execute()方法
注意,客户自己继承的Action 子类,必须重写execute()方法,因为Action 类在默认情况下是返回null 的。