一 OGNL概述

1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取对象里面的值

2 OGNL是一种表达式,这个表达式功能更加强大

(1)在Struts2里面操作值栈数据

(2)一般在Struts2里操作ognl:和Struts2标签一起使用操作值栈

3 ognl不是Struts2的一部分,单独的项目,经常和Struts2一起使用

使用ognl时候首先导入jar包,Struts2提供jar包

二 ognl入门案例

1使用ognl+Struts2标签实现计算字符串长度

支持对象方法调用。例如:objName.methodName()

(1)在java代码中,调用字符串.length();

2 使用Struts2标签

(1)使用jstl时候,导入jar包之外,在jsp页面中引入标签库

使用Struts2标签的时候,在jsp中引入标签库

引入标签库

(2)使用ognl标签库

使用标签库

三 值栈

1 概述

在Struts2里面提供本身一种存储机制,类似于域对象,是值栈,可以存值和取值,在action里面把数据放到值栈里面,在页面中获取到值栈数据

2 servlet和action区别

(1)servlet:默认在第一次访问的时候创建,创建一次,单实例对象

(2)action:访问时候创建,每次访问action,都会创建action,创建多次,多实例对象

3 值栈存储位置

(1)每次访问action时候,都会创建action对象

(2) 在每个action对象里面都会有一个值栈对象(只有一个)

4 获取值栈对象

使用ActionContext类里面的方法得到值栈对象(常用)

获取值栈对象

5 值栈内部结构

(1)root 结构是list集合(常用)

(2)context 结构是map集合

Context存储的对象引用

key 固定

value

request

request对象引用

session

Httpsession对象引用

application

ServletContext对象引用

parameters

传递相关的参数

attr

三个域对象,向三个域对象放值,名称都相同setAttribute("name",value);使用attr操作,获取域对象里面的值,获取与范围最小的值

6 Struts2里面s:debug标签,使用这个标签可以查看值栈结构和存储值

(1)访问action,执行action的方法有返回值,配置返回值到jsp页面中,在jsp页面中使用这个标签。

(2)在action里面没有做任何操作,栈顶元素是

栈顶元素

action对象里面有值栈对象

值栈对象里面有action引用

7 向值栈放数据

(1)获取值栈对象,调用值栈对象里面的set方法

栈顶

(2)获取值栈对象,调用值栈对象里面的push方法

栈顶

(3)在action定义变量,生成变量的get方法(常用)

没有开辟新的空间,依旧在action中,节省资源空间

栈顶

package Action;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.util.ValueStack;

public class ValueStackDemoAction extends ActionSupport {

//第三种方式 在action定义变量,生成变量的get方法

//3.1 定义变量

private String name;

public String getName() {

return name;

}

@Override

public String execute() throws Exception {

//第一种方式 使用值栈对象里面的set方法

//1.1 获取值栈对象

ActionContext actionContext = ActionContext.getContext();

ValueStack stack = actionContext.getValueStack();

//1.2 调用方法set

stack.set("username","eurasia");

//第二种方式 使用值栈对象里面的push方法

//2.2 调用push方法

stack.push("abcd");

//3.2在执行的方法里面向变量设置值

name = "425";

return "success";

}

}

8 向值栈放对象

实现步骤

第一步 定义对象变量

第二步 生成变量的get方法

第三步 在执行的方法里面设置对象值

package Action;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

public class ObjectDemoAction extends ActionSupport {

//1 定义对象变量

private User user = new User();

//2 生成get方法

public User getUser() {

return user;

}

@Override

public String execute() throws Exception {

//3 向值栈中放入数据

user.setUsername("yang");

user.setPassword("123");

user.setAddress("陕西");

return "success";

}

}

执行结果

9 向值栈放list对象

第一步 定义list集合变量

第二步 生成变量的get方法

第三步 在设置方法里面设置值

package Action;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

import java.util.ArrayList;

import java.util.List;

public class ListDemoAction extends ActionSupport{

//1 定义list集合变量

private List list = new ArrayList();

//2 生成get方法

public List getList() {

return list;

}

//3 设置值

@Override

public String execute() throws Exception {

User user = new User();

user.setUsername("Zhang");

user.setPassword("12424");

user.setAddress("广州");

list.add(user);

System.out.println(list);

return "success";

}

}

结果

10 从值栈获取数据

使用Struts2的标签和ognl表达式获取值栈数据

(1)获取字符串

package valuestack;

import com.opensymphony.xwork2.ActionSupport;

public class ValueStackString extends ActionSupport {

private String username;

public String getUsername() {

return username;

}

@Override

public String execute() throws Exception {

username="赛利亚";

return "success";

}

}

ognl标签取值

(2)获取对象

package valuestack;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

public class ValueStackObject extends ActionSupport {

private User user = new User();

public User getUser() {

return user;

}

@Override

public String execute() throws Exception {

user.setUsername("张丹峰");

user.setPassword("6666666");

user.setAddress("上海");

return "success";

}

}

获取对象

(3)获取list集合

方法一

package valuestack;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

import java.util.ArrayList;

import java.util.List;

