`

理解struts2 的值栈

阅读更多
(转)
Strut 2的Action类通过属性可以获得所有相关的值,如请求参数、Action配置参数、向其他Action传递属性值(通过chain结果)等等。要获得这些参数值,我们要做的唯一一件事就是在Action类中声明与参数同名的属性,在Struts 2调用Action类的Action方法(默认是execute方法)之前,就会为相应的Action属性赋值。
     要完成这个功能,有很大程度上,Struts 2要依赖于ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。只是所有的属性值都是默认的值,如String类型的属性值为null,int类型的属性值为0等。
    在处理完上述工作后,Struts 2就会调用拦截器链中的拦截器,当调用完所有的拦截器后,最后会调用Action类的Action方法,在调用Action方法之前,会将ValueStack对象顶层节点中的属性值赋给Action类中相应的属性。大家要注意,在这里就给我们带来了很大的灵活性。也就是说,在Struts 2调用拦截器的过程中,可以改变ValueStack对象中属性的值,当改变某个属性值后,Action类的相应属性值就会变成在拦截器中最后改变该属性的这个值。
   从上面的描述很容易知道,在Struts 2的的Action类可以获得与属性同名的参数值就是通过不同的拦截器来处理的,如获得请求参数的拦截器是params,获得Action的配置参数的拦截器是staticParams等。在这些拦截器内部读取相应的值,并更新ValueStack对象顶层节点的相应属性的值。而ValueStack对象就象一个传送带,将属性值从一个拦截器传到了另一个拦截器(当然,在这其间,属性值可能改变),最后会传到Action对象,并将ValueStack对象中的属性的值终值赋给Action类的相应属性。
   struts2 参数拦载器在注入值的时候,有两种机制,(调用ognl)这是OgnlRuntime 类中一段源码 hasSetMethod( context, target, targetClass,name ) || hasField( context, target, targetClass, name );
他会先查看你的action 中有没有对应的方法,如果发现无此方法,他会利用第二种方法直接给属性覆值,而无需对应的set方法!(当然都是通过反射机制实现的)如果action 中属性过多的话,我觉得就不用写set get 方法了!(不知道这个会不会给以后维护带来问题).
  个人总结:OGNL中的值栈相当于一个数据的中转站,或者叫数据的缓冲存储中心。另外,OGNL除了有值栈(VS)这个特别的对象外,它的表达式语言也自成一派。
   值栈和session都是在ActionContext的全局领域内的,按我个人通俗的说法就是ActionContext最大,并且ActionContext中包含值栈和session这些全局的容器,因为actioncontext是线程级的,那么session就是线程安全的。




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

相关推荐

    Struts2值栈的理解

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

    struts2--3.Ognl与值栈

    OGNL(Object-Graph Navigation Language)是Struts2中的表达式语言,而值栈则是OGNL工作的重要机制。这两者是Struts2框架的核心组件,使得数据绑定和动态方法调用变得更加便捷。 **OGNL:对象图导航语言** OGNL是...

    Struts2 Struts2 超好的Struts2 pdf 文档

    6. **值栈(Value Stack)**:值栈是Struts2中的一个核心组件,它存储了请求中的所有对象。ActionContext提供了对值栈的访问,使得视图能够方便地获取和展示数据。 7. **Freemarker和Velocity模板**:Struts2支持...

    struts2入门demo

    这个"struts2入门demo"是为初学者准备的一个基础实践项目,旨在帮助理解Struts2的核心概念和工作流程。让我们深入探讨一下Struts2的关键知识点。 首先,Struts2是一个基于MVC(Model-View-Controller)架构的框架,...

    马士兵Struts2笔记2013

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

    struts 2教程资料

    1. **基础知识**:首先需要熟悉Java基础、Servlet和JSP,这是理解Struts 2工作原理的基础。 2. **安装和搭建环境**:学习如何配置Struts 2框架,包括添加依赖库、创建web.xml和struts.xml文件。 3. **创建第一个...

    Struts2环境配置与基本操作演示

    在本教程中,我们将深入探讨Struts2的基础知识,包括环境配置、OGNL(Object-Graph Navigation Language)以及值栈和域的概念。 首先,让我们开始介绍如何配置Struts2环境。安装Struts2需要以下步骤: 1. **添加...

    struts2 OGNL之<s:property>标签访问值栈(value stack)用法

    通过以上介绍,你应该对Struts2中`s:property`标签访问值栈的用法有了深入理解。在实际开发中,结合OGNL的强大功能,`<s:property>`标签可以帮助你方便地展示和操作模型数据,提升Web应用的用户体验。

    Struts2演示源码

    在这个"Struts2演示源码"中,我们可以深入理解Struts2的一些核心特性。 首先,关于`Action result`,它是Struts2中的一个关键概念,用于控制请求后的视图呈现。四种转发类型通常包括:`dispatcher`(默认),将请求...

    Struts2框架及注释和用法

    值栈是Struts2中的一种数据管理机制,它存储Action、结果和其他对象,方便在Action之间共享数据。 **5.拦截器(Interceptors)** 拦截器是Struts2的一大特色,它们在Action执行前后进行额外处理,如日志记录、权限...

    Struts2经典小例题

    Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web开发中扮演着重要的角色。...通过这个例题,开发者可以深入理解Struts2的工作原理和使用方法,进一步提升其在实际项目中的应用能力。

    Struts2--为Action的属性注入值

    为了调试和理解这个过程,可以开启Struts2的日志,查看拦截器的执行顺序和参数绑定情况。此外,还可以使用Struts2提供的开发工具,如 strut2-convention-plugin,它简化了Action和结果页面的配置,使得Action类名和...

    struts2完整压缩包

    4. **Value Stack**: 值栈是Struts2中一个重要的概念,它是一个存储对象的栈结构,用于在Action与视图之间传递数据。ActionContext是访问值栈的上下文对象,可以通过它将数据放入栈中供JSP或其他视图技术使用。 5. ...

    使用struts2写的小项目

    Struts2是一个强大的Java web应用程序框架,用于构建和...总的来说,"使用struts2写的小项目"是一个实际应用Struts2框架的实例,通过学习和分析该项目,开发者可以深入理解Struts2的工作原理,提升Web应用开发能力。

    struts2-core-2.0.12.jar

    Struts2-core-2.0.12.jar是Apache Struts...尽管这是一个较旧的版本,但它仍然是理解Struts2工作原理和MVC设计模式的重要参考。在实际开发中,为了获得最新的安全更新和功能增强,建议使用最新稳定版的Struts2框架。

    Struts2入门小程序

    总的来说,"Struts2入门小程序"将涵盖Struts2的基本架构、配置、MVC模式的应用、标签库的使用、拦截器的实现、数据绑定以及可能的Spring集成等多个方面,是初学者深入理解Struts2框架的宝贵资源。通过实际操作和学习...

    struts2驱动包

    6. **值栈(Value Stack)**:值栈是Struts2用来存储Action和表单属性的地方。它使得视图层可以直接访问这些数据,简化了视图和控制器之间的交互。 7. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts...

    xwork2.0源代码,理解struts2

    这个压缩包包含了XWork 2.0 RC1版本的源代码,对于想要深入理解Struts2工作原理的开发者来说是一份宝贵的资源。 首先,我们需要知道XWork是如何与Struts2协同工作的。在Struts2中,Action是业务逻辑的载体,而XWork...

    Struts2登录实例--亲测可用

    在这个“Struts2登录实例”中,我们将探讨如何利用Struts2的核心概念,如拦截器(Interceptor)、Action和值栈(Value Stack),来实现一个实际的登录功能。 首先,登录功能是Web应用中的基础部分,它验证用户的...

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

    要深入学习和掌握Struts2,建议阅读官方文档,参与实际项目实践,也可以参考相关的技术书籍和教程,例如《Struts2技术内幕——深入解析Struts2架构设计与实现原理》等资源,来提升对Struts2框架的全面理解。

Global site tag (gtag.js) - Google Analytics