JavaScud | Forum | JIRA | Blog |
  Dashboard > WebWork2文档中文化计划 > WebWork > Architecture
  WebWork2文档中文化计划 Log In View a printable version of the current page.  
  Architecture
Added by 黑灵, last edited by scud on May 18, 2006  (view change)
Labels: 
(None)

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会调用JSPFreeMarker模版来呈现页面(但不总是这样,例如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。

少了一个"前"字

Posted by Anonymous at Mar 14, 2006 21:37 | Reply To This

如果ActionContextCleanUp Filter已经出现了FilterDispatcher不会清理ThreadLocal中的ActionContext信息 这句话是不是有语法问题

Posted by Anonymous at Apr 28, 2006 12:17 | Reply To This

如果已经设置了ActionContextCleanUp Filter,那么FilterDispatcher就不会清理ThreadLocal中的ActionContext信息

Site running on a free Atlassian Confluence Open Source Project License granted to WebWork China. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.3 Build:#808 May 29, 2007) - Bug/feature request - Contact Administrators