OGNL(Object-Graph Navigation Languaged)对象图导航语言,它是一种功能强大的第三方表达式语言。java中其他表达式语言还有EL,JSTL等。
目的:为了解struts2,弄懂ValueStack(据说struts2用的不多了,但一个mvc框架,学习一下还是可以的吧),因为struts2在项目中集成了OGNL,struts2默认的表达式语言就是OGNL。
OGNL的使用要素 就是 表达式 || 根对象 || Context对象
这里 就 先 探秘 OgnlContext类。
1)OgnlContext继承自Map接口(但是OgnlContext 内 _values 属性才是核心,也要注意_root这个属性。)
package ognl;
import ognl.enhance.LocalReference;
import java.util.*;
public class OgnlContext extends Object implements Map{
}
与 _root 有关的一些代码如下
private Object _root;
private Object _currentObject;
public void setRoot(Object value)
{
_root = value;
_accessorStack.clear();
_typeStack.clear();
_currentObject = value;
if (_currentObject != null)
{
setCurrentType(_currentObject.getClass());
}
}
public Object getRoot(){
return _root; }
public void setCurrentType(Class type){
_typeStack.add(type); }
public void setCurrentObject(Object value){
_currentObject = value; }
public Object getCurrentObject(){
return _currentObject; }
与 _values 有关的一些代码如下
//定义 _values 属性
private Map _values = new HashMap(23);
//构造函数初始化 _values
public OgnlContext(Map values)
{
super();
this._values =</