struts2之实现原理

          首先还是贴上一张官方的struts2工作原理图吧。如下:

       那接下来就来谈一下struts2 框架的调用流程。

      ①. 当Servlet 容器接收到一个请求后,将请求交给你在 web.xml 文件中配置的Filter中,然后调用它的doFilter()方法。

      ②. Filter 询问 ActionMapper,以便确定这个请求是否有对应的Action调用。

      ③. ActionMapper 返回一个描述了 action调用的 ActionMapper对象。

      ④. Filter 调用Dispatcher 类的serveraction()方法。

      ⑤. Dispatcher 调用ActionProxy 的execute()方法。

      ⑥. ActionProxy 设置ActionInvocation 对象的执行上下文,然后调用其invoke()方法。

      ⑦. ActionInvocation 的invoke()方法从拦截器映射中查找尚未执行的拦截器,调用它的intercept(invocation)方法,并将自身对象的引用作为参数传递给拦截器。

      ⑧. 拦截器完成某些预处理工作后,反过来调用ActionInvocation 的invoke()方法。ActionInvocation 为了维护自己的状态,所以它知道哪些拦截器已经被拦截,如果还有没执行的拦截器,那就继续执行它的intercept(invocation)方法。

      ⑨. 直到所有的拦截器都已经执行,就调用action 实例的execute()方法。(不过也得看在struts.xml中是否使用了动态方法调用或者通过method属性配置要调用Action中的方法,如果没有使用前面那两种,则调用execute()方法)。

      ⑩. 然后ActionInvocation 会根据action 执行返回的结果码,也就是一串字符串,查找struts.xml中对应name为结果码的Result,再调用Result的execute(invocation)方法,将结果页面呈现给用户。

      ⑪. 当ActionInvocation 的invoke()方法将控制权返回给拦截器映射中的最后一个拦截器时,该拦截器就会完成所有必需的后期处理工作,然后从 intercept(invocation)方法返回,允许前一个拦截器执行自己的后期工作。如此反复,直到所有的拦截器都成功返回。

      ⑫. ActionInvocation 的invoke() 方法执行完毕后,想ActionProxy 返回一个String 类型的结果码,最后,ActionProxy清理状态并返回。

       至此,struts2 的工作流程就基本是这样了。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值