OGNL与struts2
OGNL
什么是OGNL?
Object-Graph Navigation Language 对象视图导航语言 el jsp
Jsp里面有九大内置对象
requestScope、responseScope、SessionScope、applicationScope、 、pageScope、 pageContext、 params、paramValuse
九大内置对象对应的就是Servlet里面的对象
EL是为了方便这九大内置对象中取值
OGNL和 EL没有任何关系,只是有点类似。
Ognl表达式语言的作用:
· jsp页面取值用
· EL表达式语言,也用于页面取值,是jsp页面取值的标准(默认就可以使用)
· Ognl表达式语言,Struts标签默认支持的表达式语言,必须配置Struts标签用,不能离开Struts标签直接使用,就是说Ognl必须在Struts中使用
· 对比来看,EL使用范围更广,项目中不限制使用哪一种,哪一种熟悉就使用哪一种
EL表达式:
>>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.
>>如果在struts环境中,它除了有在上面的四个作用域的取值功能外,还能从值栈(valuestack)中取值.
>>特点1:${name},name在值栈中的查找顺序是:先从对象栈中取,取到终止,否则,向map中取。
>>特点2:在对象栈的查找顺序是,先从model中找是否有name这个属性,找到终止,否则,找action中是否有name这个全局变量。
>>特点3:${#name},里面的是不带#号的。
>>特点4:如果放在对象栈中的是一个自定义的对象,那么${property}里面可以直接去该对象的属性值,不用这样${object.property}
OGNL表达式:
1:读取从后台传递的值
%{#name}:表示从值栈的map中取值
%{name}:表示从值栈的对象栈中取值
%{#request.name}:表示从request域中取值
2:自己构建数据
a,构建Map<s:iterator var="map" value="#{'key1':'value1','key2':'value2'}"/>
b,构建List<s:iterator var="list"value="{'one','two','three'}">
Struts2 与OGNL的结合
Struts2提供了一个类 valueStack
valusStack 分成两个部分 一部分叫root 一部分叫context
root存的是当前的Action类
context存ActionContext里面所有的内容
Struts2用来接收参数的方式:给Action添加一个属性,该属性会放到valueStack中的root部分,通过OGNL的方式进行赋值。
Struts架构
Struts2核心:拦截器
Struts2的优点:
可插拔式设计:可以自定义功能到struts2中
AOP思想:面向切面编程
Struts2架构
Struts2核心:拦截器
Struts2的优点:
可插拔式设计:可以自定义功能到struts2中
AOP思想:面向切面编程