JavaEE框架---Struts2第三部分

本文深入探讨了OGNL(对象图导航语言),一种强大的表达式语言,用于存取对象属性,调用方法,遍历对象结构图。文章覆盖了OGNL的基础概念,包括其在Java和Struts2环境下的应用,值栈的结构与操作,以及OGNL中的特殊字符等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要: 

  • OGNL表达式
    • OGNL的概述
      • OGNL:对象图导航语言,是一门功能强大的表达式语言。
    • OGNL的功能
      • 调用对象的方法
      • 调用对象的静态方法
      • 表达式串联
      • 访问ActionContext和OgnlContext数据
    • OGNL独立的表达式:
      • Java环境下入门
      • Struts2环境下入门
  • 值栈
    • 值栈的概述
      • ValueStack:是一个接口,实现类OgnlValueStack。是数据的中转站,贯穿了整个Action,有一个Action的实例,就会创建一个ValueStack对象。
    • 值栈的内部结构
      • Root :CompoundRoot,就是一个ArrayList。
      • Context :OgnlContext,就是一个Map。
    • ActionContext和值栈关系
      • ActionContext获得值栈的引用。
    • 获得值栈
      • 通过ActionContext获取
      • 通过request获取
    • 操作值栈
      • 利用Action本身在栈中的特点,Action中的属性。
      • 手动操作值栈:
    • 获取值栈的数据
      • OGNL获取:<s:property value=”…”/>
    • EL获取值栈的数据
      • 底层增强request.getAttribute(“”);
  • ONGL特殊字符
    • #号
      • 获取context数据
      • 构建map集合
    • %号
      • 强制解析OGNL
    • $号
      • 在配置文件中使用OGNL

 


                                              1.2OGNL

1.2.1OGNL概述

1.2.1.1 什么是OGNL

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

OGNL:对象图导航语言,比EL表达式强大很多倍的语言。

  •             El:从域对象中获取数据,从EL的11个对象中获取。
  •            OGNL:调用对象的方法,获取STruts2的值栈的数据。OGNL其实是第三方的表达式语言。

1.2.1.2为什么学习OGNL?

1.2.1.3 OGNL使用的要素

  • 表达式

  • 根对象 

 

Context对象

1.2.2 OGNL的JAVA环境的入门

1.2.2.1 访问对象的方法

1.2.2.2访问对象的静态方法

1.2.2.3 获得Root中的数据

1.2.2.4获得Context中的数据

1.2.3 OGNL的Struts环境的入门

1.2.3.1 访问对象的方法

1.2.3.2访问对象的静态方法

1.3值栈

1.3.1 值栈的概述

1.3.1.1 什么是值栈

ValueStack其实类似于一个数据中转站(Struts的框架当中的数据就保存到了ValueStack中)。

  •           ValueStack接口,实现类OgnlValueStack对象。
  •            ValueStack贯穿整个Action的生命周期。(ACtion一旦创建了,框架就会创建一个 ValueStack的对象)。

1.3.1.2 值栈的内部结构

ValueStack中有两个主要的区域

  •           root区域:其实就是一个ArrayList。里面一般放置对象。获取root的数据不需要加#。
  •           context区域:其实就是一个Map。里面放置的是web开发的常用的对象数据的引用。

获取context数据需要加#。

  • request
  • session
  • application
  • parameters
  • attr

所说的操作值栈,通常指的是操作的ValueStack中的root区域。

 

1.3.1.3 值栈与ActionContext的关系

ServletContext:Servlet的上下文

ActionContext:Action的上下文

        通过源码查看到:当请求过来的时候,执行过滤器中doFilter方法,在这个方法中创建ActionContext,在创建ActionContext过程中,创建ValueStack对象,将ValueStack对象传递给ActionContext对象。所以可以通过ActionContext获取值栈对象。

        ActionContext对象之所以能够访问Servlet的API(访问时域对象的数据)。因为在内部有值栈的引用。

1.3.1.4 获得值栈对象

  • 通过ActionContext对象获得值栈。
  • 在Struts的内部,将值栈存入request中一份。

1.3.1.5 操作值栈---向值栈中存入数据

一种:在Action中提供属性的get方法的方式

       默认的情况下,将Action对象压入值栈。Action的属性也在值栈中。

 

二种:使用ValueStack中本身的方法的方式

1.3.1.6获取值栈数据

获取值栈中的数据就是在页面中使用OGNL表达式即可。

获取root的数据:不需要加#

获取context数据 

  • 存数据: 

  • 取数据

1.3.1.7 EL为何访问值栈数据

1.4 OGNL中的特殊字符

1.4.1  #号

1.4.1.1 获取context的数据

1.4.1.2 使用#号构建map集合

1.4.2  %号

1.4.2.1 强制解析OGNL

1.4.2.2 不强制解析OGNL

 

1.4.3  $号

1.4.3.1 在配置文件中使用OGNL

属性文件

国际化地方:

XML文件

文件下载:

配置:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值