structs2中的OGNL

一、JSP中的EL表达式
JavaWeb阶段学习JSP时学习的。
structs2中的OGNL_第1张图片

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

1、struts2框架的数据中心(数据仓库):contextMap
所有的数据都存在contextMap中,每次请求都有自己的contextMap。
1.1contextMap的结构
structs2中的OGNL_第2张图片

会依次从四个范围中查找

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 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中找了。

:ValueStack.findString(“name”); name是OGNL表达式

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

${name}:
页面范围-->请求范围--->root中对象的属性--->contextMap中的key--->会话范围-->应用范围
蓝色:原来EL的功能
红色:ONGL表达式
structs2中的OGNL_第3张图片

你可能感兴趣的:(学习天地,Struts天地)