struts2中valueStack,stackContext以及actionContext的关系
一,首先给出三者的定义
1.valueStack: 里面存放的是Action类中通过set方法设置的属性值(表单传过来的值等),由OGNL框架实现;
2.stackContext: 也是用来存值的,stack上下文,它包含一些列对象,包括request/session/attr/application map等。
3.actionContext: 是action的上下文,可以得到request,session,application等.
我们在JSP页面中访问value stack的内容时,是不用加#,而如果是访问stack context的其他对象则要加上#。
二,如何获得ActionContext?
1.在自定义的拦截器中:使用ActionInvocation.getInvocationContext()或者使用ActionContext.getContext()。
2.在Action类中:让拦截器注入或者使用ActionContext.getContext()。
3.在非Action类中:让Action类传递参数、使用注入机制注入或者使用ActionContext.getContext()。
注意:只有运行在request线程中的代码才能调用ActionContext.getContext(),否则返回的是null。
三,ActionContext有什么作用?
1.通过ActionContext可以获得HttpServletRequest类:
HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
2.通过ActionContext也可以获得request的Map:
Map requestMap = (Map) actionContext.get("request");
因此,在JSP中,用“#request”来获得request的Map,用“#request.key”或者“#request[‘key‘]”来读取Map中的值。
四,那ValueStack与ActionContext到底有什么联系和区别:
~~~简单两句话概括就是:~~~
相同点:它们都是在一次HTTP请求的范围内使用的,即它们的生命周期都是一次请求。
不同点:值栈是栈的结构,ActionContext是映射(Map)的结构。
需要详细了解ActionContext的可以去参考这篇文章:http://www.bubuko.com/infodetail-355138.html