`

struts2中值栈的理解

阅读更多
通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道服务器端action时,就有个堆栈,如果action在服务器端进行跳转,所有action共用一个堆栈,当需要保存在action中的数据时,首先从栈顶开始搜索,若找到相同的属性名(与要获得的数据的属性名相同)时,即将值取出,但这种情况可能出现找到的值不是我们想要的值,那么解决此问题需要用TOP语法和N语法来进行解决。



    当在客服端进行跳转时,当有请求提交到服务器的action时,只有一个堆栈存在,堆栈中存放的是当前的请求的action,而原来那么则销毁了(本人观点,感觉如同request请求一样)。

******************************************************
众所周知,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类的相应属性

 众所周知,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类的相应属性

分享到:
评论
3 楼 captelae 2010-09-21  
一直没明白值栈是怎么一回事,看了楼主的文章明白了~谢谢
2 楼 captelae 2010-09-21  
Action类中声明与参数同名的属性
1 楼 jkliu 2009-08-18  
好,谢谢主

相关推荐

    struts2的值栈

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

    dsp中值滤波 dsp中值滤波

    在"lab3"这个实验中,可能是通过编程实践来理解和应用中值滤波的概念。可能涉及的步骤包括编写滤波函数,设置滤波器窗口大小,实现排序和中值选取逻辑,以及对输入信号或图像进行滤波处理并观察结果。...

    实现3-21有向直线2中值问题.cpp

    实现3-21有向直线2中值问题.cpp

    MATLAB的图像中值滤波?_matlab_中值滤波_

    首先,我们需要理解中值滤波的基本原理。中值滤波是一种非线性的滤波方法,它不依赖于图像的统计特性,而是利用像素的相对位置关系来处理图像。在滤波过程中,中值滤波器会选取像素的一个邻域,然后将该邻域内所有...

    MATLAB实现中值滤波(非medfilt2函数)

    10. 与MATLAB内置函数medfilt2的对比:在文档中,作者提供了一个与MATLAB内置中值滤波函数medfilt2的对比示例,这有助于观察自定义中值滤波算法与标准算法的差异,并评估性能。 通过上述知识点的整理,我们可以了解...

    中值滤波Verilog代码

    首先,我们需要理解中值滤波器的工作原理。中值滤波器通常采用一个固定大小的窗口(例如3x3或5x5),该窗口在图像上滑动,对每个位置的像素进行处理。窗口内的像素灰度值按照一定的顺序排列,然后取中间的值作为该...

    中值滤波_matlab_中值滤波_

    在图像处理领域,中值滤波是一种非常有效的降噪技术,尤其对于消除椒盐噪声有显著效果。...通过实践和理解中值滤波的原理,我们可以更好地利用MATLAB进行图像噪声处理,提升图像分析和识别的效果。

    matlab代码 中值滤波

    在MATLAB中实现中值滤波,可以使用内置的`medfilt2`函数。这个函数接受两个参数:原始图像和滤波器的大小。例如,如果使用3x3的滤波器,代码可能如下: ```matlab % 假设原图名为'originalImage' originalImage = ...

    中值滤波matlab代码

    2. **滤波窗口**:中值滤波通常使用一个固定的大小(如3x3、5x5)的方形或圆形窗口,在图像上滑动,对每个窗口内的像素进行处理。 3. **中位数计算**:对于窗口内的像素值,按照灰度值从小到大排序,取中间值作为该...

    均值滤波与中值滤波的应用_MATLAB中值滤波_均值滤波中值滤波的matlab代码_中值滤波_plandop_

    通过了解均值滤波和中值滤波的基本原理以及在MATLAB中的实现,我们可以更好地理解和应用这些技术,优化图像处理任务。在`plandop`的项目中,这样的代码和应用示例将有助于学习和实践这两种滤波方法。

    lvbo.rar_medfilt2函数_二维中值滤波_图像中值滤波_图像滤波

    针对这种噪声,一种有效的滤波方法是使用二维中值滤波,其中MATLAB中的`medfilt2`函数是一个强大的工具。 `medfilt2`函数是MATLAB中的二维中值滤波器,用于对图像进行滤波操作,特别适合消除椒盐噪声。它的基本原理...

    中值滤波.rar_3ISY_XS2_中值滤波_中值滤波 matlab_中值滤波matlab

    在MATLAB中实现中值滤波,我们可以使用内置的`medfilt2`函数,它提供了对二维数组(如图像)进行中值滤波的功能。本教程将深入探讨中值滤波的基本原理、MATLAB中的实现方法以及其在实际应用中的价值。 **中值滤波的...

    快速中值滤波+中值滤波

    2. **窗口移动策略**:根据窗口的对称性特征,设置合理的移动顺序,以便于在移动过程中利用相邻窗口的信息。 3. **利用已排序信息**:通过对窗口中的像素进行预排序,可以在后续移动时快速调整顺序,减少新的排序...

    matlab 图像中值滤波,自己编写

    在图像处理领域,中值滤波是一种...这种方法虽然比直接使用MATLAB的内置函数(如`medfilt2`)效率低,但对于学习和理解中值滤波的过程非常有帮助。在实际应用中,如果对性能有较高要求,建议还是使用优化过的内置函数。

    多种中值滤波器5 点交叉1x2, 1x3, 2x2, 3x3, 3x4,来降低图像中的椒盐噪音

    多种中值滤波器 (5 点交叉, 1x2, 1x3, 2x2, 3x3, 3x4, 4x4, 4x5, 5x5, 7x7) 来降低图像中的椒盐噪音。我还计算了 MSE 值来决定中值滤波器的质量并画出图形来表示 MSE 和中点.rar

    积分第二中值定理的证明及应用

    ### 积分第二中值定理的证明及应用 #### 定理背景与意义 积分中值定理作为微积分中的重要概念,在理论研究和实际应用中都有着不可替代的作用。通常所说的积分第一中值定理是指在一个闭区间上,若函数可积,则存在...

    中值滤波源代码

    通过分析这些代码,你可以更深入地理解中值滤波的工作原理和MATLAB的实现方式。 总之,中值滤波是一种有效的图像去噪手段,尤其适用于椒盐噪声。在MATLAB中,`medfilt2`函数提供了方便的接口来实现这一过程。通过...

    matlab代码中值滤波

    通过理解和掌握中值滤波的基本原理和MATLAB的实现方式,我们可以有效地对图像进行噪声处理,提高图像的质量。在分析`中值滤波.asv`和`中值滤波.m`文件时,可以进一步了解具体实现细节和效果评估。

    中值滤波verilog代码

    2. **存储单元设计**:为了计算每个像素点的中值,需要存储其邻域内的所有像素值。这通常通过二维数组或者移位寄存器来实现。 3. **数据排序**:获取像素邻域数据后,需要进行排序以找出中值。由于Verilog不支持...

    单片机与DSP中的基于Stratix II EP2S60的改进中值滤波器设计

    在图像处理领域,中值滤波器是一种广泛应用的非线性滤波技术,尤其在抑制噪声和提升图像质量方面表现出色。本文主要讨论了在单片机与DSP系统中,如何利用Altera公司的Stratix II EP2S60 FPGA芯片实现一种改进的中值...

Global site tag (gtag.js) - Google Analytics