首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OGNL与值栈

OGNL与值栈

作者头像
木瓜煲鸡脚
发布2019-09-29 16:26:16
6290
发布2019-09-29 16:26:16
举报
文章被收录于专栏:Jasper小笔记Jasper小笔记

好的时光

  1. OGNL
    • 什么是OGNL
    • OGNL功能
    • OGNL简单使用
  2. 值栈
    • 什么是值栈
    • 值栈结构

OGNL

什么是OGNL?

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。

对比EL表达式:

OGNL对象图导航语言,比EL表达式强大很多倍的语言

EL表达式只能从域中获取数据

OGNL可以调用对象的方法,获取struts的值栈的数据。

OGNL是第三方的表达式语言,用它来获取struts中值栈的数据

OGNL的功能

支持运算符(如+-*/)

支持对象方法调用,如xxx.doSomeSpecial();

支持类静态的方法调用和值访问

支持赋值操作和表达式串联

访问OGNL上下文

操作集合对象

可以直接new一个对象

OGNL入门

OGNL使用要素三个:

表达式

根区

非根区(context对象)

OGNL核心OgnlContext本质是一个map

java程序中使用ognl:

在context中存取(需要#号)

在根元素中存取(不需要#)

使用对象方法和静态方法

在页面中使用ognl

导入标签库

调用静态方法默认不行,需要开启

值栈

什么是值栈?

ValueStack实际上就是一个容器。是一个接口,实现类为OgnlValueStack

当用户每次访问action对象的业务方法时, 会先创建ActionContext对像里面又包含OgnlValueStack对象、Action对象

它由Struts框架创建,当前端页面如jsp发送一个请求时,Struts的默认拦截器会将请求中的数据进行封装,并入ValueStack的栈顶。

Struts框架中的数据就都保存到了ValueStack中,各种域也是被包含在值栈当中,存到域当中只能在页面中把它取出来存到值栈当中可以在任何地方取出数据

ValueStack贯穿整个action的生命周期, action一旦创建,就会创建一个valuestack对象

ValueStac

值栈的内部结构

当请求过来的时候,执行

StrutsPrepareAndExecuteFilter过滤器当中的doFilter方法

在这个方法当中创建ActionContext

在创建ActionContext过程中,创建ValueStack对象

将valueStack对象传递给ActionContext对象。通过ActionContext获取值栈对象

ActionContext对象之所以能够访问servlet的API(域对象的数据)就是因为内部有值栈的引用,与action相关的存在根区请求完毕后清空,而其他域的数据存在非根区

值栈存数据

通过ActionContext类的静态方法getContext得到ActionContext对象,ActionContext对象调用getValueStack获取到值栈

获取值栈

ValueStack valueStack = ActionContext.getContext().getValueStack();

根区

// getRoot()可以省略
Student stu = new Student();
valueStack.getRoot().push(stu);
valueStack.getRoot().pop();

非根区

ActionContext.getContext().push(数据);
ActionContext.getContext()pop();

从值栈取

用struts标签库的debug在页面展示值栈信息

使用debug需开启

 <constant name="struts.devMode" value="true"></constant>

点开debug就是当前值栈信息

从根区当中取(注意它是从栈顶取,若根区中两个或多个Property Name相同取到的是上面的)

成功获取到根区的name

非根区取数据

成功获取到非根区相应信息

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT那个小笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档