OGNL与Struts2的结合
1、二者结合原理
ValueStack中的两部分:
CompoundRoot root;
transient Map<String,Object> context;
2、栈原理
2.1 栈是由ArrayList模拟!
2.2 栈中的两个方法的实现:
public Object pop(){
return remove(0);
}
public void push(Object o){
add(0,o);
}
2.3 访问栈中属性的特点--由上到下
3、值栈中两部分内容(使用DEBUG标签)
3.1 Root:默认情况下,栈中放置当前访问的Action对象
3.2 Context:Context部分就是ActionContext数据中心
|-request
|-response
|-ServletContext
|-requestScope
|-sessionScope
|-applicationScope
|-params
|-attrs
....
4、struts2与ognl结合体现
4.1 参数接收
值栈对象与ActionContext对象是互相引用的
public void prepare() throws Exception {
//压入栈顶
//1获得值栈
ValueStack vs = ActionContext.getContext().getValueStack();
//2将u压入栈顶
vs.push(u);
}
Struts.xml 配置文件中 -- 语法:${ognl表达式}
<action name="Demo3Action" class="cn.itheima.d_config.Demo3Action" method="execute" >
<result name="success" type="redirectAction" >
<param name="actionName">Demo1Action</param>
<param name="namespace">/</param>
<!-- 如果添加的参数struts"看不懂".就会作为参数附加重定向的路径之后.
如果参数是动态的.可以使用${}包裹ognl表达式.动态取值
-->
<param name="name">${name}</param>
</result>
</action>
5、扩展:request对象的getAttribute方法
查找顺序: