The diagram describes the framework's architecture.
In the diagram, an initial request goes to the Servlet container
(such as Jetty or Resin) which is passed through a standard filter
chain.
这个图中,初始需求到了Servlet容器,通过了标准的filter链。
The chain includes the (optional) ActionContextCleanUp filter, which is useful when integrating technologies such as SiteMesh Plugin.
这个链包括ActionContextClean的filter,它在整合技术方面例如:SiteMesh插件非常有用。
Next, the required FilterDispatcher is called, which in turn consults the ActionMapper to determine if the request should invoke an action.
接着,FilterDispatcher被调用,它查询ActionMapper决定请求应该调用action。
If the ActionMapper determines that an Action should be invoked, the FilterDispatcher delegates control to the ActionProxy. The ActionProxy consults the framework Configuration Files manager (initialized from the struts.xml file). Next, the ActionProxy creates an ActionInvocation, which is responsible for the command pattern implementation. This includes invoking any Interceptors (the before clause) in advance of invoking the Action itself.
如果ActionMapper决定Action应该被调用,FilterDispatcher把控制委托给ActionProxy。ActionProxy咨询配置文件管理器(从struts.xml文件初始化)。接着,ActionProxy创建一个ActionInvocation,它负责命令格式实现,包括在调用Action自己前面调用任何Interceptors。
Once the Action returns, the ActionInvocation is responsible for looking up the proper result associated with the Action result code mapped in struts.xml. The result is then executed, which often (but not always, as is the case for Action Chaining) involves a template written in JSP or FreeMarker to be rendered. While rendering, the templates can use the Struts Tags
provided by the framework. Some of those components will work with the
ActionMapper to render proper URLs for additional requests.
一旦Action返回,ActionInvocation负责查询在struts.xml中映射的关于Action Result code相关的合适的result,它一般调用JSP或FreeMarker模板做渲染。在渲染的时候,模板可以用Struts标签。部分组建将和ActionMapper工作来渲染合适的URL给请求。
|
All objects in this architecture (Actions, Results, Interceptors, and so forth) are created by an ObjectFactory.
This ObjectFactory is pluggable. We can provide our own ObjectFactory
for any reason that requires knowing when objects in the framework are
created. A popular ObjectFactory implementation uses Spring as provided
by the Spring Plugin. |
Interceptors are executed again (in reverse order, calling the after clause).
Interceptor以相反的顺序在执行一遍。
Finally, the response returns through the filters configured in the web.xml. If the ActionContextCleanUp filter is present, the FilterDispatcher will not clean up the ThreadLocal ActionContext. If the ActionContextCleanUp filter is not present, the FilterDispatcher will cleanup all ThreadLocals.
最后通过在Web.xml中配置的filter返回响应。如果ActionContextCleanUp过滤器也用了,那么FilterDispatcher不清理ActionContext本地线程。否则FilterDispatcher清理所有的本地线程。