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思想:面向切面编程


OGNL与struts2OGNL与struts2