`

Struts2之值栈[ValueStack]

 
阅读更多

 

ValueStack(值栈)

 

贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个 ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前 Action 对象和其他相关对象. Struts 框架把 ValueStack 对象保存在名为 “struts.valueStack” 的请求属性中

 

在 ValueStack 对象的内部有两个逻辑部分

 

1. ContextMap[Map栈]

 

Struts 把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中.  实际上就是对 ActionContext 的一个引用

 

Struts 会把下面这些映射压入 ContextMap 中

 

parameters: 该 Map 中包含当前请求的请求参数

request: 该 Map 中包含当前 request 对象中的所有属性

session: 该 Map 中包含当前 session 对象中的所有属性

application:该 Map 中包含当前 application  对象中的所有属性

attr: 该 Map 按如下顺序来检索某个属性: request, session, application

 

ObjectStack[对象栈]

 

Struts 把Action 和相关对象压入ObjectStack 中


 

隐含request对象

 

在JSP页面用request对象:<%=request%>可以打印出此时的request对象,发现是org.apache.struts2.dispatcher.StrutsRequestWrapper@8b73a2。此类重写了getAttribute方法。此方法不再是直接从ServletRequest中获取属性,而是从值栈中获取。

 

<s:debug></s:debug>

 

通过加入struts2标签库<%@ taglib prefix="s" uri="/struts-tags" %>,可以用<s:debug></s:debug>来跟踪值栈动态。

 

使用 EL 访问值栈中对象的属性 

 

<s:property value=“fieldName”> 也可以通过 JSP EL 来达到目的: ${fieldName}

原理: Struts2 将包装 HttpServletRequest 对象后的 org.apache.struts2.dispatcher.StrutsRequestWrapper 对象传到页面上, 而这个类重写了 getAttribute() 方法.   

 

源代码解读[个人理解]

 

request对应的类为org.apache.struts2.dispatcher.StrutsRequestWrapper,此类是HttpServletRequestWrapper的包装类,主要作用是重写getAttribute方法。在getAttribute方法中,或到值栈中获取属性。值栈对应的类是com.opensymphony.xwork2.util.ValueStack,其具体实现为com.opensymphony.xwork2.ognl.OgnlValueStack。值栈由两个主要的属性CompoundRoot root和Map<String, Object> context。其中,root用户放置请求的交互数据,包括基本类型和对象类型等。context为值栈的上下文,用于存放parameters,request,session.application等数据。

 

  • 大小: 11.6 KB
分享到:
评论

相关推荐

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

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

    Struts2值栈的理解

    Struts2 值栈的理解 Struts2 值栈是 Struts2 框架中的一种核心机制,负责存储和管理 Action 中的数据。在 Struts2 中,每个 Action 类都有一个 ValueStack 对象,该对象贯穿整个 Action 的生命周期。在 Struts2 ...

    struts2的值栈

    用一个小小的flash来形象的演示struts2中值栈的操作过程,非常直观!

    Struts2中关于ValueStack的一些操作

    1、 ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。 2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是...

    马士兵Struts2笔记2013

    为了调试目的,可以开启Struts2的值栈调试功能,查看栈中的内容,帮助开发者了解当前请求的状态和数据流。 9. **Struts2访问Web元素** Struts2可以通过OGNL(Object-Graph Navigation Language)轻松地访问和操作...

    Struts用的ognl和valueStack(vs)实例

    **Value Stack:值栈** Value Stack是Struts2的核心组件,它是一个后进先出(LIFO)的数据结构,用于存储Action对象和其他可操作的数据。Value Stack的主要作用有: 1. **数据容器**:所有的Action对象都被压入...

    在线培训:ValueStack

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

    struts2模拟

    struts2模拟模拟工具,可以实现action访问,我表单属性的自动封装。提供了页面显示和跌带器,利用struts2值栈(valueStack)和对象栈map栈的思想。可以用来了解struts2的执行过程,纯属个人学习

    struts1和struts2的区别

    在视图层,Struts1依赖JSP标准机制绑定对象,而Struts2采用ValueStack技术,允许taglib访问值栈中的值,无需在视图和对象之间建立硬绑定,提高了代码复用性。 类型转换方面,Struts1的ActionForm属性通常是字符串,...

    struts2从入门到精通总结(备忘)

    本总结将深入探讨Struts2的核心概念、配置、Action的创建、数据操作、值栈以及拦截器的使用,旨在帮助初学者快速上手并深入理解Struts2。 一、Struts2入门 Struts2作为Apache软件基金会的一个项目,是Struts1的升级...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理

    Struts2 的核心组件还包括值栈(ValueStack),它是用来在控制器和视图之间传递数据的一个临时存储结构。开发者可以在Action类中将数据压入值栈,然后在JSP页面中使用OGNL(Object-Graph Navigation Language)...

    Struts2入门小程序

    此外,Struts2还支持模型驱动(ModelDriven)和值栈(ValueStack)概念,使得数据绑定变得更加简单。ModelDriven模式将Action类与业务对象关联,而值栈则提供了数据共享和存储的机制。 最后,Struts2与Spring框架的...

    struts2API

    4. **ValueStack(值栈)**:这是一个对象栈,用于在Action和视图之间传递数据。使用OGNL(Object-Graph Navigation Language),开发者可以方便地访问和修改栈中的对象属性。 5. **Result(结果)**:结果决定了...

    struts2 标签库使用文档

    Struts2标签库的组成 ...数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。 AJAX标签:用于支持Ajax效果

    赵栋struts2 笔记

    - 第二种:通过ServletActionContext对象结合HttpServletRequest获取,`ValueStack valueStack2 = ServletActionContext.getValueStack(ServletActionContext.getRequest());` - 第三种:直接从HttpServletRequest...

    Struts1和Struts2的区别和对比

    页面绑定方面,Struts1依赖JSP标准机制,而Struts2采用ValueStack技术,允许taglib直接访问值栈中的对象,无需在视图和对象之间建立直接绑定,提高了重用性。 在类型转换上,Struts1的ActionForm属性通常是String...

    struts2-blank

    在Struts2框架中,核心组件包括Action、Interceptor、Result、ValueStack等。Action是业务逻辑的执行者,Interceptor是拦截器,用于在Action执行前后进行额外的操作,如日志记录、权限检查等。Result则是Action执行...

    struts2权威指南

    在模型部分,Struts2支持值栈(ValueStack)的概念,这是存储Action属性和结果的地方,同时也方便了视图层的数据绑定。OGNL(Object-Graph Navigation Language)是Struts2中的默认表达式语言,用于在Action与JSP...

    struts2框架模板

    - **ValueStack**:用于存储Action对象和其他值,支持OGNL(Object-Graph Navigation Language)表达式,方便数据绑定。 3. **配置文件** - **struts.xml**:主要的配置文件,定义Action、结果类型、拦截器栈等。...

    struts2基本知识

    Struts2通过值栈(ValueStack)管理请求范围内的数据,这使得开发者能够在控制器和视图之间传递数据变得非常简单。 ##### 1. 值栈(ValueStack) - **自动注入**: 当用户提交表单时,表单的数据会被自动填充到对应的...

Global site tag (gtag.js) - Google Analytics