struts2值栈分析
前段日子对ognl表达式不是很理解,看了几本书上关于ognl表达式的描述后还是感觉很难,前几天学习了struts2中值栈的内容,现在感觉ognl表达式其实很容易。
struts2中利用值栈来存储数据,在struts2中,把数据存在值栈中,然后在jsp页面用ognl表达式取出。
在struts2中的action有三种方法获取值栈
ValueStack valueStack=ActionContext.getContext().getValueStack(); ValueStack valueStack=(ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack"); ValueStack valueStack=ServletActionContext.getValueStack(ServletActionContext.getRequest());
可以看到我们可以利用request来获取值栈,而request的生命周期为一次请求,所以值栈的生命周期也为一次请求。
ValueStack 是一个接口,它的实现类是ognlvalueStack。
在valueStack中有两个数据结构,一个名字为context,另一个为root。
context的类型是OgnlContext,OnglContext实现了Map接口,所以context本质上是一个Map。
valueStack中的另一个数据结构root,它的类型是CompoundRoot,CompoundRoot继承了ArrayList类,所以它本质上是一个ArrayList,我们称它为对象栈。
map栈中有一个名称为_values的对象,它是一个HashMap,在这里存放了request,response,session,application等servlet容器的内容,我们称它为map栈。
map栈中还有一个名称为_root的对象,它和我们上面说的valueStack中的另一个数据结构root相同,都是对象栈,为什么valueStack中会有两个对象栈呢,这是因为struts2继承了以前一些框架的内容导致的。
对象栈中保存了两个对象,一个是ValueStackAction,它代表的是当前请求的Action,
另一个是DefaultTextProvider,它是用于struts2国际化的。
我手动用一个粗糙的涂鸦图解下:
所以在jsp页面中,如果要输出的内容在对象栈中,直接指定属性名字,如果在map栈中,要用#来指定
例如
String name="aaa";
String Bname="bbb";
ActionContext.getContext().getValueStack().push(name); //把字符串放入对象栈中
ActionContext.getContext().put("Bname", Bname); //把字符串放入map栈中
在jsp页面中取出的对应的值:
<s:property value="name"/> <s:property value="#Bname"/>
有错误请指出
转载于:https://www.cnblogs.com/ChanSS/p/5515040.html
struts2值栈分析相关推荐
- Struts2值栈详解
Struts2值栈详解 基本介绍 ValueStack是Struts2的一个接口,字面意义为值栈,OgnlValueStack是 ValueStack的实现类,客 户端发起一个请求,struts2架构 ...
- struts2值栈内部数据结构详解
值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...
- (十)Struts2 值栈/OGNL
值栈是一组对象,按照提供的顺序存储以下这些对象: 序号 对象和说明 1 Temporary对象 实际中存在各种在页面执行期间创建的temporary对象.例如,JSP标签循环集合的当前迭代值. 2 M ...
- struts2值栈、struts2标签、ONGL表达式、EL表达式、JSTL表达式、jsp标签
1.struts2值栈: 参考:https://blog.csdn.net/superit401/article/details/83994149 (1) ValueStack是Struts2的一个接 ...
- java struts2值栈ognl_Struts2 (三) — OGNL与值栈
一.OGNL表达式 1.概述 1.1什么是OGNL OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...
- java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊
Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...
- struts2值栈,OGNL表达式,interceptor
struts2获取servlet api 第一种获取方式 获得原生request HttpServletRequest request = ServletActionContext.getReques ...
- Struts2数据传输的背后机制:ValueStack(值栈)
1. 数据传输背后机制:ValueStack(值栈) 在这一切的背后,是因为有了ValueStack(值栈)! ValueStack基础:OGNL 要了解ValueStack,必须先理解OGN ...
- Struts2框架--学习笔记(下):OGNL表达式、值栈操作、拦截器、struts2标签、文件上传
一.OGNL概述:OGNL是一种表达式 (1)在struts2中操作值栈数据. (2)一般把ognl在struts2中操作,和struts2标签一起使用操作值栈. (3)ognl不是strut2的一部 ...
最新文章
- vant组件实现上传图片裁剪_如何用 120 行代码,实现交互完整的拖拽上传组件?...
- 干货|10 张 GIF 动图让你弄懂基础算法必备概念
- 如何编写与非贪婪匹配的正则表达式? [重复]
- 页面加载进度条改进版
- mysql受影响的行: 0_mysql执行update语句受影响行数是0
- ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势
- 进程间通信(6) 邮槽
- springboot jar服务器运行后无法请求_Spring boot、微服务、OAuth、OpenID的爱恨情仇!...
- 《梦断代码》阅读笔记Ⅱ
- I can accept failure but I can't accept not trying.-Michael Jordan 我可以接受失败,但绝对不能接受自己都未曾奋斗过。-迈克.乔丹...
- SAP 电商云 Spartacus UI 修改 Delivery Mode 触发的三个 HTTP 请求
- Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(七)...
- HDU 4686 Arc of Dream(递归矩阵加速)
- linux上dig命令,Linux中dig命令起什么作用呢?
- 创邻科技荣登机器之心Pro·AI 趋势先锋 Insight 榜单
- java.lang.NoSuchMethodError: com.xxx.xxx.xxx.po.xxxPo.setXXX(D)V
- 一杯凉茶 mysql_那一杯凉茶
- 简单明了的java反射机制
- UNIX 设计哲学:Do one thing and do it well
- 华中科技大学计算机学院培养计划,华中科技大学计算机专业培养计划