十四 OGNL的概述
1 什么是OGNL?
对象图导航语言(对象图,以任意一个对象为根,通过OGNL;可以访问与这个对象关联的其他对象)。比EL表达式强大很多倍。
可以存取对象的任意属性。调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。
- EL:从域对象中获取数据,从EL的11个对象中获取。${name}${pageContext.request.contextPath}
- OGNL:调用对象的方法,获取Struts2的值栈的数据,第三方表达式语言,Struts2引入的。
2 为什么学习OGNL?
主要是访问OGNL上下文(OGNL context 和 ActionContext)
3 OGNL使用的要素:
- 表达式
- 根对象 OGNL的操作对象,做什么
- Context对象 Root对象所在的环境就是OGNL的上下文环境(Context)
4 OGNL的Java环境入门(了解)
package com.struts2.domain; import org.junit.Test; import ognl.Ognl; import ognl.OgnlContext; import ognl.OgnlException; public class OGNLDemo1 { @Test /** * 调用对象的方法 * * @throws OgnlException */ public void demo1() throws OgnlException { // 获得Context OgnlContext context = new OgnlContext(); // 获得根对象 Object root = context.getRoot(); // 执行表达式 Object obj = Ognl.getValue("'heeloworld'.length()", context, root); System.out.println(obj); } @Test /** * 调用对象的静态方法 * * @throws OgnlException */ public void demo2() throws OgnlException { // 获得Context OgnlContext context = new OgnlContext(); // 获得根对象 Object root = context.getRoot(); // 执行表达式 Object obj = Ognl.getValue("@java.lang.Math@random()", context, root); System.out.println(obj); } @Test /** * 获得Root数据 * * @throws OgnlException */ public void demo3() throws OgnlException { // 获得Context OgnlContext context = new OgnlContext(); // 设置根对象 User user = new User("姓李", "密码不告诉你"); context.setRoot(user); // 获得根对象 Object root = context.getRoot(); Object username = Ognl.getValue("username", context, root); Object password = Ognl.getValue("password", context, root); System.out.println(username + " " + password); } @Test /** * 获得context中的数据 * * @throws OgnlException */ public void demo4() throws OgnlException { // 获得Context OgnlContext context = new OgnlContext(); // 向context中存入数据 User user = new User("姓李c", "密码不告诉你c"); context.put("user", user); // 获得根对象 Object root = context.getRoot(); Object obj = Ognl.getValue("#user", context, root); System.out.println(obj); } }
十四 OGNL的概述的更多相关文章
- How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧
个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的 ...
- 二十四、Struts2中的UI标签
二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...
- 十四、Struts2的国际化
十四.Struts2的国际化 1.配置全局国际化消息资源包 配置全局消息资源包 <!--配置全局消息资源包 --> <constant name="struts.c ...
- javaSE第二十四天
第二十四天 363 1:多线程(理解) 363 (1)JDK5以后的Lock锁 363 A:定义 363 B:方法: 364 C:具体应用(以售票程序为例) 364 ...
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的 ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...
- JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习
JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...
随机推荐
- JVM工具使用和Linux-top命令解析
top 命令 top 命令查看现在线程占用资料的情况. 第三行,cpu状态信息,具体属性说明如下: us — 用户空间占用CPU的百分比.(重要) sy — 内核空间占用CPU的百分比. ni — 改 ...
- 1042B. Vitamins
Berland shop sells nn kinds of juices. Each juice has its price cici. Each juice includes some set o ...
- HGsoft-downloader
[NEW]HGsoft-downloader上线了! 给你提供一个简洁无广告的电脑软件下载平台,换个角度下载电脑软件. 网站地址:Go
- yii2的防御csrf攻击机制
csrf,中文名称:跨站请求伪造,可以在百度上搜索资料,详细了解这一方面的概念.对于我们是非常有帮助的.yii2的csrf的实现功能是在yii\web\request类实现功能的.request类中的 ...
- What Is A Airless Pump Bottle?
What is an airless pump bottle?Unlike conventional dispensers that use a tube or suction tube to dra ...
- 吴裕雄--天生自然神经网络与深度学习实战Python+Keras+TensorFlow:使用TensorFlow和Keras开发高级自然语言处理系统——LSTM网络原理以及使用LSTM实现人机问答系统
!mkdir '/content/gdrive/My Drive/conversation' ''' 将文本句子分解成单词,并构建词库 ''' path = '/content/gdrive/My D ...
- python时间模块time,datetime
时间模块time.datetime 模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具.换言之,Python 默认情况下提供了一些可用的东西,但是这些默 ...
- 为什么局部内部类和匿名内部类只能访问 final 的局部变量?
首先,我们看一个局部内部类的例子: class OutClass { private int age = 12; public void outPrint(final int x) { class I ...
- Centos7 虚拟环境安装Django 出现ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' %Database.sqlite_version)错误
Centos7 虚拟环境安装Django 出现SQLite版本问题 raise ImproperlyConfigured('SQLite 3.8.3 or later is required (fou ...
- 【笔记2-环境配置及初始化】从0开始 独立完成企业级Java电商网站开发(服务端)
准备工作 Linux系统安装 云服务器部署 概要 申请和配置 域名的购买.解析.配置.绑定流程 用户创建实操 环境安装及部署 JDK.Tomcat.Maven下载安装及配置 vsftpd下载安装及配置 ...