- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)
您可能关注的文档
- 做一个有责任心的老师.doc
- 第5章 5.2ISI Web of Knowledge.ppt
- 高一级一节励志班会课PPT.ppt
- 2数据查询_简单查询.ppt
- 2.通过激素的调节.ppt
- 2011年凌河村“党群共富”年终总结.doc
- 国产整经机实现智能化.doc
- 人教版必修五第一次月考试题.doc
- 第4章框架和表单.ppt
- 题目:程序设计题2---学生信息管理系.doc
- 行业深度报告:保障房REITs专题报告:租赁住房REIT陆续入市,优质资产助力搭建房地产新模式.pdf
- 新世纪 -美对加墨加征关税 中国今年GDP增长目标5%左右——全球宏观经济周报(20250301-20250307).pdf
- 银行数字化转型存在马太效应吗? ——基于银行功能的经验阐释.pdf
- 互联网10年本质思考-雷军篇.pdf
- 信息无障碍动态(2025年第2期).pdf
- 电通发布Hashtag系列报告(上):解码文化.docx
- 服装借助AI解放生产力+智能客服+欧税通CTO.docx
- 活动策划 -2025心动爆灯派对214情人节(爱意沸腾 心动爆灯主题)活动策划方案-.docx
- 2024年华为汽车分析报告:从技术供应商到生态使能者的转型之路 -头豹.pdf
- GenAI网页数据2024年度报告.docx
文档评论(0)