通过学习《第一个Struts2程序》教程,相信读者对 Struts2 框架的使用已经有了一个初步的了解。为了帮助读者能够更好地学习 Struts2 框架,下面通过图例深入分析一下 Struts2 的基本执行流程,如图 1 所示。
图 1 Struts2 的执行流程
从图 1 所示的流程图中可以看出,一个请求在 Struts2 框架中的处理大概可以分为以下几个步骤。
1)首先客户端浏览器发送一个请求(HttpServletRequest)。
2)接着程序会调用 StrutsPrepareAndExecuteFilter,然后询问 ActionMapper 这个请求是否需要调用某个 Action。
3)如果 ActionMapper 决定需要调用某个 Action,StrutsPrepareAndExecuteFilter 会把请求的处理交给 ActionProxy。
4)ActionProxy 通过配置管理器(Configuration Manager)从配置文件(struts.xml)中读取框架的配置信息,从而找到需要调用的 Action 类。
5)ActionProxy 会创建一个 ActionInvocation 的实例。
6)ActionInvocation 使用命名模式调用 Action,在调用 Action 前,会依次调用所有配置的拦截器(Intercepter1、Intercepter2……)。
7)一旦 Action 执行完,则返回结果字符串,ActionInvocation 就会负责查找结果字符串对应的 Result,然后执行这个 Result。通常情况下 Result 会调用一些模板(JSP 等)呈现页面。
8)产生的 Result 信息返回给 ActionInvocation,在此过程中拦截器会被再次执行(顺序与 Action 执行之前相反)。
9)最后产生一个 HttpServletResponse 的响应行为,通过 StrutsPrepareAndExecuteFilter 反馈给客户端。