structs2中的OGNL

本文详细介绍了Struts2框架中的数据管理机制,包括数据中心(contextMap)的创建、数据的存储与检索方法,以及如何利用EL表达式进行数据访问。同时,对比了Struts2的OGNL表达式与标准EL表达式的功能增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JSP中的EL表达式
JavaWeb阶段学习JSP时学习的。
在这里插入图片描述

二、Struts2中的ONGL表达式
struts2框架学习阶段学习的。
把我两点:
1、数据存在哪里?怎么存?
2、数据存在哪里?怎么取?

1、struts2框架的数据中心(数据仓库):contextMap
所有的数据都存在contextMap中,每次请求都有自己的contextMap。
1.1contextMap的结构
在这里插入图片描述

会依次从四个范围中查找

1.2何时创建的contextMap

struts2框架创建的:
用户的每次请求会经过核心的控制器StrutsPrepareAndExecuteFilter,调用其中的void doFilter(ServletRequest,ServletResponse.FilterChain);
在执行doFilter时,框架会创建ActionContext对象,并绑定到当前线程上(ThreadLocal)。还会创建ValueStack的对象,并放入ActionContext对象的某个变量中(private Map context)。

问题:
ActionContext和ValueStack的生命周期:
诞生:每次请求
活着:请求未结束
死亡:响应结束

2、如何向contextMap中存放数据
怎么存
2.1ActionContext的API:
操作contextMap中的数据:
void put(String key,Object value):向contextMap中存放数据
Map<String,Object> getSession():获取contextMap中key为“session”的那个Map

2.2ValueStack的API:
struts2框架的本意,是让你通过ValueStack的API来操作contextMap中的所有数据。
ValueStack包含两部分:
contextMap是一部分
root是一部分(独立出来操作的)

int size():获取root(ArrayList)的大小。
void set(String key,Object value):判断root栈顶是不是一个Map对象。
是:把数据放入这个map中
不是:创建一个map,再放入这个map中
void push(Object ):把对象压入栈顶。
void pop():弹出栈顶对象。
void peek():获取栈顶对象。

setValue(String ognlExpression,Object o):存放数据。特别注意:第一个参数不是普通字符串,而是OGNL表达式。
setValue(“name”,“abc”); 从栈顶搜索对象的setName属性,设置值。找不到该属性,报错。

3、如何从contextMap中取数据
怎么取
取contextMap中的数据:#key得到的是value
获取root中对象的“属性”,直接写属性名即可
属性:从栈顶往下找,找到为止。如果root中所有对象都没有改属性,作为key到contextMap中找了。

<s:property value=“nanme”/>:ValueStack.findString(“name”); name是OGNL表达式

4、struts2中使用EL表达式
struts2对原有EL功能进行了增强

${name}:
页面范围-->请求范围--->root中对象的属性--->contextMap中的key--->会话范围-->应用范围
蓝色:原来EL的功能
红色:ONGL表达式
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值