网站大量收购独家精品文档,联系QQ:2885784924

学习OGNL在Struts2中工作原理.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学习OGNL在Struts2中工作原理

学习OGNL在Struts2中工作原理 为了详细些一步一步做记录吧。 先说OGNL,OGNL内部自己会维护一个OGNL上下文(OgnlContext)是一个实现了Map接口的对象,OGNL会将对象放在这个上下文中统一管理的,并且会有一个对象被指定为根对象(root)。假设有User和Customer这么两个类,分别有user和customer两个实例,这两个对象都有一个name属性,并且将user对象配置为唯一的根对象,那么就会有下面的情况: #user.name 返回user.getName(); #customer.name 返回customer.getName(); #name 返回user.getName(); 因为user对象为根对象 OGNL访问对象的基本机制就是这样的。 在XWork中,ValueStack对象是上下文中的根对象,XWork中不仅可以根据表达式从ValueStack对象中获取对象,还可以获取对象的属性,XWork自己有一个强大的属性访问器,它可以自动搜索栈内的所有实体(从上到下),直到找到你所访问的对象和属性。假设ValueStack栈中有两个上面所说的user和customer两个对象,并且user是栈顶元素,customer在下面,就会有下面的情况: name 返回user.getName(); 因为user在栈顶,搜索器找到一个匹配的属性就不会继续找下去 如果希望访问靠后对象的属性XWork提供了索引访问ValueStack的方法: [0].name 返回user.getName() [1].name 返回customer.getName(); 了解上面这些之后Struts2中的OGNL就很好理解了,Struts2框架也没有对XWork中的OGNL做太大的修改,只是拿过来做了一下整合工作,Struts2将ActionContext设置为OGNL中的上下文,ValueStack依然是OGNL上下文中的根元素,大家知道application,session和request这几个对象也是在ActionContext中的,它们是和根对象ValueStack共存的,与根对象是无关的,就像刚开始说OGNL那个例子实在OGNL上下文中的两个平行对象,只不过ValueStack这个对象是这个OGNL上下文中的根对象(root)。如果要访问上下文中根对象中的对象和属性是不用加任何标记符号的,但是在访问application,session和request这几个范围内的对象和属性就要用#符号来告诉ognl不要在根对象中去搜索了,而是去我们指定的上下文中去找。用官方一个图来形象描述ValueStack和其他几个对象的关系: |--request | |--application | context map---|--OgnlValueStack(root) | |--session | |--attr | |--parameters 基本原理就是这样了,举例验证理论。 1. ActionContext是OGNL的上下文,ValueStack对象是上下文中的根对象: 随便找一个Action给JSP页面传东西过去的例子,然后在Action的execute()方法中加入以下代码: ActionContext.getContext().getValueStack().set(test, love java); 在目标JSP页面空白处加上如下代码: s:label value=%{test}/s:label 再次跳转到该页面就可以看到love java出现在页面上了 2. 其他范围和ValueStack平行关系: 还找刚才那个例子,在Action中加入 request.setAttribute(test1, love java1)

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档