Skip to end of metadata
Go to start of metadata

这个 Struts 2 架构图描述了框架的架构。

在 Struts 2 的架构图中,初始的请求进入 Servlet 容器(例如 Jetty 或者 Resin)来进行标准的过滤链。这个过滤链包括 ActionContextCleanUp 过滤器,这个过滤器是可选的,这个过滤器被用来整合 SiteMesh Plugin 插件技术。随后 FilterDispatcher 被调用,这个使用 ActionMapper 来确定请求应该进入任何 action。

如果 ActionMapper 确定需要进行 Action 操作, FilterDispatcher 调用 ActionProxy。ActionProxy 会查看框架 Configuration Files 管理器(从 struts.xml 中初始化而来)。随后 ActionProxy 会创建一个 ActionInvocation实例。ActionInvocation 实例使用命名模式来调用,如果在前面有设置拦截器,那么在这里会对拦截器进行调用,在高级模式下也会实现对自己进行调用。在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

一旦 Action 返回结果,ActionInvocation 负责在 struts.xml 中查找结果处理的代码。结果将会被使用 JSP 或者 FreeMarker 的模板解释执行。在模板被解释执行的时候可以使用框架提供的 Struts Tags。其他的一些组件将会与 ActionMapper 同时工作来对 URL 进行更近一步的处理。

上面结构图中的所有对象(Actions, Results, Interceptors, and so forth)都是通过 ObjectFactory创建的。ObjectFactory 是可以替换的。当已知的对象在框架内创建的时候,我们可以提供自己的 ObjectFactory。Spring 提供的 Spring Plugin 是一个更加常用的方式。

拦截器被再次执行,这里是反向执行。最后返回通过 web.xml 中配置的过滤器,如果 ActionContextCleanUp 过滤器出现,那么 FilterDispatcher 将不会清理 ThreadLocal ActionContext,如果 ActionContextCleanUp 不出现,那么 FilterDispatcher  将会清理所有的 ThreadLocal 。


  • No labels