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