【问题标题】:How does Struts2 ValueStack take care of multiple requestsStruts2 ValueStack 如何处理多个请求
【发布时间】:2013-12-06 06:24:27
【问题描述】:

我知道ValueStack 是在 Struts2 中引入的,而 Struts1 模型的另一个变化是现在为每个请求实例化一个新的ActionObject。所以我们可以定义实例变量而不用担心多线程问题。 拦截器和 JSP 从ActionObjects 访问实例变量的方式是通过ValueStack。但是ValueStack 的实现方式(或至少被Struts2 框架使用)是由ValueStack 实现的。使访问更容易,这样我们就不需要遍历整个对象树。我有以下问题。

  1. 如果我有嵌入对象(对象的多个层次结构)怎么办?在这种情况下访问机制如何表现?

  2. 如果让我们说 2 个客户端同时向同一个 actin 发出请求,并且由于 2 个客户端提供的输入返回了 2 个不同的结果,Action 执行的结果是不同的。假设我的 Action Class 有一种获得最优价格的方法,并且基于我的后端服务中的逻辑,对于 2 个不同的请求,结果分别为 10 和 12。现在ActionClass 有一个名为price 的成员变量,该值将存储在其中,生成的JSP showResults.jsp 将访问该变量(使用标签库)以显示价格。 struts2 框架如何保证 client1 和 client2 得到正确的响应,并且在 JSP 上显示响应时价格不会混乱,因为据我了解,ValueStack 只是先进先出(堆栈逻辑)方式。因此,它可能最终向两个客户端请求返回 10,因为相同的变量在值堆栈上存储了两次(具有相同的名称)但具有不同的值。

  3. ValueStack 何时从其列表中销毁对象?

【问题讨论】:

    标签: java jsp struts2 ognl valuestack


    【解决方案1】:
    1. 嵌入式对象或换句话说嵌套 bean 直接通过其访问器或通过在评估 OGNL 表达式时使用该访问器的 OGNL 访问。 Struts2 在valueStacktop 上放置一个动作bean,因此动作属性是按名称检索的,但嵌套bean 是使用OGNL dot 表示法解析的。有关OGNL 的更多信息,您可以在文档中找到。

    2. 每个动作实例都有自己的上下文和valueStack,因此客户端不会相互干扰并且有自己的值,除非这些值在application 范围内维护。

    3. valueStack 由调度程序创建并放入操作上下文。它也可以在需要时由一些拦截器重新创建。你不应该担心它的值,因为它们在动作结束时被销毁了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-19
      • 2013-01-12
      • 2013-01-31
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多