struts2 打卡 第五天学习

值栈

OGNL概述

  1. 之前 web 阶段,学习过 EL 表达式,EL 表达式在 jsp 中获取域对象里面的值
  2. OGNL 是一种表达式,这个表达式功能更加强大
    (1)在 struts2 里面操作值栈数据
    (2)一般把 ognl 在 struts2 操作:和 struts2 标签一起使用操作值栈
  3. OGNL 不是 struts2 的一部分,单独的项目,经常和 struts2 一起使用
    (1)使用 ognl 时候首先要导入 jar包,struts2 提供 jar包

OGNL入门案例

  1. 使用 ognl+struts2 标签实现计算字符串长度
    在这里插入图片描述
    (1)在 java 代码中,调用字符串 .length()
  2. 使用 struts2 标签
    (1)使用 jstl 时候,导入 jar包之外,在 jsp 页面中引入标签库
    使用 struts2 标签时候,在jsp中引入标签库在这里插入图片描述
    在这里插入图片描述

什么是值栈

  1. 之前在 web 阶段,在 servlet 里面进行操作,把数据放到域对象里面,在页面中使用 EL 表达式获取到,域对象在一定范围内,存值和取值
  2. 在 struts2 里面提供本身一种存储机制,类似于域对象,是值栈,可以存值和取值
    (1)在 action 里面把数据放到值栈里面,在页面中获取到值栈数据
  3. servlet 和 action 区别
    (1)Servlet: 默认在第一次访问时候创建,创建一次,单实例对象
    (2)Action:访问时候创建,每次访问 action 时候,都会创建 action 对象,创建多次,多实例对象
  4. 值栈存储位置
    (1)每次访问 action 时候,都会创建 action 对象
    (2)在每个 action 对象里面都会有一个值栈对象

获取值栈对象

  1. 获取值栈对象有多种方式
    (1) 常用方式:使用 ActionContext 类里面的方法得到值栈对象
    在这里插入图片描述
  2. 每个 action 对象中只有一个值栈对象在这里插入图片描述

值栈内部结构

  1. 值栈分为两部分:
    第一部分: root,结构是 list 集合
    (1)一般操作都是 root 里面的操作
    在这里插入图片描述
    第二部分: context,结构是 map 集合
    在这里插入图片描述
  2. struts2 里面标签 s:debug ,使用这个标签可以查看值栈结构之和存储值
    (1)访问 action,执行action的方法有返回值,配置返回值到 jsp 页面中,在 jsp 页面中使用这个标签
    (2)在 action 没有做任何操作,栈顶元素是action引用
    在这里插入图片描述

向值栈放数据

  1. 向值栈放数据多种方式
    第一种 获取值栈对象,调用值栈对象里面的 set 方法
    在这里插入图片描述
    在这里插入图片描述
    第二种 获取值栈对象,调用值栈对象里面的 push 方法
    在这里插入图片描述
    在这里插入图片描述
    第三种 在action定义变量,生成变量的 get 方法(重点)
    在这里插入图片描述
    在这里插入图片描述
向值栈放对象
  1. 实现步骤:
    第一步 定义对象
    在这里插入图片描述
    第二步 生成变量的 get 方法
    在这里插入图片描述
    第三步 在执行的方法里面向对象中设置值
    在这里插入图片描述
向值栈放 list 集合

第一步 定义 list 集合变量
在这里插入图片描述
第二步 生成变量 get 方法
在这里插入图片描述
第三部 在执行的方法里面向对象中设置值
在这里插入图片描述

从值栈中获取数据

使用 struts2 的标签+ ognl 表达式 获取数据
(1)<s:property value=" ognl 表达式" />

获取字符串

在这里插入图片描述
在这里插入图片描述

获取对象

在这里插入图片描述

获取list

第一种方式:
在这里插入图片描述
第二种方式:在这里插入图片描述

第三种方式:
在这里插入图片描述

其他操作
  1. 使用 set 方法向值栈放数据,获取
    在这里插入图片描述
    在这里插入图片描述
  2. 使用 push 方法向值栈放数据,获取
    在这里插入图片描述
    (1)使用 push 方法设置值,没有名称,只有设置的值
    (2)向值栈放数据,把向值栈放数据存到数组里面,数组名称 top,根据数组取值
    在这里插入图片描述

EL 表达式获取值栈数据(为什么)

  1. EL 表达式获取域对象值
  2. 向域对象里面放值使用 setAttribute 方法,获取值使用 getAttribute方法
  3. 底层增强 request 对象里面的方法 getAttribute方法
    (1)首先从 request 域获取值,如果获取到,直接返回
    (2)如果从 request 域获取不到值,到值栈把值获取出来,把值放到域对象里面

OGNL的 #、%使用

#使用
  1. 使用 # 获取context 里面数据
    在这里插入图片描述
  2. 演示 # 操作
    (1)向 request 域放值
    (2)在页面中使用 ognl获取
    在这里插入图片描述
%使用
  1. 在 struts2 标签中表单标签
    (1)在struts2 标签里面使用 ognl 表达式,如果直接在 struts2 表单标签里面使用 ognl表达式不是吧,只有% 之后才会识别
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值