My questions are:
In other words, for every new request a new action object is created. Does this mean every time a new action object is created, a new ActionContext and ValueStack also get created?
Action1------1st req------->view.jsp------2nd req--------->action2.
So when a request comes for action1 a new object of action1 and corresponding ActionContext and ValueStack will get created.
From view.jsp (upon clicking hyperlink) a new request goes for action2.
Does this mean that previous ActionContext and ValueStack (related to action1) gets destroyed and a new ActionContext and ValueStack (for action2) gets created?
Yes after action execution clean up will be done.
//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);
}
3.Yes, If you want that data available in the next action use chain(not suggestible).