第五天打卡
值栈
OGNL概述
- 之前 web 阶段,学习过 EL 表达式,EL 表达式在 jsp 中获取域对象里面的值
- OGNL 是一种表达式,这个表达式功能更加强大
(1)在 struts2 里面操作值栈数据
(2)一般把 ognl 在 struts2 操作:和 struts2 标签一起使用操作值栈 - OGNL 不是 struts2 的一部分,单独的项目,经常和 struts2 一起使用
(1)使用 ognl 时候首先要导入 jar包,struts2 提供 jar包
OGNL入门案例
- 使用 ognl+struts2 标签实现计算字符串长度
(1)在 java 代码中,调用字符串 .length() - 使用 struts2 标签
(1)使用 jstl 时候,导入 jar包之外,在 jsp 页面中引入标签库
使用 struts2 标签时候,在jsp中引入标签库
什么是值栈
- 之前在 web 阶段,在 servlet 里面进行操作,把数据放到域对象里面,在页面中使用 EL 表达式获取到,域对象在一定范围内,存值和取值
- 在 struts2 里面提供本身一种存储机制,类似于域对象,是值栈,可以存值和取值
(1)在 action 里面把数据放到值栈里面,在页面中获取到值栈数据 - servlet 和 action 区别
(1)Servlet: 默认在第一次访问时候创建,创建一次,单实例对象
(2)Action:访问时候创建,每次访问 action 时候,都会创建 action 对象,创建多次,多实例对象 - 值栈存储位置
(1)每次访问 action 时候,都会创建 action 对象
(2)在每个 action 对象里面都会有一个值栈对象
获取值栈对象
- 获取值栈对象有多种方式
(1) 常用方式:使用 ActionContext 类里面的方法得到值栈对象
- 每个 action 对象中只有一个值栈对象
值栈内部结构
- 值栈分为两部分:
第一部分: root,结构是 list 集合
(1)一般操作都是 root 里面的操作
第二部分: context,结构是 map 集合
- struts2 里面标签 s:debug ,使用这个标签可以查看值栈结构之和存储值
(1)访问 action,执行action的方法有返回值,配置返回值到 jsp 页面中,在 jsp 页面中使用这个标签
(2)在 action 没有做任何操作,栈顶元素是action引用
向值栈放数据
- 向值栈放数据多种方式
第一种 获取值栈对象,调用值栈对象里面的 set 方法
第二种 获取值栈对象,调用值栈对象里面的 push 方法
第三种 在action定义变量,生成变量的 get 方法(重点)
向值栈放对象
- 实现步骤:
第一步 定义对象
第二步 生成变量的 get 方法
第三步 在执行的方法里面向对象中设置值
向值栈放 list 集合
第一步 定义 list 集合变量
第二步 生成变量 get 方法
第三部 在执行的方法里面向对象中设置值
从值栈中获取数据
使用 struts2 的标签+ ognl 表达式 获取数据
(1)<s:property value=" ognl 表达式" />
获取字符串
获取对象
获取list
第一种方式:
第二种方式:
第三种方式:
其他操作
- 使用 set 方法向值栈放数据,获取
- 使用 push 方法向值栈放数据,获取
(1)使用 push 方法设置值,没有名称,只有设置的值
(2)向值栈放数据,把向值栈放数据存到数组里面,数组名称 top,根据数组取值
EL 表达式获取值栈数据(为什么)
- EL 表达式获取域对象值
- 向域对象里面放值使用 setAttribute 方法,获取值使用 getAttribute方法
- 底层增强 request 对象里面的方法 getAttribute方法
(1)首先从 request 域获取值,如果获取到,直接返回
(2)如果从 request 域获取不到值,到值栈把值获取出来,把值放到域对象里面
OGNL的 #、%使用
#使用
- 使用 # 获取context 里面数据
- 演示 # 操作
(1)向 request 域放值
(2)在页面中使用 ognl获取
%使用
- 在 struts2 标签中表单标签
(1)在struts2 标签里面使用 ognl 表达式,如果直接在 struts2 表单标签里面使用 ognl表达式不是吧,只有% 之后才会识别