actioncontext和actionInvocation struts2有什么区别?

时间:2012-10-25 19:31:57

标签: struts2 actioncontext

我对ActionContext和ActionInvocation有点困惑。我知道Action Context是执行Action的上下文。 ActionInvocation是否位于ActionContext中,如Session,Value Stack等? 其次,ActionContext是否在每个用户请求上创建,因为每个线程都是唯一的?如果是这样,每次在每个用户请求上创建一个新的Action Context时,这是否成本太高?

2 个答案:

答案 0 :(得分:1)

由于您已将ActionContext视为正在执行Action的上下文以及执行Action的上下文,因此我们还需要调用。 它是ActionContext的一部分,您可以通过

从上下文中获取ActionInvocation
public ActionInvocation getActionInvocation()

上下文使用ThreadLocals,这意味着存储在ActionContext中的值对于每个线程都是唯一的。 对我而言,这不是任何开销,因为在其他情况下,您必须确保在多线程应用程序中访问的所有内容都是线程安全的。将为每个请求创建新的ActionContext

答案 1 :(得分:1)

Struts 2 ActionContex和Action Invocation之间的区别

ActionContext是执行操作的对象的容器。存储在ActionContext中的值对于每个线程(即ThreadLocal)是唯一的。所以我们不需要让我们的动作线程安全。

我们可以通过调用ActionContext类的getContext()方法来获取ActionContext的引用。这是一种静态工厂方法。例如: ActionContext context = ActionContext.getContext();

行动Invocatioin: -

ActionInvocation表示操作的执行状态。它包含动作和拦截器对象。

struts框架提供了ActionInvocation接口来处理ActionInvocation。它提供了许多方法,其中一些可用于获取ValueStack,ActionProxy,ActionContext,Result等实例。 ActionInvocation接口的方法 ActionInvocation接口的常用方法如下:

1)public ActionContext getInvocationContext()返回与ActionInvocation关联的ActionContext对象。

2)public ActionProxy getProxy()返回持有此ActionInvocation的ActionProxy实例。

3)public ValueStack getStack()返回ValueStack的实例。

4)public Action getAction()返回与此ActionInvocation关联的Action实例。

5)public void invoke()在处理此ActionInvocation时调用下一个资源。

6)public Result getResult()返回Result的实例。