1.OGNL技术的使用

1).什么是OGNL

源于ognl.jar工具包
    Object Graphics Navigation Language(对象图导航语言)
   主要用于访问对象的数据和方法。
 
  2).OGNL基本原理

OGNL工具主要由3部分构成,具体如下

a.OGNL引擎
         负责解析ONGL表达式,定位数据
     b.Root根存储区(Object类型)
         负责存储要访问的目标对象。
     c.Context变量存储区(Map类型)
         负责存放多个要访问的目标对象。
 
  *3).OGNL基本语法

a.访问Root区域对象基本语法

--访问简单数据:"属性"
     例如"name"
    --访问数组或List集合:"属性[0]"
     例如"arr[1]"
    --访问Map集合:"属性['key']"或"属性.key"
     例如"map.two"或"map['two']"
    --访问方法:"属性值.方法()",
     例如"list.size()"
    --访问构造方法:"new 包名.构造方法"
     例如"new java.util.Date()"
    --访问静态成员:"@包名.类名@成员"
     例如"@java.lang.Math@PI"
    --创建List对象:"{元素1,元素2}"
    --创建Map对象:
    "#{key1:value1,key2:value2}"
 
 b.访问Context区域对象基本语法
    采用"#Key"开头.

2.OGNL技术在Struts的使用

在Struts2中有一个ValueStack数据对象,该对象存储了请求相关的所有数据信息。

例如request,session,application,action等.

Struts2采用OGNL工具对ValueStack进行操作。

1)xwork对OGNL进行了部分改造

在xwork中将原来OGNL标准结构中的Root存储区改造成了一个栈结构(CompoundRoot)
     当利用"属性"表达式访问时,优先去栈顶对象寻找,没有再去次栈顶寻找。

2)ValueStack结构(OgnlValueStack)

(参考valuestack.jpg)

3)Struts2标签的使用

在JSP中,利用Struts2标签显示数据,需要为标签指定OGNL表达式,
   标签利用表达式定位ValueStack中的数据,进行相应操作。
  
    a) debug标签:显示valuestack状态

b) iterator标签:循环集合元素

value属性:指定ognl
   var属性:指定循环变量,会被存放到ValueStack的context区域。
   status属性:指定循环状态变量,会被存放到ValueStack的context区域.
     该变量有count属性表示一共循环了多少个元素。
       index属性表示当前循环元素的索引。
  
    c) if...else...标签:判断分支

test属性:指定ognl判断表达式

d) property标签:显示数据

value属性:指定ognl表达式

e) date标签:将date数据格式化输出

name属性:指定ognl表达式
        format属性:指定日期模板

OGNL表达式的使用相关推荐

  1. 关于OGNL表达式中的%,$,#

    OGNL表达式非常强大-其中#.%.$这三个符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分,要认真区分.   1.#符号的用途一般有三种. 1)访问非根对象属性,例如示例 ...

  2. 深入理解Struts2中的OGNL表达式

    Struts 2中的表达式语言 Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JST ...

  3. 为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式

    前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时代OGNL可是必会的数据渲染技术.它全称Object Graph Navigation Language,作 ...

  4. OGNL表达式语言中的#和$的区别

    Struts2使用标准的Context来进行OGNL表达式语言求值,OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是 ValueStack,如果需要访 ...

  5. Struts(十):OGNL表达式(一)

    Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值: I.值栈中的属性值: 1.对象栈:读取对象栈中的某一个对象的属性值: 2.Map栈 :request,session, ...

  6. Struts2漏洞分析之Ognl表达式特性引发的新思路

    摘要 在Ognl表达式中,会将被括号"()"包含的变量内容当做Ognl表达式执行.Ognl表达式的这一特性,引发出一种新的攻击思路.通过将恶意代码存储到变量中,然后在调用Ognl表 ...

  7. struts2教程(9)--OGNL表达式使用

    OGNL表示式使用和值栈 一.介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的 ...

  8. struts2的OGNL表达式(二)

    下面说说OGNL表达式的访问情况: OGNL表达式能访问:访问属性,访问方法,访问字体对象,访问静态属性和方法,访问构造方法,访问数组,访问集合 – 投影.选择(? ^ $) 1,OGNL输出常量值 ...

  9. struts2的OGNL表达式理解(一)

    一,什么是OGNL表达式     OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言(Expression Languag ...

  10. java el ognl_el表达式跟ognl表达式的区别

    EL表达式: >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application. >>如果在struts环境中,它除了有在上面 ...

最新文章

  1. 2021年大数据Kafka(四):❤️kafka的shell命令使用❤️
  2. 网络营销——网络营销专员到底是教你如何选择网站页面制作
  3. 网页上线后音频不能自动播放
  4. Springboot源码——应用程序上下文分析
  5. java.lang.IllegalThreadStateException 线程运行报错
  6. windows进入后自动注销处理
  7. centos 7.5 mysql_CentOS7.5安装MySQL8以及相关设置
  8. 计算机存储系统中,有哪些措施可以提高 CPU 访问存储系统的速度?
  9. cognos宏函数的使用prompt
  10. Python数字图像处理
  11. 阿里矢量图库 当前页全选
  12. bp神经网络 损失函数,bp神经网络参数优化
  13. CSR867x — 蓝牙音频发射器方案(支持USB、模拟和SPDIF)
  14. LINUX系统各发行版镜像源下载
  15. [资源数据]民族代码
  16. VSLAM学习记录-求导:李群与李代数
  17. c语言程序设计教学工作总结,C语言教学的工作总结范文
  18. gethostbyname和struct hostent详解
  19. c语言中以w方式进行文件操作时,文件操作
  20. Leetcode2057. 值相等的最小索引

热门文章

  1. 给定一个层数n,输出字母三角形
  2. python玫瑰花数量的含义_玫瑰花数量的含义?玫瑰花个数的含义?
  3. 2022-2028年中国骑行手套行业市场研究分析及投资前景规划报告
  4. JDK生成证书,在Nginx中配置HTTP+SSL
  5. ValueError: [E030] Sentence boundaries unset. You can add the 'sentencizer' component to the pipelin
  6. 用crash分析内核死锁的一次实践
  7. etcd+skydns构建私有域名解析服务器
  8. SVA——断言属性之序列(sequence与property的用法)
  9. 数据库 E-R图实例
  10. 用python画皇冠_用python做数字油画或者从一幅画学习风格,去画另一幅画