一.运行流程图
二.相关的几个API
- ActionMapping:Simple class that holds the action mapping information used toinvoke a Struts action. The name and namespace are required
- ActionMapper:When given an HttpServletRequest, the ActionMapper may return nullif no action invocation request matches, or it may return an ActionMapping thatdescribes an action invocation for the framework to try
- ActionProxy:ActionProxy is an extra layer between XWork and the action so thatdifferent proxies are possible.
- ActionInvocation:AnActionInvocation represents the execution state of an Action. It holds theInterceptors and the Action instance. By repeated re-entrant execution of theinvoke() method, initially by the ActionProxy, then by the Interceptors, theInterceptors are all executed, and then the Action and the Result.
三. Struts2 运行流程分析
- 请求发送给StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter 询问 ActionMapper:该请求是否是一个 Struts2 请求,如果该请求是一个struts2请求,则返回一个非空的ActionMappping对象;如果不是一个struts2请求,则直接执行过。
- 若 ActionMapper 认为该请求是一个 Struts2 请求,则 StrutsPrepareAndExecuteFilter 把请求的处理交给 ActionProxy
- ActionProxy 通过 Configuration Manager 询问框架的配置文件,确定需要调用的Action 类及 Action 方法
- ActionProxy 创建一个 ActionInvocation 的实例,并进行初始化
- ActionInvocation 实例在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
- Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。调用结果的 execute 方法,渲染结果。在渲染的过程中可以使用Struts2 框架中的标签。
- 执行各个拦截器 invocation.invoke() 之后的代码
- 把结果发送到客户端