一、OGNL入门

1、什么是OGNL

  OGNL的全称是对象图导航语言(Object-Graph Navigation Language),它是一种功能强大的开源表达式语言。使用这种表达式语言,可以通过使用某种表达式语言,来存取Java对象的任意属性,调用Java的方法,同时能够自动实现必要的数据类型转换,

2、OGNL的作用

  Struts2默认的表达式语言就是ognl表达式语言,该语句具有以下的特点

      • 支持对象方法的调用。例如:objectName.methodName().
      • 支持静态方法调用和值访问,表达式的格式为@[类全名]@[方法名 | 值名] 例如:@java.lang.String@format('foo %s','bar')。
      • 支持赋值操作和表达式串联。
      • 访问OGNL上下文对象(OGNL Context)和ActionContext
      • 操作集合对象。

3、OGNL表达式的要素   

(1)表达式

  表达式是整个OGNL表达式的核心,OGNL会根据表达式中的对象去取值。

(2)根元素(root)

  root元素可以理解为OGNL表达式要操作的对象

(3)context  

  context对象中保存了对象的引用的map集合

4、OGNL表达式实例   

  使用OGNL表达式获取字符串的长度

  

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--要使用struts2标签,必须要引入struts2标签库 --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--
1、ognl表达式必须要在struts2标签中使用
2、在ognl表达式中可以直接调用Java的方法
3、value的值就是ognl表达式
--%>
<s:property value="'hello ongl'.length()"/>
</body>
</html>

二、struts2的值栈

1、什么是值栈

  值栈(ValueStack)是Struts的一个接口,ognlValueStack是该接口的一个实现类,客户端发起一个action请求时会创建一个action实例同时也会创建一个值栈实例,该值栈贯穿整个Action的生命周期,struts2使用ognl将请求action的参数封装为对象存储到值栈中去,并通过ognl表达式去读取值栈中对象属性的值

2、Struts2 与值栈

   在struts2里面提供本身一种存储机制,类似于域对象,是值栈,可以存值和取值。

  (1)在action里面把数据放到值栈里面,在页面中获取到值栈数据

3、Action与Servlet的不同点

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

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

4、值栈的存储位置

  (1)值栈存储在Action对象中,

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

5、值栈的内部结构

  可以使用struts2的<debug>标签来查看值栈的内部结构 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:debug></s:debug>
</body>
</html>

通过该标签查看到的结构如下图:

说明:在图中可以看到该值栈中有两块数据,一个是root,一个是context。

  (1)在我们的使用中一般都是操作root,操作context比较少。

  (2)root的内部结构是list结合,context内部的结构是map集合。

  (3)context中主要存储的是一些对象的引用。

OGNL与值栈的更多相关文章

  1. Struts2笔记3--获取ServletAPI和OGNL与值栈

    获取ServletAPI: 第一种方式: //在request域中放入属性req,暂且认为getContext()获取的是request域空间,但实际不是 ActionContext.getConte ...

  2. struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象

    struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...

  3. 框架学习之Struts2(三)---OGNL和值栈

    一.OGNL概述 1.1OGNL是对象图导航语言(Object-Graph Navigation Languaged)的缩写,他是一种功能强大的表达式语言,通过简单一致的表达式语法,可以存取Java对 ...

  4. EL与OGNL以及值栈的理解

    这里先添加下在项目遇到的问题: 这两天在做论坛项目的时候,犯了一个错误:将数据放入值栈中,结果jsp页面获取不到. 困扰了许久: 总结如下: (1)每个action对应相应页面的值栈中值的获取,在属于 ...

  5. Struts2 (三) — OGNL与值栈

    一.OGNL表达式 1.概述 1.1什么是OGNL ​ OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...

  6. (转)OGNL与值栈

    http://blog.csdn.net/yerenyuan_pku/article/details/67709693 OGNL的概述 什么是OGNL 据度娘所说: OGNL是Object-Graph ...

  7. 4、OGNL与值栈

    一.OGNL 1.什么是OGNL 对象导航图语言(Object Graph Navigation Language),简称OGNL,是应用于Java中的一个开源的表达式语言(Expression La ...

  8. Struts工作机制图+OGNL+EL+值栈(Map,对象栈)

    struts 值栈  通过get set方法 方便的获取,设置属性值      比如从jsp页面传来的參数...从Action设置jsp所要回显的内容 注意EL表达式,struts2对request进 ...

  9. OGNL stack value 值栈(主要参考官方手册)

    The framework uses a standard naming context to evaluate OGNL expressions. The top level object deal ...

随机推荐

  1. XE10开发的APP对于苹果IPV6上架要求的处理(DelphiTeacher)

    1.服务器必须使用域名.不能使用IP地址2.Indy的话,域名加[]3.DataSnap的话,Params.Values['CommunicationIPVersion'] :='IP_IPv6';4 ...

  2. ASP.NET Core2利用Jwt技术在服务端实现对客户端的身份认证

    背景 在微服务架构下,一般都会按不同的业务或功能将整个系统切分成不同的独立子系统,再通过REST API或RPC进行通讯并相互调用,形成各个子系统之间的串联结构.在这里,我们将采用REST API的通 ...

  3. Time 模块中asctime()、time()、localtime()、ctime()、gmtime()的用法

    Time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的: time.asctime([tupletime]) 接受时间元组并返回一个可读的形式“Tue Dec 11 18:07:14 2 ...

  4. C#线程和异步

    C#Thread学习 C#ThreadPool学习 C#Task学习 C#backgroundWorker c# 锁的使用 C#前台线程和后台线程区别 C#Async,await异步简单介绍 C#委托 ...

  5. 第一个.NET Core应用,创建.NET Core命令

    打开cmd,依次输入mkdir .project(创建目录),cd .\.project(进入目录),dotnet new(新建初始项目),dotnet restore(还原依赖),dotnet ru ...

  6. SQLServer客户端连接工具(支持2000,20005,2008)

    绿色版本, 体积小(不到2M), 支持数据库版本2000 2005 2008 界面仿最经典的SQLServer2000: 下载地址:http://download.csdn.net/detail/gg ...

  7. jxl读取excel

    String path=""; String path2=""; File file = new File(path); File file2 = new Fi ...

  8. CH5102 Mobile Service

    CH5102 Mobile Service 描述 一个公司有三个移动服务员,最初分别在位置1,2,3处.如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去.某一时刻只有一 ...

  9. 2016级算法第一次练习赛-B.朴素的中位数

    朴素的中位数 题目链接:https://buaacoding.cn/problem/846/index 分析 题意很简单,就是给定了两个从小到大排好序的数组,找出这两个数组合起来的数据中的中位数. 方 ...

  10. Linux 内存监控

    1.按照内存使用方式排序 top 之后使用 shift + m 那么top按照内存使用从大到小进行排列,使用 shift + P 表示按照CPU进行排序. bigfish 1118m 438m 30m ...