Ognl
来源:互联网 发布:javaweb项目 知乎 编辑:程序博客网 时间:2024/06/09 16:14
Ognl表达式语言
作用:页面取值EL表达式语言,用于页面取值,jsp页面取值的标准(默认直接可以使用) (应用范围更广)Ognl表达式语言:struts标签默认支持的表达式语言。必须配置struts标签用,不能离开struts标签直接用。
OgnlContext对象
OgnlContext对象是ognl表达式语言的核心
优势:
1.支持对象方法调用
2.支持类静态方法调用和值访问,表达式的格式
@[类全名(包括包路径)] @[方法名|值名],例如
@java.lang.String@format(‘foo %s’,’bar’)
或者@tutorial.MyConstrant@APP_NAME;
3.支持赋值操作和表达式串联
4.访问OGNL上下文
总结:OGNL有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map的接口
5.操作集合对象
1.使用ognl表达式取值如果取非根元素的值,必须用#
2.
OgnlContext context2=new OgnlContext(); Object ognl2=Ognl.parseExpression("@Math@floor(10.9)"); Object value2=Ognl.getValue(ognl2, context,context.getRoot()); System.out.println(value2);
ValueStack对象
值栈对象
struts-Action运行过程会产生数据,最终要响应用户。因此struts把运行的数据放到ValueStack中,在页面就可以使用ValueStack
ValueStack实际上是一个接口,在Struts中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础;
ValueStack贯穿了整个Action的生命周期(每个Action类的对象实例都有一个ValueStack对象),相当于一个数据中转站。在其中保存当前action对象和其他相关对象。Struts2框架会把ValueStack对象保存在名为struts.valueStack的request的请求属性中。
用户每次访问struts的action都会创建一个Action对象,值栈对象、ActionContext对象,然后把Action对象放入值栈中;最后把值栈对象放入request中,传入jsp页面。
开发者只需要通过ActionContext对象就可以访问struts的其他关键对象。(ActionContext是给开发使用)
拿值栈对象:
public class OgnlDemo2 extends ActionSupport { public String execute() throws Exception{ //获取值栈对象:方式1 HttpServletRequest request=ServletActionContext.getRequest(); ValueStack vs1=(ValueStack)request.getAttribute("struts.valueStack"); //获取值栈对象:方式2 ActionContext ac=ActionContext.getContext(); ValueStack vs2=ac.getValueStack(); System.out.println(vs1==vs2); //true return SUCCESS; }
值栈对象的存储数据原理
根元素的值:
非根元素的值:
- ognl
- ognl
- OGNL
- OGNL
- OGNL
- OGNL
- OGNL
- ognl
- OGNL
- ognl
- ognl
- ognl
- ognl
- ognl
- ognl
- ognl
- ognl
- ognl
- FTP协议分析
- 数据结构-3 二叉树的遍历
- UE4_TimeLine
- 1、t_sne详解
- ListView一键置顶功能实现
- Ognl
- C# IComparer 用法即正逆序返回值理解
- springBoot + hibernate + Druid + MySQL + servlet(jsp)
- java搬运工——IO流
- SQL练习(一)
- Liux查看日志的简单方法
- 容斥原理(组合数学)总结
- 2.2Android调研
- 3.1—字符串—Valid Palindrome