101.OGNL表达式
第三方的开源框架,全名 对象图导航语言,是Struts默认的表达式语言
OGNL有个实现了Map接口的上下文Context
想要理解OGNL,首先我们要来看Struts2一个重要的值栈(ValueStack)的概念
ValueStack
ValueStack是一个接口,Struts2中使用的OGNL表达式实际是使用了实现了ValueStack接口的OgnlValueStack类
ValueStack贯穿整个Action的生命周期,每一个Action都有一个ValueStack,用来保存Action相关对象。
Struts把ValueStack对象保存在一个名为 struts.valueStack 的属性中
ValueStack又包含两个重要的部分:
1.ObjectStack:主要用来存放action中的相关动作和对象 【List形式】
2.ContextMap:主要用来存放各种映射关系,比如:parameters、request、session、application、attr【Map形式】
OGNL Context
OgnlValueStack类中包含两个重要的属性:root和context
root是一个ArrayList对象
context是一个OgnlContext对象,本质也是一个Map对象。而这个context对象中包含一个*对象root,context里面的root其实就是Struts2将OgnlValueStack的root对象赋值给了它,而这个顶层对象root中包含了Action的实例对象,所以通过这个root对象可以很轻易的获取到Action中的属性,而且这个顶层对象调用的时候前面不需要加#,而request,session,attr这些属性则需要。
当Struts2接收请求的时候会自动创建ActionContext、ValueStack、action对象,然后将action对象存放到ValueStack对象中,所以OGNL可以很轻易的访问到action中的数据
特别注意:Struts2中OGNL表达式需要配合Struts标签才能使用
ActionContext
ServletActionContext.getRequest().setAttributet"username", "username.request");
ServletActionContext.getServletContext().setAttribute("username", "username application");
ServletActionContext.getContext().getSession().put("username", "username.session");
ValueStack valueStack= ServletActionContext.getContext().getValueStack());
System.out.println(valueStack "+ValueStack);
valueStack.set("username", "username valueStack");
ActionContext提供了对ognl上下文对象中数据操作的方法.
上一篇: pytorch在tensorboard上进行可视化
下一篇: struts2小结(3)
推荐阅读
-
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
-
javascript基础课程之算数表达式定义用法详解
-
关于一个preg_replace 正则表达式 替换的有关问题
-
PHP学习之路六(php与正则表达式)
-
请教各位大神改版后的四六级总分怎么用正则表达式获取(旧版的我会获取)
-
javascript - 关于正则表达式的一个问题
-
请教关于PHP正则的表达式,谢谢!
-
PHP 正则表达式 轻松验证IPV6_PHP
-
php匹配电话号码的正则表达式(支持区位、直播号码、分机号码)
-
Shell正则表达式验证IP地址