Struts2与OGNL:深入理解ValueStack

需积分: 6 5 下载量 2 浏览量 更新于2024-07-13 收藏 1.96MB PPT 举报
"本文主要介绍了Struts2中的ValueStack和OGNL表达式,重点讲解了它们在框架中的作用和使用方式。ValueStack是Struts2处理请求和展示数据的核心组件,而OGNL则是Struts2中的表达式语言,用于方便地访问和操作对象的属性。" 在Struts2框架中,ValueStack是一个接口,它的实现类OgnlValueStack是处理请求和视图数据交换的关键。ValueStack的结构包括了四个基本范围:application、session、request和parameters,以及一个特殊的attr属性,这些范围按照特定的查找顺序来访问数据。其中,最重要的属性是root,它是一个ArrayList,通常包含了Action实例。Action实例在被创建后会被放入ValueStack的root中,使得在视图层可以直接通过Action属性名来访问,而无需使用#号前缀。 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于读取和设置Java对象的属性,调用方法,以及遍历对象图。在Struts2中,OGNL被用来简化Action数据的访问,如在JSP页面中直接通过`user.username`来获取或显示Action的user对象的username属性,比传统的Java脚本方式更加简洁。OGNL的强大之处在于其支持类型转换、方法调用、集合投影和动态lambda表达式等高级特性。 OGNL的上下文(Context)是一个Map对象,由ognl.OgnlContext类实现,它包含了默认的顶层对象root,即ValueStack的root。在解析OGNL表达式时,会从这个上下文中查找对象和属性。例如,当我们使用`user.username`时,OGNL首先会在Context的root中查找user对象,然后访问其username属性。如果需要访问其他范围的对象,如session或request中的属性,可以通过`#session`或`#request.user.username`这样的表达式来实现。 Struts2对OGNL进行了增强,允许开发者更便捷地在视图层与模型层之间交互。例如,可以使用OGNL表达式在Action中设置属性,然后在JSP页面中直接显示,极大地提高了开发效率和代码的可读性。此外,Struts2还提供了丰富的标签库,如`s:property`,这些标签内部就使用了OGNL来解析和展示数据。 ValueStack和OGNL是Struts2框架的核心组件,它们协同工作,使得开发者能够轻松地处理请求、操作对象和呈现视图。通过理解这两个概念,开发者可以更好地掌握Struts2的工作原理,并有效地构建基于Struts2的应用程序。