Struts 2设计者指南01:全局图像

文章翻译自Struts 2官方文档,初次翻译,请指正。

下面的图片描述了框架的体系结构。



在上图中,一个初始请求(request)到达Servlet容器(例如Jetty或者Resin),这个请求通过一个标准的过滤器链。过滤器链包含(可选的)ActionContextCleanUp过滤器,这个过滤器在使用集成技术,例如SiteMesh Plugin,时非常有用。下一步,必须的FilterDispatcher被调用,FilterDispatcher反过来查阅ActionMapper,从而决定这个请求是否需要调用action。

如果ActionMapper确定需要调用action,FilterDispatcher就把控制权委托给ActionProxy。ActionProxy查阅框架的Configuration Files管理器(从struts.xml文件初始化)。下一步,ActionProxy创建一个ActionInvocation,ActionInvocation负责命令模式(command pattern)的实现。这包含在调用Action本身前调用任意的Interceptors(the before clause)。

一旦Action返回,ActionInvocation负责在struts.xml文件中查找与Action result code相关的合适的result。然后执行result,通常(并不总是,例如在Action Chaining的情形)包含渲染一个用JSP或者FreeMarker编写的的模板文件,模板文件可以使用框架提供的Struts Tags标签。这些组件的一部分和ActionMapper一起为额外的请求渲染合适的URL。

ObjectFactory创建体系结构中的所有对象(Actions,ResultsInterceptors等等)。ObjectFactory是可插入的。我们可以因为任何理由而提供我们自己的ObjectFactory,这需要知道框架在什么时候创建对象。一个用Spring实现的流行的ObjectFactory是由Spring Plugin提供的。

拦截器再次被执行(以相反的顺序,成为the after clause)。最后,响应(response)通过在web.xml配置的过滤器返回。如果ActionContextCleanUp过滤器存在,FilterDispatcher将不会清理ThreadLocal ActionContext。如果ActionContextCleanUp过滤器不存在,FilterDispatcher将清理ThreadLocals。

猜你喜欢

转载自a2429854489.iteye.com/blog/2284930
今日推荐