关于Struts2的值栈和OGNL的简单理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Struts2的值栈和OGNL的简单理解相关的知识,希望对你有一定的参考价值。

1、值栈是什么?

  值栈是对应每一个请求对象的内存数据中心。每次请求一个action生成一个狭义上的值栈(ValueStack)。这个值栈存储了我们定义在action中的每个属性的值,这些属性必须有get和set方法,以致于我们可以在jsp页面中使用EL表达式。

2、值栈的作用:

  值栈能够在线程安全的情况下提供公共的数据存取服务。当有请求到达时,struts会为每个请求创建一个新的值栈。值栈封装了一次请求所有需要操作的相关的数据。

3、值栈的内容:

  在struts中是有广义和狭义值栈之分的。狭义值栈一般指的是实现com.opensymphony.xwork2.util.ValueStack接口。主要支持EL表达式来存取数据。

  广义值栈指的是ActionContext对象。在ActionContext对象中可以存放参数和值

例如:session、request、application等。

4、值栈的基本使用:

  一般来讲都是先获取ActionContext对象。

ActionContext actionContext=ActionContext.getContext();

  通过ActionContext对象来获取狭义上的值栈。

ValueStack value=actionContext.getValueStack();

  通过set方法设值。

value.set("name", "fangchao(value)");
        value.set("age", 21);

  在前台Hello.jsp中获取值。

获取狭义上的值栈数据:<s:property value="name"/><s:property value="age"/><br>

  当然也需要在struts.xml中设置

<package name="hello" namespace="/" extends="struts-default">
        <action name="hello" class="com.fangchao.action.HelloAction">
            <result name="success">success.jsp</result>
        </action>
    </package>

  也可以在jsp中使用session等,后台代码如下:

技术分享
Map<String, Object> session=actionContext.getSession();
        session.put("name", "fangchao2(value)");
        session.put("age",23);
        
        
        Map<String, Object> application=actionContext.getApplication();
        application.put("name", "fangchao3");
        application.put("age", 25);
技术分享

  前台代码:

技术分享
请求参数:<s:property value="#parameters.name"/><s:property value="#parameters.age"/><br>
    
    request:<s:property value="#request.name"/><s:property value="#request.age"/><br>
    session:<s:property value="#session.name"/><s:property value="#session.age"/><br>
    application:<s:property value="#application.name"/><s:property value="#application.age"/><br>
    attr:<s:property value="#attr.name"/><s:property value="#attr.age"/><br>
技术分享

以上是关于关于Struts2的值栈和OGNL的简单理解的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 中的值栈的理解

struts2 ognl表达式访问值栈

struts2值栈分析

[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map(代码片

Struts2的值栈和对象栈

Java中的值栈