`

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的值栈

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

    Struts2中关于ValueStack的一些操作

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

    马士兵Struts2笔记2013

    建立一个Struts2 工程,用Action的属性接收参数,使用Domain Model (实体模型) 接收参数,Struts2_2.1.6版本的中文问题,Struts模块包含,Struts简单数据验证 ,Struts ValueStack(值栈) Debug,Value Stack ...

    struts2模拟

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

    struts2 标签库使用文档

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

    栈的简单代码

    值栈(ValueStack)是Struts2的一个核心概念,类似于正常的栈,符合后进先出的 栈的特点,可以在值栈中放入、删除和查询对象。Strtus2对OGNL进行了扩充,将值栈作为OGNL的根对象。 什么是值栈?符合先进后出的特点,能给...

    Struts2入门教程(全新完整版)

    1.值栈入门 22 2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的构造方法 25 7.集合对象初步 25 8.集合对象进阶 25 9.N语法top语法 26 10.获取Stack Context中的信息 26 11...

    在线培训:ValueStack

    培训主要学习以下几个知识点: 1、制作PPT,讲解栈的特点和使用方法 2、编码实现回文对 3、制作PPT,讲解Struts2中的ValueStack 4、编码改变ValueStack中的对象的顺序

    OGNL表达归纳

    3.由于ValueStack(值栈)是Struts 2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性 4.为何使用EL表达式能够访问valueStack中对象的属性 原因...

Global site tag (gtag.js) - Google Analytics