【面试题】struts2的工作流程


struts2框架本身大致可以分为3个部分:

核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是struts2框架的基础:

核心控制器包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的,用户在开发Action和业务逻辑 组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。

struts2的工作流程相对于struts1要简单,与webwork框架基本相同,所以说struts2是webwork的升级版本。基本简要流程如下:

客户端初始化一个指向servle容器的请求,这个请求经过一系列的过滤器Filter,这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于struts2和其他框架的集成很有帮助,如:SiteMesh Plugin,紧接着FilterDispatcher被调用。

FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxyActionProxy 通过 Configuration Manager 询问框架的配置文件,找到需要调用的 Action 类,ActionProxy 创建一个 ActionInvocation 的实例。ActionInvocation 实例使用命名模式来调用,在调用 Action 的过程前后,涉及到相关拦截器(Intercepter)的调用。一旦 Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个 Action 链)一个需要被表示的JSP或者 FreeMarker 的模版。在表示的过程中可以使用 Struts2 框架中继承的标签。在这个过程中需要涉及到 ActionMapper响应的返回是通过我们在 web.xml 中配置的过滤器如果ActionContextCleanUp 是当前使用的,则 FilterDispatecher 将不会清理 sreadlocal ActionContext;如果 ActionContextCleanUp 不使用,则将会去清理 sreadlocals。