当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求。这里某些步骤只在Struts 1.1 应用才有:
处理多部分请求. 如果请求是个多部分(multipart)请求 (比如,一个表单加上一个MIME
附件), Servlet 用一个特殊的句柄包装这个请求,避免处理错误。
处理路径 ActionServlet 首先检查这个请求路径是否是一个应用模块。如果是,相应模
块的配置被选中。[Struts 1.1]
处理场所.(local) 默认下,ActionServlet 会检查是否有一个标准的locale 对象在用户会
话的上下文当中。如果没有, ActionServlet将放入一个。这个对象将为每个用户提供
本地化表现。
处理内容和缓存 默认的MIME 类型和可选的请求头将加在响应之上。
处理映射( Mapping) ActionServlet检查ActionMapping,是否有注册的路径符合正处
理的请求。如果没找到,ActionServlet 转发到默认(或 “unknown”) Action(如果设定有
默认或未知Action),否则,产生一个 “bad request” 错。如果找到相关映射,将被放入
请求之中,供后面引用。
处理角色. ActionServlet 检查是否用户被授权可以访问action. [Struts 1.1]。
处理ActionForm. ActionServlet 检查是否mapping 中指定了一个ActionForm.。如果是,
servlet 检查是否已经有一个存在于特定的范围之内(默认是会话)。如果不存在,
ActionServlet 创建一个。
处理组装. ActionForm的 reset 方法被调用,然后通过反射机制被自动组装。匹配
ActionForm属性的参数将被使用。其他参数和属性被忽略。
处理验证 ActionForm的 validate 方法被调用。如果方法返回false, 控制传递给
ActionMapping的input 属性标明的路径, Action 未被处理。
处理转发和包含 如果ActionMapping 标明forward 或include 属性,控制被传递给其
他资源。否则ActionServlet 将请求委托给一个Action 对象。
处理 Action. 如果mapping 标明一个Action 类型, ActionServlet检查是否已经有一个被
实例化了。如果没发现, Action 对象将被实例化。每个类只能有一个Action 对象
(Singleton 模式),它通过多线程处理所有对它的请求。Servlet调用 Action的 perform
或 execute 方法,传递请求, 响应, mapping, 以及form bean。
Action 执行要求的行为,可以包括:
访问数据系统,比如JDBC 数据库
在请求中创建被视图使用的对象
如果需要,在会话中创建对象
根据需要更新会话对象,比如用户的场所
执行需要的业务功能
处理以外和其他错误条件
发送一个直接发送一个响应,或者返回一个ActionForward 给servlet
这里某些行为,象访问数据库,通常由Action 调用的业务对象来处理( Business Delegate
模式)。 Action 处理一些web 特定的任务,可以放在业务对象中的代码都应该放入业务对
象。Action 是一个控制器类,不应该用来处理业务的核心逻辑。
通常, 动态数据在JavaBean 中传递到请求上下文中的页面。这就是熟知的视图助手(View
Helper )模式