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方法
查找顺序: