本帖最后由 小鲁哥哥 于 2017-12-20 14:38 编辑
『黑马程序员济南』JavaEE就业笔记串讲--Struts2框架-part3
ognl概述
1 ognl是表达式,之前学习el表达式,el表达式用在jsp中获取域对象里面的值
(1)ognl也是一种表达式,比el表达式功能更加强大
(2)使用ognl主要做事情:在struts2里面获取值栈数据
2 ognl本身不是struts2一部分,而是单独项目,经常和struts2一起使用
(1)要使用ognl首先导入jar包,在struts2里面提供ognl的jar包
3 在struts2里面如何获取值栈数据
(1)ognl在struts2里面和struts2标签一起使用
ognl入门案例
1 使用struts2的标签+ognl表达式: 演示调用对象的方法
(1)计算字符串的长度
(2)java代码中: str.length();
3 通过这个案例记住:
(1)ognl和struts2的标签一起使用,<s:property>
(2)在标签里面有属性value属性,在value里面写ognl表达式
什么是值栈
1 之前学习过,比如在servlet把数据传递到页面中显示,在servlet里面把数据放到域对象里面,在jsp页面中使用el表达式获取域对象里面值
2 在struts2里面提供值栈,类似于域对象,值栈应用在struts2的action里面,在值栈中可以存值和取值
3 值栈存储位置
(1)servlet和action区别
* servlet默认在第一次访问时候创建,创建一次,单实例对象
* action在访问时候,每次访问action时候都会创建一个action对象,多实例对象
(2)每次访问action时候,都会创建action对象,
在每个action对象里面存在一个值栈对象
3 值栈使用范围
(1)值栈使用在action范围的
获取值栈对象
1 值栈存在于每个action对象里面
2 如何获取:
(1)使用ActionContext类,得到ActionContext对象
(2)使用ActionContext对象里面的方法得到值栈对象
3 在一个action对象里面只有一个值栈对象
返回值true,证明是一个值栈对象
值栈内部结构
1 值栈结构有两部分:
(1)root是list集合
一般操作数据指的都是操作root里面数据
(2)context是map集合
存储对象引用,
Context里面key名称是固定的,request、session、application、parameters、attr
2 在struts2的标签里面有一个标签可以看到值栈内部结构
(1)<s:debug>,这个标签只是在调试时候使用
(2)栈顶元素是action引用
向值栈放数据
有三种方式:
第一种方式: 获取值栈对象,调用值栈对象里面的set方法
第二种方式:获取值栈对象,调用值栈对象里面的push方法
第三种方式:在action成员变量位置定义变量,生成这个变量的get方法
向值栈放字符串
第一种 :获取值栈对象,调用值栈对象里面的set方法
第二种:获取值栈对象,调用值栈对象里面的push方法
第三种:在action成员变量位置定义变量,生成这个变量的get方法
向值栈放对象
1 实现步骤
第一步 声明对象变量,生成变量的get方法
第二步 在action具体的方法中向对象里面设置值
向值栈集合(list)
第一步 在action声明list集合变量,生成变量的get方法
第二步 在具体执行的方法里面,向值栈的list集合中设置值
从值栈获取数据
1 在jsp页面中,使用struts2标签+ognl表达式获取到
(1)<s:property value=”ognl”/>
获取字符串
1 把字符串放到值栈里面
2 在jsp中获取值栈值
获取对象
1 把对象放到值栈里面
2 在jsp中获取值栈对象的值
获取list集合
(1)在struts2标签里面有遍历操作,类似于jstl的foreach标签
<s:iterator>
3 第三种方式
EL表达式为什么获取值栈数据
1 el表达式在jsp中获取域对象里面的数据
2 其实el不能直接获取值栈数据
3 通过源代码查看
(1)增强request里面的方法
getAttribute方法获取域对象里面的值的方法
(2)首先到request里面找是否有值,如果request域里面有值,直接返回
(3)如果域对象里面如果没有值,得到值栈对象,从值栈对象里面把值获取到,最后放到域对象里面点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈
|