public class ValueStackList1 extends ActionSupport {

private List list = new ArrayList();

public List getList() {

return list;

}

@Override

public String execute() throws Exception {

User user = new User();

user.setUsername("张无忌");

user.setPassword("54654652");

user.setAddress("光明顶");

list.add(user);

return "success";

}

}

list方法一

方法二

方法二ognl遍历输出

方法三

方法三

11 其他操作

(1)获取set方法设置的值

获取set方法设置值

(2)获取push方法设置的值

获取push方法设置

package Action;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.util.ValueStack;

public class ValueStackDemoAction extends ActionSupport {

//第三种方式 在action定义变量,生成变量的get方法

//3.1 定义变量

private String name;

public String getName() {

return name;

}

@Override

public String execute() throws Exception {

//第一种方式 使用值栈对象里面的set方法

//1.1 获取值栈对象

ActionContext actionContext = ActionContext.getContext();

ValueStack stack = actionContext.getValueStack();

//1.2 调用方法set

stack.set("username","eurasia");

//第二种方式 使用值栈对象里面的push方法

//2.2 调用push方法

stack.push("abcd");

//3.2在执行的方法里面向变量设置值

name = "425";

return "success";

}

}

四 ognl表达式#和%的使用

1 ognl表达式#使用

获取context里面数据,写ognl时候,首先添加符号 #context的key名称.域对象名称

#使用

2 ognl表达式%使用

在Struts2标签里面使用ognl表达式,如果直接在Struts2表单标签里面使用ognl表达式不识别,只有%之后才会识别

%使用

java ognl 值栈_ognl-值栈基本操作相关推荐

  1. 字符串算术表达式求值-简单计算器实现(栈)-数据结构和算法(Java)

    1 字符串算术表达式分类 字符串算术表达式分为前缀表达式.中缀表达式和后缀表达式.其中前缀表达式又称波兰表达式,后缀表达式基于前缀表达式,又称逆波兰表达式.下面给出百度百科关于几种表达式的定义: 前缀 ...

  2. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  3. 堆和栈、值类型与引用类型、装箱与拆箱

    堆栈:内存条里的某一块. 电脑中有6个地方可以保存数据. <1>寄存器:保存最快.这东西在处理器内部.也就是CPU里的一小块地方给你放数据.既然是CPU,那么主要工作是计算,所以这块寄存器 ...

  4. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

  5. 算术表达式求值(C语言栈)

    题目:算术表达式求值 题目描述:表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子.设计一个程序,演示用运算符优先法对算数表达式求值的过程. 基本要求:以字符序列的形式从终端输入语 ...

  6. 链栈的入栈、出栈、获取长度、获取栈顶值等相关操作

    创建lstack.h #pragma once //链式栈:利用带头节点的单链表实现 //栈顶为第一个数据结点,因为:头插O(1),头删:O(1),有尾指针的的尾插:O(1),有尾指针的尾删O(n)t ...

  7. Java实现栈的入栈和出栈等基本操作

    栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表. 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表.允许插入 ...

  8. 包含 min 函数的栈(辅助栈,保存差值,Python)

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 方法1:辅助栈 栈先进后出的性质的理解: 如果一个 ...

  9. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  10. java ognl 性能_OGNL详解

    a.什么是ognl? 全称叫objectgraphic navigation language(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了 ...

最新文章

  1. @老板:别开视频会议了,效率低没人care,斯坦福、微软都可以作证
  2. UINavigationBar 上面添加多个按钮
  3. python从ip端口 获取数据_python 如何获得Ip地址和端口啊?
  4. TP框架(接口文档模板框架)
  5. 木马入侵查杀 linux
  6. 27/100. Intersection of Two Linked Lists
  7. bzoj4639 博士的选取器
  8. [PM2][ERROR] Script not found 和 npm in fork_mode
  9. epoll 使用实例
  10. 中国大学mooc和BiliBili视频批量下载
  11. texttospeech的使用
  12. solidworks钣金件设计术语creo/ug适用
  13. 图像分割阈值选取技术综述
  14. MySQL之查询关键字
  15. ListView 实现阻尼回弹效果 并去除边缘阴影
  16. python进程已结束 退出代码0_PyCharm:进程以退出代码0结束
  17. Word文档中怎么删除空白页?删除空白页的五种方法
  18. 当编辑内容改变是后 选中内容 Range 的startOffset会被重置
  19. Linux 系统优化相关经验总结
  20. 微信平台申请消息接口时Signature校验的Servlet实现

热门文章

  1. LaTeX中的魔法注释
  2. html自动旋转屏幕,求教!HTML5屏幕旋转90度再让画布自适应,该如何做,大神给留demo...
  3. android 调用线程方法,Android使用线程获取网络图片的方法
  4. 扫描指定ip的指定端口,识别开放的端口所对应的服务
  5. java栈链_java实现链栈与队列详解
  6. mysql explain G_MySQL 性能优化神器 Explain 使用分析
  7. 处理网页上的字符溢出的方法
  8. Python+数据库+前端+Django
  9. #10015 灯泡(无向图连通性+二分)
  10. mysql主从备份功能配置与測试