【问题标题】:What is the difference between actioncontext and actionInvocation struts2?actioncontext 和 actionInvocation struts2 有什么区别?
【发布时间】:2012-10-25 19:31:57
【问题描述】:

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

【问题讨论】:

    标签: struts2 actioncontext


    【解决方案1】:

    由于您知道ActionContext 是执行动作的上下文,并且为了执行动作,我们还需要调用。 它是 ActionContext 的一部分,您可以通过

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

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

    【讨论】:

      【解决方案2】:

      Struts 2 ActionContex 和 Action Invocation 的区别

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

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

      动作调用:--

      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的实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-28
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        相关资源
        最近更新 更多