struts2框架中ActionContext对象详解

来源:互联网 发布:sql语句执行顺序limit 编辑:程序博客网 时间:2024/06/07 12:12

一、了解OGNL表达式:


      (1) Object Graphic Navigation language(对象图形导航语言)的缩写,它是一种功能性极强的表达式语言,使用它可以存取任意属性,调用对象中的方法。其作用的就是为了简化访问对象中的属性值!

    (2) OGNL表达式的解析都是围绕OGNL上下文进行的,OGNL表达式是一个map对象,其中包含多个java对象,其中有一个对象十分的特殊,这个对象称为根对象!

a.一个OGNL表达式若没有指定目标对象,默认就是从根对象开始查找!

b.若要访问非根对象中的属性,就要在访问根对象的前面需加#前缀!


二、了解值栈(valueStack):


(1)valueStack是值栈的对外接口,实际对应的类是OgnlValueStack,OgnlValueStack对象中包含了一个ArrayList集合来作为栈,默认action对象位置值栈的栈顶位置。

a.void push(Objext o) 可用来将一个对象数据压入栈顶.

b.set(String key,Objext obj) 则是将数据放入Map对象当中,并将Map对象压入栈顶位置!

(2) OGNL表达式在取数据的时候,其规则是先从栈的栈顶(action对象)中开始查找,先判断是否有Map对象,根据key取值;不是Map对象,则寻找该对象的getKey()方法,得到其值,若没有方法,则查找key变量(要求必须是public修饰)均为找到,就去第二个对象中向下查找!


三、详细了解ActionContext:


     (1)struts2框架在解析OGNL表达式的时候,OGNL上下文就是ActionContext,而根对象就是Action对象!

例如:若给出一个OGNL表达式 : "class.user..name"

首先判断这个OGNL表达式前缀没有带#,所以这个一个根对象,struts2框架会在值栈的栈顶对象中查找          getclass()方法,得到class对象,然后通过class对象,在其中查找getUer()方法,得到user对象,然后值        user对象中查找getName())方法,得到最终的值!

    (2)对于客户端发送的每一次请求,struts2框架都会自动的创建一个ActionContext和值栈对象,请求处理完毕以后这两个对象会自动的销毁!ActionContext对象相当于一个大大的容器,里面包含了application、session、parameters、valueSatck、attr属性。(其中valueStack对象就是值栈对象)

    (3)ActionContext中的application、session、parameters等对象都是非根对象,在OGNL表达式中要访问他们,需要在表达式前面加上#前缀!

例如:① #appliation.userName等于 ActionContext.getContext().getApplication().get("userName");

              ② #session.userName等效于ActionContext.getContext().getSession().get("userName");

      ③ #parameters.userName等ActionContext.getContext()..getParameters().get("userName");


四、struts2框架中ActionContext对象内部结构图形详解:




2 0
原创粉丝点击