这段时间学习了两种EL,和OGNL都是表达式,然后对两者的不同进行学习,在网上还搜到了询问两者不同的面试题,自己也决定好好的学习一下
jstl是JSP标签,有点像html的标签。 ognl与el功能类似,都是表达式语言。 ognl是在webwork2.0和struts2.x中取代el的。 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,OGNL是一个开源项目,读者可以访问其官方站点以获得源代码和相关资料。OGNL是一种功能强大的EL(Expression Language,表达式语言),可以通过简单的表达式来访问Java对象中的属性。
从这段话上我们貌似感觉OGNL比EL强大,可以取代EL,但实际应用却不是这样
一般来说
jstl标签搭配el用,需要在jsp头部配置,jstl用来取值,而el用来展示。el也可直接取值展示作用域里对象变量。 struts标签一般与ognl配合使用
但是
Struts推荐使用功能更加强大的Ognl表达式。El可以完成的功能,Ognl也可以,El不能完成的功能,Ognl也可以。 我们可以有两种解决方案:(其实还有一个重要因素是整个项目的风格)
1.使用struts2自带的标签库,jsp中使用ognl进行操作。
2.不是用struts2自带的标签库,jsp直接结合jstl el进行操作。
jsp2.0中默认启动对el表达式的支持的。但从Struts2.0.11起,Struts2标签库将不再支持El表达式。
struts2.0.11版本不支持el,因而以前在低版本下写和程式将不能正常运行:
关于这个方面,可以参考http://baiyan425.blog.51cto.com/1573961/777413
再说说两者的区别:
其实除了语法不一样外,最主要的是两点
1.OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="#xx" /> struts页面中不能单独使用,el可以单独使
用 ${sessionScope.username}
2.EL表达式能用在内部文件的js里
关于这两点可以参考http://blog.csdn.net/lidiansheng/article/details/7902400
当然最后还是要贴出来两者的用法
http://blog.csdn.net/sd0902/article/details/8393099
再具体的用法希望读者自己去搜一下,有很多,其中比较关键的是$在jsp中只能用于EL,一部分原因是不能跟OGNL冲突