struts2架构图

此文件copy自struts2 reference.个人认为这个图对理解struts2非常有帮助,所以就拿来放到自己的博客上了。



In the diagram, an initial request goes to the Servlet container (such as Jetty or Resin) which is passed through a standard filter chain. The chain includes the (optional)ActionContextCleanUp   filter, which is useful when integrating technologies such as  SiteMesh Plugin . Next, the required  FilterDispatcher   is called, which in turn consults theActionMapper   to determine if the request should invoke an action.

If the ActionMapper determines that an Action should be invoked, the FilterDispatcher delegates control to the  ActionProxy . The ActionProxy consults the frameworkConfiguration 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.

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.

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). 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.

注意:与struts1不同,struts2对用户的每一次请求都会创建一个action,所以struts2的action是线程安全的。
struts1中的action是singleton(单例)的,struts2中的action是prototype(原型)的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值