java - Struts2 ValueStack 如何处理多个请求

标签 java jsp struts2 ognl valuestack

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

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

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

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

最佳答案

  1. 嵌入式对象或换句话说嵌套 bean 可通过其访问器或在评估 OGNL 表达式时使用该访问器的 OGNL 直接访问。 Struts2 在 top 上放置了一个 Action bean的 valueStack ,因此操作属性是按名称检索的,但嵌套的 bean 是使用 OGNL 表示法解析的。更多关于 OGNL您可以在文档中找到。

  2. 每个 Action 实例都有自己的上下文和valueStack ,因此客户端不会相互干扰并拥有自己的值,除非这些值保存在 application 中。范围。

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

关于java - Struts2 ValueStack 如何处理多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20417423/

相关文章:

java - 使用war文件上传在struts2中制作的java网站

java - Spring 上下文: It's possible to define variables (not properties) in a XML and use it in runtime to obtain specific referenced beans?

java - 将 GUI 链接到主类

java - 当 cookie 被禁用时,如何使表单工作?

javascript - 直接引用node_modules可以吗?

java - 两个struts2 webapps一起启动失败

java - try catch 循环

java - AES 算法安全吗?

java - 如何避免在 Struts 中生成更多的 HTML 元素

java - 清理 Struts2 中的 url-s