OGNL是Object-Graph Navigation Language的缩写(也称为对象导航语言),它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
Jsp里面有9大内置对象(12)
RequestScope responseScope applicationScope pageScope pageContext params paramValues
9大内置对象对应的就是servlet里面的对象
EL 是为了方便在这个9大内置对象中取值(属性名重复,先找小的对象)
EL表达式的语法结构
OGNL和EL没有任何关系,只是写法有点类似。
Struts2 和OGNL的结合
struts2 提供了一个类 ValueStack
ValueStack 分成两部分 一部分叫做root 一部分叫做 context
root 存的是当前的action对象
context存的是ActionContext里面所有的内容
//存值 public void fun () throws OgnlException {
OgnlContext oc= new OgnlContext();
//OGNL root 存储任意一个对象
Workers workers = new Workers("张三","66");
oc.setRoot(workers);
// ognl context 存储map
Map<String,Object> map = new HashMap<String, Object>();
Workers workers2 = new Workers("李四","20");
Workers workers3 = new Workers("王五","30");
map.put("workers2",workers2);
map.put("workers3",workers3);
oc.setValues(map);
struts2 用来接收参数的方式:给Action 添加一个属性,该属性会放到ValuesStack 中的root部分,通过ognl的方式进行赋值。