- 浏览: 508957 次
- 性别:
- 来自: 初到北京
最新评论
-
javamonkey:
有点老了,有个Teb测试,这个性能测试很标准http://gi ...
几款模板引擎的性能对比 -
greenlaw110:
xuyao 写道sdh5724 写道xuyao 写道很好,nn ...
几款模板引擎的性能对比 -
sefier:
不知道你看的是哪个版本的,现在所看到的版本和你所描述的不一致, ...
Facebook XHP 调研 -
javatar:
我觉得从通用语言去思考可能更有意思,满足八封其实就是一个完备集 ...
五行通天地 八卦定乾坤--打算按照先天八卦的形制重构Lite模版引擎的指令集 -
luo2pei4321:
MVEL的官方例子里面好像只支持Integer和String两 ...
表达式引擎JSEL介绍
为了配合一下JSEL的发布推广,做了一下性能测试。
说实在的,真不想做这类测试,太无趣了。
首先说明一下,这个表达式测试并不专业,我只是随便拿了一下我们 飞行大亨 Aviator的几个用例随便做的一个测试,吧数据记录一下,希望对大家有个参考价值:
对比的表达式系统有:
测试表达式:
测试数据模型:
先来一个总体效果吧:
有图有真相,给大家一个直接的效果吧(1000*1000次运算耗时图,单位为秒)
很明显,数据看不下去了,因为Ognl这个害群之马,太慢了,和别的引擎差距太明显,导致其他的差距看不出来了。
吧害群之马干掉,再看看(没删除干净,是在不好意思,MVEL也有问题,变量处理太慢了):
还是单独看看吧:
JSEL与Aviator消耗对比图
JSEL与MVEL消耗对比图
把MVEL 那个差距最大的去掉,看看其他的差距
原始测试数据
图表上看不清细节,贴一下原始数据:
测试代码:
http://templatetest.googlecode.com/svn/trunk/TT/src/com/googlecode/templatetest/ELTimeTest.java
总结
太晚了,先睡觉,明天再来继续。。。。。
测试了一下 OGNL 2.7.1,确实改进了不少。不过,和JSEL差距还是很明显的:)
最新版本的 Struts2 用的是ognl-2.6.11.jar
Webwork2.7才升級到2.7的,目前,OGNL还是以2.6为主的天下。
而OGNL的官方网站也关闭了 www.ognl.org,也不知道这个项目以后会怎么发展
ognl-2.6.11.jar
mvel2-2.0.17.jar
http://grepcode.com/snapshot/repo1.maven.org/maven2/ognl/ognl/3.0
是否可以拿ognl-3.0来测试一下?
ognl-2.6.11.jar
mvel2-2.0.17.jar
这确实是一个不够完善的测试数据。
差距确实也很明显,我想其他的数据应该类似吧。
我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。
人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。
jsel支持设值吗?
另外比较关注,lz能不能讲讲 jsel的设计~
thx
lz跟我的名字比较像
设值是支持的:
现在的JSEL命令行工具就是用到了JSEL的设值功能。
http://code.google.com/p/lite/wiki/CPEL
曾经也用它来做国类似webwork的servlet 参数=》JavaBean属性的自动转换,我想,用它来代替Struts2的OGNL应该也没什么问题吧,只是目前还没有试过。
JSEL的设计,有时间在专门写个帖子吧,呵呵
这确实是一个不够完善的测试数据。
差距确实也很明显,我想其他的数据应该类似吧。
我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。
人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。
jsel支持设值吗?
另外比较关注,lz能不能讲讲 jsel的设计~
thx
lz跟我的名字比较像
这确实是一个不够完善的测试数据。
差距确实也很明显,我想其他的数据应该类似吧。
我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。
人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。
说实在的,真不想做这类测试,太无趣了。
首先说明一下,这个表达式测试并不专业,我只是随便拿了一下我们 飞行大亨 Aviator的几个用例随便做的一个测试,吧数据记录一下,希望对大家有个参考价值:
对比的表达式系统有:
测试表达式:
//常量运算1 1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71 //常量运算2 6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3 //变量+常量复合运算 i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 //简单变量处理 i * pi //简单常量处理 1
测试数据模型:
vars.put("i",100); vars.put("pi",3.14f); vars.put("d",-3.9); vars.put("b",(byte)4); vars.put("bool",false);
先来一个总体效果吧:
有图有真相,给大家一个直接的效果吧(1000*1000次运算耗时图,单位为秒)
很明显,数据看不下去了,因为Ognl这个害群之马,太慢了,和别的引擎差距太明显,导致其他的差距看不出来了。
吧害群之马干掉,再看看(没删除干净,是在不好意思,MVEL也有问题,变量处理太慢了):
还是单独看看吧:
JSEL与Aviator消耗对比图
JSEL与MVEL消耗对比图
把MVEL 那个差距最大的去掉,看看其他的差距
原始测试数据
图表上看不清细节,贴一下原始数据:
Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71 Aviator: value:11181.0 time:2.660937(s) MVEL: value:11181.0 time:0.11660712(s) Ognl: value:11181.0 time:90.7111(s) JSEL: value:11181.0 time:0.02078729(s) Source:6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3 Aviator: value:1 time:2.1668231(s) MVEL: value:-7 time:0.33598384(s) Ognl: value:1 time:82.08548(s) JSEL: value:1 time:0.020102492(s) Source:i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 Aviator: value:true time:6.8001246(s) MVEL: value:true time:115.0054(s) Ognl: value:true time:113.09844(s) JSEL: value:true time:3.3340743(s) Source:i * pi Aviator: value:314.0000104904175 time:1.9424591(s) MVEL: value:314.0000104904175 time:5.068285(s) Ognl: value:314.0000104904175 time:46.878913(s) JSEL: value:314.0 time:0.28054053(s) Source:1 Aviator: value:1 time:1.564514(s) MVEL: value:1 time:0.11306722(s) Ognl: value:1 time:40.87699(s) JSEL: value:1 time:0.013243402(s)
测试代码:
http://templatetest.googlecode.com/svn/trunk/TT/src/com/googlecode/templatetest/ELTimeTest.java
总结
太晚了,先睡觉,明天再来继续。。。。。
评论
22 楼
oznyang
2010-12-30
ongl里面代码太繁琐了,一个简单的转型,调用堆栈都好几十层,实在是吃不消,大为试试freemarker里面的表达式求值看看,应该效率不错
21 楼
panlw
2010-12-30
MVEL有没有编译过?编译前后性能相差很多很多。
20 楼
olivechinese
2010-08-12
兄弟,有没有 和 jexl 比较过啊????
想知道这个结果
想知道这个结果
19 楼
jindw
2010-08-11
刚才测试有误,重新测试了一下Ognl,加上了1.7.1的字节码优化:
运行速度确实上来了,基本和JSEL相当,但是他这种优化好像太静态化了,比如变量只能通过javabean的getter方法提供,我给个map都不行,这个优化也太猛了点,有伤易用性的。
OgnlContext oc = (OgnlContext)Ognl.createDefaultContext(null); Node result = Ognl.compileExpression(oc, context, source);
运行速度确实上来了,基本和JSEL相当,但是他这种优化好像太静态化了,比如变量只能通过javabean的getter方法提供,我给个map都不行,这个优化也太猛了点,有伤易用性的。
Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71 Ognl: value:11181.0 time:0.0194656(s) JSEL: value:11181.0 time:0.020450238(s) Source:6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3 Ognl: value:1 time:0.0249906(s) JSEL: value:1 time:0.015976602(s) Source:i * pi Ognl: value:314.0 time:0.059526015(s) JSEL: value:314.0 time:0.2599812(s) Source:1 Ognl: value:1 time:0.014142064(s) JSEL: value:1 time:0.013489774(s)
18 楼
jindw
2010-08-11
jansel 写道
OGNL 至少也应该使用2.7.*吧 加入了字节码优化功能
测试了一下 OGNL 2.7.1,确实改进了不少。不过,和JSEL差距还是很明显的:)
Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71 Ognl: value:11181.0 time:1.0606151(s) JSEL: value:11181.0 time:0.020270592(s) Source:6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3 Ognl: value:1 time:0.95045424(s) JSEL: value:1 time:0.016021512(s) Source:i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 Ognl: value:true time:1.3603102(s) JSEL: value:true time:3.2627156(s) Source:i * pi Ognl: value:314.0000104904175 time:0.48167065(s) JSEL: value:314.0 time:0.25570947(s) Source:1 Ognl: value:1 time:0.4346729(s) JSEL: value:1 time:0.013648035(s)
最新版本的 Struts2 用的是ognl-2.6.11.jar
Webwork2.7才升級到2.7的,目前,OGNL还是以2.6为主的天下。
而OGNL的官方网站也关闭了 www.ognl.org,也不知道这个项目以后会怎么发展
17 楼
jansel
2010-08-11
OGNL 至少也应该使用2.7.*吧 加入了字节码优化功能
16 楼
colorless
2010-08-10
jindw 写道
colorless 写道
ognl 你用的是什么版本?这个应该会有很大区别
ognl-2.6.11.jar
mvel2-2.0.17.jar
http://grepcode.com/snapshot/repo1.maven.org/maven2/ognl/ognl/3.0
是否可以拿ognl-3.0来测试一下?
15 楼
metadmin
2010-08-09
没有提到beanshell哦
我的开源软件使用beanshell的
我的开源软件使用beanshell的
14 楼
srdrm
2010-08-09
想了解一下,一般表达式引擎在什么场景下使用比较多。
大家都用在了什么场景。 其实应用应该蛮多,有没有真正用到项目中的?
大家都用在了什么场景。 其实应用应该蛮多,有没有真正用到项目中的?
13 楼
jindw
2010-08-09
colorless 写道
ognl 你用的是什么版本?这个应该会有很大区别
ognl-2.6.11.jar
mvel2-2.0.17.jar
12 楼
colorless
2010-08-09
ognl 你用的是什么版本?这个应该会有很大区别
11 楼
long502147
2010-08-09
struts2不就是用的ognl表达式么?ognl不会那么差吧!
10 楼
jindw
2010-08-09
<div class="quote_title">joyfun 写道</div>
<div class="quote_div">不一定要图呀 出个表格多好呀 图悬殊太大真是没法看</div>
<p> </p>
<p>OK,满足你^_^</p>
<p> </p>
<p> </p>
<p> </p>
<table style="border-collapse: collapse; width: 270pt;" border="0" cellspacing="0" cellpadding="0" width="360">
<col style="width: 54pt;" span="5" width="72">
<tbody>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt; width: 54pt;" width="72" height="18"><span> </span></td>
<td style="width: 54pt;" width="72">JSEL</td>
<td style="width: 54pt;" width="72">Aviator2</td>
<td style="width: 54pt;" width="72">MVEL</td>
<td style="width: 54pt;" width="72">Ognl</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">1000+..</td>
<td align="right">0.020787</td>
<td align="right">2.660937</td>
<td align="right">0.116607</td>
<td align="right">90.7111</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">6.7-..</td>
<td align="right">0.020102</td>
<td align="right">2.166823</td>
<td align="right">0.335984</td>
<td align="right">82.08548</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">i * pi +..</td>
<td align="right">3.334074</td>
<td align="right">6.800125</td>
<td align="right">115.0054</td>
<td align="right">113.0984</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">i * pi</td>
<td align="right">0.280541</td>
<td align="right">1.942459</td>
<td align="right">5.068285</td>
<td align="right">46.87891</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18" align="right">1 <br>
</td>
<td align="right">0.013243</td>
<td align="right">1.564514</td>
<td align="right">0.113067</td>
<td align="right">40.87699</td>
</tr>
</tbody>
</table>
<div class="quote_div">不一定要图呀 出个表格多好呀 图悬殊太大真是没法看</div>
<p> </p>
<p>OK,满足你^_^</p>
<p> </p>
<p> </p>
<p> </p>
<table style="border-collapse: collapse; width: 270pt;" border="0" cellspacing="0" cellpadding="0" width="360">
<col style="width: 54pt;" span="5" width="72">
<tbody>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt; width: 54pt;" width="72" height="18"><span> </span></td>
<td style="width: 54pt;" width="72">JSEL</td>
<td style="width: 54pt;" width="72">Aviator2</td>
<td style="width: 54pt;" width="72">MVEL</td>
<td style="width: 54pt;" width="72">Ognl</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">1000+..</td>
<td align="right">0.020787</td>
<td align="right">2.660937</td>
<td align="right">0.116607</td>
<td align="right">90.7111</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">6.7-..</td>
<td align="right">0.020102</td>
<td align="right">2.166823</td>
<td align="right">0.335984</td>
<td align="right">82.08548</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">i * pi +..</td>
<td align="right">3.334074</td>
<td align="right">6.800125</td>
<td align="right">115.0054</td>
<td align="right">113.0984</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18">i * pi</td>
<td align="right">0.280541</td>
<td align="right">1.942459</td>
<td align="right">5.068285</td>
<td align="right">46.87891</td>
</tr>
<tr style="height: 13.5pt;" height="18">
<td style="height: 13.5pt;" height="18" align="right">1 <br>
</td>
<td align="right">0.013243</td>
<td align="right">1.564514</td>
<td align="right">0.113067</td>
<td align="right">40.87699</td>
</tr>
</tbody>
</table>
9 楼
jindw
2010-08-09
说一下总结吧,从目前的测试数据看,除Ognl差距最大外,其他几个系统都只有几倍的差距,可以认为是同一个数量级。
下面我发表一下个人的看法吧,仅供参考
MVEL2.0 有字节码优化,性能与Aviator相当,大多数情况下略快,但是也有超级慢的时候,特别是变量访问速度非常之慢,和Ognl有的一拼,最要命的是,在三目运算符处理的过程中有bug,导致和js规则,其他模板系统结果不同(或许是自身语法比较特殊,即使如此,也是不应该的)。
Aviator 有字节码优化,目前没发现什么大问题,不过,据作者报料,这个项目可能休眠下去。
JSEL 没有字节码优化,性能依然是最佳的,他也有一些表达式结构上的优化策略,比如,静态处理部分,将预处理成静态值,不会每次都重复计算。目前JSEL是Lite模板默认的表达式引擎,后续的维护会有更好的保障。
下面我发表一下个人的看法吧,仅供参考
MVEL2.0 有字节码优化,性能与Aviator相当,大多数情况下略快,但是也有超级慢的时候,特别是变量访问速度非常之慢,和Ognl有的一拼,最要命的是,在三目运算符处理的过程中有bug,导致和js规则,其他模板系统结果不同(或许是自身语法比较特殊,即使如此,也是不应该的)。
Aviator 有字节码优化,目前没发现什么大问题,不过,据作者报料,这个项目可能休眠下去。
JSEL 没有字节码优化,性能依然是最佳的,他也有一些表达式结构上的优化策略,比如,静态处理部分,将预处理成静态值,不会每次都重复计算。目前JSEL是Lite模板默认的表达式引擎,后续的维护会有更好的保障。
8 楼
joyfun
2010-08-09
不一定要图呀 出个表格多好呀 图悬殊太大真是没法看
7 楼
jindw
2010-08-09
kimmking 写道
jindw 写道
downpour 写道
这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
这确实是一个不够完善的测试数据。
差距确实也很明显,我想其他的数据应该类似吧。
我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。
人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。
jsel支持设值吗?
另外比较关注,lz能不能讲讲 jsel的设计~
thx
lz跟我的名字比较像
设值是支持的:
现在的JSEL命令行工具就是用到了JSEL的设值功能。
http://code.google.com/p/lite/wiki/CPEL
曾经也用它来做国类似webwork的servlet 参数=》JavaBean属性的自动转换,我想,用它来代替Struts2的OGNL应该也没什么问题吧,只是目前还没有试过。
JSEL的设计,有时间在专门写个帖子吧,呵呵
6 楼
weir2009
2010-08-09
我觉得还是能说明点儿问题的。
5 楼
kimmking
2010-08-09
jindw 写道
downpour 写道
这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
这确实是一个不够完善的测试数据。
差距确实也很明显,我想其他的数据应该类似吧。
我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。
人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。
jsel支持设值吗?
另外比较关注,lz能不能讲讲 jsel的设计~
thx
lz跟我的名字比较像
4 楼
jindw
2010-08-09
downpour 写道
这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
这确实是一个不够完善的测试数据。
差距确实也很明显,我想其他的数据应该类似吧。
我们也没有必要太纠葛于表达式性能了。多重视易用性更合适一点。
人家ognl慢又怎么样,慢你成百上千倍,近十年来,大家不也用的挺爽的,没有那个说要再快点嘛。呵呵。
3 楼
downpour
2010-08-09
这个执行效率的比较暂时停留在表达式求值领域,不知道在下面2个领域的表现如何:
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
1. 在复杂的对象树的求值上(多级对象级联、包含数组等)
2. 反向设值的过程 —— 通过表达式+字符串,往Java对象中设值
发表评论
-
JSEL的JSON工具添加日期格式支持
2010-08-15 22:52 1950今天中午看见 hjg1988的关于JSON工具性能测试的帖子, ... -
表达式引擎JSEL介绍
2010-08-08 23:38 6759表达式引擎的定义这里我就不说了,先假设大家都知道^_^ 在 ... -
写了一个基于WiFi 的 Android 手机文件管理程序
2009-08-23 22:50 2700昨天晚上把机器上几首老歌下到手机上,结果几个文件名全乱码了,下 ... -
Google AppEngine 上开发做Java需要注意的问题
2009-04-12 18:36 1123这两天在搞Lite XML支持Google AppEngine ... -
午夜3点半,我的第一个Java版AppEngine运用诞生了。
2009-04-10 03:37 3216地址: http://litecompiler.appspot ... -
在eclipse平台上用xml schema 语法轻松打造Lite XML编辑器
2009-03-03 19:50 2925首先,不要被标题误导,我这里不是在讨论Eclipse插件开发。 ... -
一次同步不当的bug记录。
2009-02-25 19:31 1019昨天晚上,收到QA报告 ... -
决定对JSEL属性计算做一点修改
2009-01-25 19:33 1389目前的JSEL表达式计算过程中,有一点与ECMA差别比较明显: ... -
简化一下我们那个日渐臃肿的Webwork
2008-12-21 21:10 1256很喜欢Webwork的简洁优雅。 实在不忍心看着他一天天的变得 ... -
几款模板引擎的性能对比
2008-12-12 11:33 27266原作者,allskystar 参评的几款模板引擎为: X ... -
JSON解析新办法:JSEL
2008-11-01 23:45 4958JSON解析和系列化功能,JSON官方网站是提供了官方的Jav ... -
关于逆波兰式处理表达式的问题。
2008-10-12 15:58 1781想写一个基于逆波兰式的表达式解析程序。 支持简单运算、属性读取 ... -
开始有点讨厌hibernate了
2008-06-14 23:19 2040确实,hibernate很好很强大。 但是我的每一次更新版本 ... -
关于Eclipse 下的Ant FTP操作
2008-04-25 21:05 2802编写一个部署脚本,需要吧打包的war文件上传到服务器上。 以 ... -
eclipse正则表达式在编码过程中的运用
2007-11-10 18:19 3528刚刚经历的一点小技巧,共享一下。 1。给代理函数加上空判断 ... -
这是hsqldb的bug?还是自己的用法不对。
2007-10-17 20:29 3617被一个貌似hsqldb bug的问题折磨了好几个小时。 把经过 ... -
Re: Java基本类型的疑问
2007-07-25 10:50 3027java虫 写道网上看得一些文章 int a = 3; ... -
代码生成工具示例工程
2007-07-06 13:49 9581大约两年前私下编写一 ... -
发布一个有点古老的代码生成工具
2007-06-29 17:21 5238已经有一年多没做java这块了,今天翻出这个一年前写的代码生成 ... -
中国象棋的webstart小程序
2007-06-14 10:42 4271刚发布JSA的webstart版,顺便吧这个古董级别的小程序也 ...
相关推荐
Java SpEL、OGNL(Object-Graph Navigation Language)和MVEL是三种常见的表达式语言,它们在Java开发中被广泛用于动态逻辑的处理和对象属性的访问。在本项目中,我们将深入探讨这三个表达式语言的用法以及如何在...
### JS:ognl表达式详解 #### 一、OGNL表达式概述 OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛...
**表达式语言(EL)与OGNL概述** 表达式语言(EL)是用于在Java应用程序中简洁地访问和操作对象属性的一种方式。它允许开发者通过简单的语法来读取和设置对象的属性,调用方法,以及执行其他面向对象的操作。在Java EE...
OGNL表达式在执行时需要一个上下文环境(Context),这个上下文环境通常是一个Map结构。在Struts2中,具体的上下文环境是`ActionContext`。`ActionContext`中的结构如下: - **request**:当前的HTTP请求。 - **...
它具备快速执行的能力,与ognl等其他流行表达式引擎相比,具有更高的性能。 #### 二、核心概念 - **EL (Expression Language)**: 表达式语言,用于求解特定表达式的值。 - **AST (Abstract Syntax Tree)**: 抽象...
#### 四、OGNL表达式的具体用法 OGNL表达式通常结合Struts2的标签一起使用,比如使用 `<s:property value="expression"/>` 来展示数据。在使用过程中,需要注意#、%和$这三个符号的正确使用: - **#**:通常用于...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。在版本3.0.6中,它提供了对Java对象图的灵活导航、动态方法调用以及数据绑定等功能。这个压缩包可能包含了OGNL库...
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。"struts2对Ognl的封装--PropertyAccessor"这个主题主要涉及Struts2框架如何处理OGNL表达式,特别是如何...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是Web开发中的框架,如Struts 2。它允许开发者简洁、直观地访问和操作对象图,即对象之间的关联关系。理解并熟练掌握...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表示层的数据交换。这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心...
而OGNL(Object-Graph Navigation Language)是Struts2中使用的一种强大的表达式语言,用于在视图层和模型层之间传递数据。在本案例中,我们将深入探讨OGNL表达式的用法及其在Struts2中的应用。 首先,OGNL是一种...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于Spring框架和其他许多Java应用中,用于数据绑定和表达式评估。本篇将详细介绍OGNL的使用方法及其...
OGNL是一种强大的表达式语言,允许开发者通过简单的字符串表达式来访问和修改对象图。在Struts2中,OGNL用于在Action和视图之间传递数据,以及在表单提交后自动将请求参数映射到Action属性。 OGNL表达式的基本语法...
OGNL是一种强大的表达式语言,它不仅支持对象属性的访问,还能够执行复杂的表达式计算。OGNL允许开发者通过简单的字符串表达式来获取或设置对象的属性,甚至调用方法、操作数组和集合等。例如,`user.name`可以用来...
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层和模型层之间进行数据绑定和表达式计算。本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的...
在IT行业中,EL(Expression Language)和OGNL(Object-Graph Navigation Language)是两种常见的表达式语言,它们在Web开发中扮演着重要角色,尤其是在Java EE和Spring框架中。这两种语言都用于简化数据绑定和...
ognl表达式的详细教学描述,介绍如何使用ognl表达式和ognl的运行原理