以 webwork-2.2.4.jar 版本为例:
在DispatcherUtils 的createContextMap(...)方法中:
HashMap extraContext = new HashMap();
extraContext.put(ActionContext.PARAMETERS, new HashMap(parameterMap)); --request中的parameter Map,重新生成一个HashMap,与之前的对象就没有联系了.
extraContext.put(ActionContext.SESSION, sessionMap); -- session 中的attribute Map
extraContext.put(ActionContext.APPLICATION, applicationMap); -- servletContext 中的attribute Map
extraContext.put("request", requestMap);
extraContext.put("session", sessionMap);
extraContext.put("application", applicationMap);
extraContext.put("parameters", parameterMap);这些设置是为了在页面上的OGNL语言方便 "#session..."
把request,session,servletContext对象放在了这里:
extraContext.put(WebWorkStatics.HTTP_REQUEST, request);
extraContext.put(WebWorkStatics.HTTP_RESPONSE, response);
extraContext.put(WebWorkStatics.SERVLET_CONTEXT, servletContext);
在每个request之后创建的ActonContext(),(在DefaultActionInvocation init())时,上面所说的extraContext的变量会放入到ActionContext 的context中去,ActionContext的get(),set(..)方法操作的都是context中的变量.
这样在自己创建的Action中对ActionContext get("session")的操作会是针对 context中的 sessionMap进行操作,如果在页面上再去取 HttpSession getAttribute() 的话是没有该值的