ognl

浅析值栈
ValueStack对象至关于一个,它贯穿整个Action的生命周期,每一个Action类的对象实例都会拥有一个ValueStack对象
当Struts2接收到一个*.action请求后,并非直接调用Action方法,而是先将Action类的相应属性放到ValueStack对象的顶层节点
值栈也位于内存中,它也是和parameters、request、session、application、attr对象放在一块儿的
值栈属于ONGL Context里面的根对象。也就是说它位于整个内存中最最重要的地方,因此叫根对象
根对象和另外五个对象是有区别的,根对象能够省写#号,好比<s:property value="user.username"/>
服务器

值栈的生命周期与request请求相关,每次请求产生一个值栈。默认全部的Action会被自动放到值栈里session

服务器跳转时共用值栈
假设从一个Action11经过服务器跳转到Action22的话,就意味着这两个Action是共享一个值栈的,由于一次请求只使用一个值栈这时内存中状况是这样的:首先接收到Action11请求后,会产生一个值栈,在栈顶存放Action11对象以及它全部的属性而后通过服务器跳转到Action22,这时就会把Action22对象压入值栈的栈顶位置,此时Action11对象以及它的全部属性就位于栈底了app

取值过程
栈的特征是后进先出。因而首先到栈顶的对象里查找是否存在这个属性,若是栈顶的Action22对象中不存在这个属性的话
它就会继续向下寻找直至栈底对象,一直查找是否存在这个属性若是最后找到该属性的话,那么就会在JSP页面中经过<s:property value="username"/>输出属性值若是在Action22和Action11都有一个同名的同类型的username属性的话,那么将输出Action22中的属性值由于它是先从栈顶开始寻找属性的,值栈的特征就是后进先出,但有个前提:请求过程是经过服务器跳转的spa

相关文章
相关标签/搜索