Struts2-OGNL与Struts2的结合

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数据中心

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方法

查找顺序:


猜你喜欢

转载自blog.csdn.net/w_meng_h/article/details/80319576