`

ActionContext、ValueStack、OGNL

阅读更多
本文简要介绍struts2中几个核心的组件ActionContext、ValueStack、OGNL表达式

1、ActionContext

当struts2框架接收到一个HTTP请求时,它立刻创建一个ActionContext、ValueStack、Action对象

ActionContext里有6个对象,分别是valueStack、parameters、request、session、application、attr

一个OGNL表达式,必须选择ActionContext中的一个对象作为根对象(root),默认情况下,是选择valueStack作为根对象,如果需要使用另外5个对象作为根对象,需要加上#前缀

例如:
<s:property value="#session.xxx" />

如果不加#前缀,则默认使用valueStack作为根对象,这也是最常见的情况,即#valueStack.xxx,相当于xxx

2、ValueStack(值栈)

ValueStack中可以存储很多对象,它的一个特性是,它是一个虚拟对象,它可以将自己持有的对象的属性,当成是自己的属性

比如说,ValueStack中有一个Action对象,而Action对象有一个name字段。那么当用OGNL表达式取name的值的时候,不需要${action.name},而是可以直接${name}

ValueStack是一个栈的数据结构(FILO),最后进入值栈的对象,总是在ValueStack的栈顶,这个结论很重要,因为栈顶的元素的值,会覆盖栈底的同名元素的值。

比如说,ValueStack的栈底是一个Action对象,持有一个name字段;栈顶是一个Model对象,也持有一个name字段,那么用${name},取出来的永远是Model对象的name字段,Action对象的name字段是不可见的

3、OGNL表达式

这个可以分为2种场景,一种是在<s:>标签的属性里(比如<s:property value="" />),一种是在jsp页面的其他地方

在<s:>标签的属性里时,要看这个属性定义的类型是什么,如果是string类型,那么属性的值会被当做普通的string,如果不是string类型,那么属性的值会被直接当成OGNL的表达式

比如说<s:property value="" />,这个标签的value属性的类型是object,那么这个value的值,就会被直接作为OGNL表达式进行解析

如果想在string类型的属性中使用OGNL表达式,就需要加上${}或者%{}

在jsp页面的其他地方时(即不在<s:>标签内部),任何情况下都会当成string来处理,这时候如果想使用OGNL表达式,也需要加上${}或者%{}

4、关于${}和%{}的区别

根据文档里的描述,OGNL表达式应该用%{}来表示。可是我在实际应用中,基本不会使用<s:>标签,并且都是用${}来取值的,也没有发现任何不妥,不知道是不是版本的原因
分享到:
评论

相关推荐

    struts2中的ActionContext与ognl

    在视图层,开发者可以使用OGNL表达式从ActionContext的ValueStack中获取数据,从而动态地构建视图。而在控制器层,Action类的属性可以通过ActionContext的ValueStack与HTTP请求参数进行绑定,或者在Action的执行过程...

    s20505_valueStack_OGNL

    2. **ActionContext**:与ValueStack密切相关的是ActionContext,它包含了当前请求的上下文信息,包括ValueStack、Session、Request和Application等数据。 3. **动作方法与结果转发**:Action类中定义的方法通常对应...

    JavaEE ActionContext存取数据示例

    在ActionContext中,ValueStack是默认的表达式语言引擎,因此,我们可以通过ActionContext来操作ValueStack,进而利用OGNL表达式进行数据存取。 例如,假设我们有一个名为`UserAction`的Action,其中包含一个`User`...

    ognl表达式 ognl表达式

    在Struts2中,OGNL的核心组件之一是`ValueStack`,它充当了OGNL表达式的数据源。`ValueStack`是一个存储数据的栈结构,包含了所有的模型对象以及请求、会话和应用范围的数据。开发者可以通过EL表达式直接访问`...

    struts2OGNL表达式ActionContext及valuesStack.pdf

    总的来说,Struts2的OGNL表达式和ActionContext以及ValuesStack的设计使得数据访问更加灵活和高效。开发者可以方便地在控制器、视图和模型之间穿梭,进行复杂的表达式计算和对象属性操作,同时保持代码的简洁和...

    `Strtus2 OGNL表达式的结合

    在Struts2中,OGNL与ActionContext和ValueStack紧密集成。ActionContext是一个上下文对象,它包含了当前请求的所有环境信息,包括请求参数、session、应用上下文等。在OGNL表达式中,ActionContext作为Context,提供...

    ValueStack使用参考

    ValueStack是Struts2框架中的核心组件之一,它是ActionContext和ActionInvocation之间的一个数据传递层,负责在Action与视图之间传递和管理数据。ValueStack的作用在于简化模型-视图-控制器(MVC)架构中的数据交互...

    OGNL表达式语言.txt

    当Struts2接受一个请求时,会迅速创建ActionContext,ValueStack,action。然后把action放进ValueStack,所以action的实例变量可以被OGNL访问。 访问上下文中的对象需要使用#符号标注命名空间,如#application、#...

    struts2中OGNL的一些概念及原理说明

    除了`ActionContext`之外,`ValueStack`也是一个重要的工具类,它与`ActionContext`一起创建,并同样存储在`ContextMap`中。通过`ActionContext.getValueStack()`方法可以获取`ValueStack`对象。 1. **ValueStack的...

    OGNL百度百科OGNL百度百科

    在 Struts2 中,OGNL 需要与 ValueStack 进行交互,以方便在 JSP 页面中直接通过 EL 方式访问 ValueStack 中的对象。ValueStack 是一个保存所有请求数据的对象栈,它包含了一个或多个根对象。 例如: - `${foo}` ...

    struts2对Ognl的封装--PropertyAccessor

    - Struts2中OGNL与Action、ValueStack的关系。 - OGNL的安全性问题,如OGNL注入攻击,以及如何防范。 在压缩包文件`struts-ognl.asta`中,可能包含了一些示例或测试用例,用于演示Struts2中PropertyAccessor的使用...

    ognl.rar_OGNL API_struts2 ognl api_struts2帮助文档

    5. **OGNL与Struts2的集成**:Struts2是如何将OGNL与Action、ValueStack和结果视图模板结合的。 6. **OGNL的异常处理**:遇到错误时,如何理解和解决OGNL表达式抛出的异常。 7. **最佳实践**:如何优化OGNL的使用...

    学习OGNL在Struts2中工作原理

    在Struts2中,OGNL的执行环境由ValueStack提供。ValueStack是一个特殊的对象容器,它可以存储多个对象,并且支持通过OGNL表达式来访问这些对象。 - **ValueStack的作用**: - 作为OGNL的根对象,提供了一个统一的...

    Struts2深入学习----OGNL表达式原理

    在Struts2的ActionContext中,OGNL查找值栈(ValueStack),这是一个存储所有请求相关对象的数据结构。值栈顶部的对象通常为Action实例,OGNL表达式会在此对象及其关联的对象图中查找属性。 Struts2的标签库也广泛...

    Struts2访问request,session,application的四种方式

    总结来说,Struts2提供了多种途径来访问和管理request、session和application的数据,包括ActionContext、ValueStack、OGNL和拦截器。掌握这些方法将有助于提高开发效率和代码质量,同时也能更好地理解和优化基于...

    struts2官方表达式ognl源码

    - **上下文感知**:OGNL根据当前上下文环境解析表达式,如在Struts2中,它可以访问ActionContext中的值栈。 **2. OGNL在Struts2中的作用** 在Struts2框架中,OGNL负责数据绑定和表达式求值。当用户提交表单时,...

    在线培训:ValueStack

    ValueStack是Struts2框架的核心组件之一,它是一个存储ActionContext中的值的对象栈。ValueStack的主要功能是处理视图和模型之间的数据传递。在Struts2中,Action类的属性可以直接映射到JSP页面上的标签,这是因为...

    struts2标签和OGNL表达式

    栈顶对象是指在ValueStack(值栈)中位于最顶层的对象,ValueStack是一个特殊的对象列表,它包含了一系列的Action对象,便于OGNL查找和访问属性。 ValueStack是Struts2的核心组件,它是一个OgnlValueStack实例,...

    Struts2的三种传值方式比较(附demo)

    总结来说,Struts2的传值方式包括Action属性、ValueStack和Ognl以及ActionContext与请求/Session域的使用。选择合适的方式取决于业务需求和代码的可维护性。了解并熟练掌握这些方法,对于提高Struts2应用的开发效率...

    linjin101#javaStudy#Struts2中的OGNL和值栈ValueStack1

    1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据

Global site tag (gtag.js) - Google Analytics