第5章-OGNL表达式和值栈-教学课件.ppt

第5章-OGNL表达式和值栈-教学课件.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * OGNL的getValue()方法中有两个参数:第一个参数是表达式。表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。所有OGNL操作都是针对表达式解析后进行的。它表明了此次OGNL操作要“做什么”。表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持这种“链式”对象访问路径,还支持在表达式中进行简单的计算。 表达式 1 5.1 OGNL表达式 表达式 OGNL的getValue()方法中的第二个参数就是Root对象,Root对象可以理解为OGNL的操作对象,表达式规定了“做什么”,而Root对象则规定了“对谁操作”。OGNL称为对象图导航语言,所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象。 案例代码 接下来,通过一个案例来演示Root对象,如文件5-1~5-4所示。 Root对象 2 5.1 OGNL表达式 表达式 实际上OGNL的取值还需要一个上下文环境。设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作“在哪里进行”。上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用“#”号加上对象名称,即“#对象名称”的形式。 Context对象 案例代码 接下来,通过一个案例来演示Context对象。 Context对象 3 5.1 OGNL表达式 OGNL表达式是通过“对象名.方法名()”的形式来调用对象方法表达式的,如果是调用根对象的方法,可以直接使用方法的名称来调用,其调用语法如下所示: OGNL访问对象方法 Ognl.getValue("方法名", 对象名); 案例代码 接下来,通过一个案例来演示OGNL如何在java代码中调用对象方法,如文件5-5所示。 5.1 OGNL表达式 开启支持的方法是在struts.xml中进行如下配置,配置方式如下所示: <constant name="struts.ognl.allowStaticMethodAccess" value="true"> </constant> OGNL同时支持静态方法和静态属性的调用,其语法格式如下: OGNL访问静态方法和静态属性 @类的全路径名@方法名称(参数列表) @类的全路径名@属性名称 需要注意的是,在低版本的Struts2中,默认开启了访问类静态方法的支持,但是高版本的Struts2中,默认是关闭了这项支持的,也就是说要想访问类的静态方法,需要手动开启设置。 案例代码,如文件5-6~5-9所示 5.1 OGNL表达式 值栈就是OGNL表达式存取数据的地方,Struts2是在有请求到达的时候为每个请求创建一个新的值栈,也就是说值栈和请求是一一对应的,值栈封装了一次请求所需要的所有数据,这种一一对应的关系使值栈能够线程安全的为每个请求提供公共的数据存取服务。 值栈的作用是,用于在前台-后台之间传递数据,最典型的做法就是将Struts2标签与OGNL表达式的结合,ValueStack(值栈)实际上是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是OGNL的基础。 什么是值栈? 5.2 值栈 值栈对象的生命周期 ValueStack的生命周期是随着request的创建而创建,随request的销毁而销毁。 5.2 值栈 值栈对象的两种获取方式 在request中获取值栈 在ActionContext中获取值栈 值栈封装了一次请求所需要的所有相关数据,要获取值栈中存储的数据,首先应该获取值栈。 5.2 值栈 request中获取值栈 ValueStack对象存储在request范围内,名称为“struts.valueStack”,也就是说ValueStack的存储方式为: ValueStack valueStack = (ValueStack)ServletActionContext.getRequest() .getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY); request.setAttribute(“struts.valueStack”,valuestack对象); 这样一来就可以从request中取出值栈的信息,获取方式如下所示: 该常量的值是“struts.valueStack” 5.

文档评论(0)

moon8888 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档