Struts2的ActionContext中和值栈?(Struts2 ActionContext a

2019-06-23 21:32发布

我的问题是:

  1. 在Struts2中,确实每一个动作的对象有自己的相应ActionContext中和值栈?

换句话说,对于每一个新的请求创建一个新的操作对象。 这是否意味着每创建一个新的操作对象时,一个新的ActionContext中和值栈还获得创建?

  1. 考虑以下情形:

措施1 ------ 1 REQ -------> view.jsp的------第二届REQ ---------> 1动作。

所以,当一个请求到来的动作1的动作1的新对象和相应的ActionContext中和值栈将得到建立。

从view.jsp的(在单击超链接)一个新的请求也适用于1动作。

这是否意味着以前ActionContext中和值栈(涉及到动作1)被破坏,新的ActionContext中和值栈(用于动作2)被创建?

  1. 假设我存储在view.jsp的在ActionContext中(的动作1)的东西,然后单击超链接动作2(从view.jsp的),将与ActionContext中(的动作1)沿着数据丢失?

Answer 1:

  1. 是动作执行清理后会做。

     //SourceCode from StrutsPrepareAndExecuteFilter. //Cleans up a request of thread locals public void cleanupRequest(HttpServletRequest request) { Integer counterVal = (Integer) request.getAttribute(CLEANUP_RECURSION_COUNTER); if (counterVal != null) { counterVal -= 1; request.setAttribute(CLEANUP_RECURSION_COUNTER, counterVal); if (counterVal > 0 ) { if (log.isDebugEnabled()) { log.debug("skipping cleanup counter="+counterVal); } return; } } // always clean up the thread request, even if an action hasn't been executed ActionContext.setContext(null); Dispatcher.setInstance(null); } 

。是的,如果你想在未来的操作使用链可用的数据(不耳根)。



Answer 2:

Q1。 有一个ActionContext中,并且只有一个ValueStack中。

Q2。

这是否意味着以前ActionContext中和值栈(涉及到动作1)被破坏,新的ActionContext中和值栈(用于动作2)被创建?

没有。

Q3。 我不明白这个问题。 我觉得缺少的是意识的ThreadLocal所以虽然是一个ActionContext中每个线程都能够有自己的变量,是当地为ValueStack的线程,因而行动范围保持这种方式。



文章来源: Struts2 ActionContext and ValueStack?