关于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的简单理解的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map(代码片