当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 是一个控制器类,不应该用来处理业务的核心逻辑。
Action返回ActionForward
Action 完成后,它返回一个 ActionForward。如果 ActionForward 为 null, ActionServlet
假定响应产生了,但不做任何事情。否则, ActionServlet 读入 ActionForward ,重定向
或者转发请求到相应的资源。
如果请求是另一个 Action URI, 容器将请求返回给 ActionServlet。否则容器发送请求到其
它 servlet 或service。
如果 ActionForward 设为重定向(redirect), 请求被发送回客户端,并提示重新提交一个
新请求到特定的地址。
Tags: 流程 java struts
原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/
本文链接地址:http://www.busfly.net/csdn/post/Structs-Process.html
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~