WebWork的架构最好用一张图来表示:

如此图所示,一个初始的请求被发送到Servlet容器(如Tomcat或Resin),这个请求经过一个标准的Filter链,其中包括(可选的)ActionContextCleanUp Filter,如果你要在应用程序中整合其他的技术如SiteMesh,就需要使用这个这个Filter.然后请求经过 FilterDispatcher(译者注:WW2.2之前处理这个请求的是ServletDispatcher),在它里面ActionMapper会判断这个请求是否需要调用Action.
如果ActionMapper决定应该调用一个Action,FilterDispatcher就把请求委托给ActionProxy,ActionProxy通过WebWork的配置文件管理器读取xwork.xml文件里的配置信息.然后创建一个实现了命令模式的ActionInvocation.这一过程包括在调用action本身之前调用所有的interceptor(before()方法)
一旦action方法返回,ActionInvocation就要查找xwork.xml文件中这个action的结果码(action result code)(译者注:一个String如success,input)所对应的result,然后执行这个result.通常情况下result会调用JSP或FreeMarker模版来呈现页面(但不总是这样,例如result也可以是一个Action链).当呈现页面时,模版可以使用WebWork提供的一些标签.其中一些组件可以和ActionMapper一起工作来为后面的请求呈现恰当的URL.
 |
在这个架构中的所有对象(action,result,interceptor等等)都是通过ObjectFactory创建的.ObjectFactory是可插入,因此可以和Spring,Pico这样的框架整合的很好.如果需要,Webwork中的对象也可以由你自己提供的ObjectFactory来创建. |
最后interceptor被再次执行(顺序和开始相反,调用after方法),然后最终请求被返回给web.xml中配置的其他Filter.如果已经设置了ActionContextCleanUp Filter,那么FilterDispatcher就不会清理ThreadLocal中的ActionContext信息.如果没有设置ActionContextCleanUp Filter,FilterDispatcher会清理掉所有的ThreadLocal.
第一个译者注中,应为:WW2.2之前处理这个请求的是ServletDispatcher。
少了一个"前"字