OGNL中的#、%和$符号用法说明

合集下载

OGNL(取值、赋值、调用普通方法、静态方法、创建对象)

OGNL(取值、赋值、调用普通方法、静态方法、创建对象)

OGNL(取值、赋值、调⽤普通⽅法、静态⽅法、创建对象)1、OGNL表达式(1)概念OGNL:对象导航图语⾔(Object Graph Navigation Language),是⼀种表达式语⾔,功能⽐EL表达式更为强⼤,它是集成在Struts中的。

在创建Struts项⽬的时候已经将OGNL有关的包导⼊了,所以,这⾥不需要重复导包。

(2)OGNLContext对象:EL表达式从是⼀个内置对象中取值,⽽OGNL表达式只从OGNLContext对象中取值,该对象可以分为两部分,其中root部分可以存放任何对象,Context部分只能存放键值对。

2、OGNL初始化和取值public class OgnlTest {public void test() throws OgnlException {User rootuser=new User("zhai","123",12);//root部分Map<String,User> context=new HashMap<String, User>();//context部分context.put("user1",new User("user1","111",12));context.put("user2",new User("user2","222",13));OgnlContext ognlContext=new OgnlContext();//创建OGNLContext对象ognlContext.setRoot(rootuser);ognlContext.setValues(context);//将root和context部分放⼊到OGNLContext内部String name= (String)Ognl.getValue("username",ognlContext,ognlContext.getRoot());//取值Integer age=(Integer)Ognl.getValue("userage",ognlContext,ognlContext.getRoot());String password=(String)Ognl.getValue("password",ognlContext,ognlContext.getRoot());System.out.println("⽤户名:"+name+",年龄"+age+",密码:"+password);String name1= (String)Ognl.getValue("#ername",ognlContext,ognlContext.getRoot());Integer age1=(Integer)Ognl.getValue("#erage",ognlContext,ognlContext.getRoot());System.out.println("⽤户名:"+name1+",年龄"+age1);}(1)在初始化部分,需要先对root和context分别做初始化操作,然后将root和context放⼊到OGNLContext对象内部,这样初始化⼯作就完成了。

OGNL表达式介绍

OGNL表达式介绍

OGNL表达式介绍OGNL是Object-Graph Navigation Language的缩写,它是⼀种功能强⼤的表达式语⾔(Expression Language,简称为EL),通过它简单⼀致的表达式语法,可以存取对象的任意属性,调⽤对象的⽅法,遍历整个对象的结构图,实现字段类型转化等功能。

它使⽤相同的表达式去存取对象的属性。

-------百度百科 从语⾔⾓度来说:它是⼀个功能强⼤的表达式语⾔,⽤来获取和设置 java 对象的属性,它旨在提供⼀个更⾼抽象度语法来对 java 对象图进⾏导航。

另外,java 中很多可以做的事情,也可以使⽤ OGNL 来完成,例如:列表映射和选择。

对于开发者来说,使⽤ OGNL,可以⽤简洁的语法来完成对 java 对象的导航。

通常来说:通过⼀个“路径”来完成对象信息的导航,这个“路径”可以是到 java bean 的某个属性,或者集合中的某个索引的对象,等等,⽽不是直接使⽤ get 或者 set ⽅法来完成。

⾸先来介绍下OGNL的三要素: ⼀、表达式: 表达式(Expression)是整个OGNL的核⼼内容,所有的OGNL操作都是针对表达式解析后进⾏的。

通过表达式来告诉OGNL操作到底要⼲些什么。

因此,表达式其实是⼀个带有语法含义的字符串,整个字符串将规定操作的类型和内容。

OGNL表达式⽀持⼤量的表达式,如“链式访问对象”、表达式计算、甚⾄还⽀持Lambda表达式。

⼆、Root对象: OGNL的Root对象可以理解为OGNL的操作对象。

当我们指定了⼀个表达式的时候,我们需要指定这个表达式针对的是哪个具体的对象。

⽽这个具体的对象就是Root对象,这就意味着,如果有⼀个OGNL表达式,那么我们需要针对Root对象来进⾏OGNL表达式的计算并且返回结果。

三、上下⽂环境: 有个Root对象和表达式,我们就可以使⽤OGNL进⾏简单的操作了,如对Root对象的赋值与取值操作。

常用的ONGL表达式

常用的ONGL表达式

常用ONGL表达式1. 基本对象树的访问对象树的访问就是通过使用点号将对象的引用串联起来进行。

例如:name,,2. 对容器变量的访问对容器变量的访问,通过#符号加上表达式进行。

例如:#name,#,#3. 使用操作符号OGNL表达式中能使用的操作符基本跟Java里的操作符一样,除了能使用+, -, *, /, ++, --, ==, !=, = 等操作符之外,还能使用mod, in, not in等。

4. 容器、数组、对象OGNL支持对数组和ArrayList等容器的顺序访问:例如:ers[0]同时,OGNL支持对Map的按键值查找:例如:#session['mySessionPropKey']不仅如此,OGNL还支持容器的构造的表达式:例如:{"green", "red", "blue"}构造一个List,#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}构造一个Map你也可以通过任意类对象的构造函数进行对象新建:例如:new .URL("http://localhost/")5. 对静态方法或变量的访问要引用类的静态方法和字段,他们的表达方式是一样的@class@member或者@class@method(args):例如:@com.javaeye.core.Resource@ENABLE,@com.javaeye.core.Resource@getAllResources 6. 方法调用直接通过类似Java的方法调用方式进行,你甚至可以传递参数:例如:user.getName(),ers.size(),group.containsUser(#requestUser)7. 投影和选择OGNL支持类似数据库中的投影(projection)和选择(selection)。

OGNL表达式详解

OGNL表达式详解

OGNL表达式详解OGNL表达式标签中的值有三种:1.直接是OGNL表达式。

2.字符串需转义⾃OGNL表达式。

1)OGNL表达式转换为字符串显⽰,需要⽤''(单引号)引起来。

2)转为OGNL表达式的字符串,需要加%{字符串}来转换3.只能是字符串。

标签:⼀、数据标签1.property -- 显⽰数据value -- 要显⽰的内容,放OGNL表达式如果要显⽰字符串,需要⽤''引起来。

escape -- true/false 默认是true, 改为false显⽰html效果标签default 默认值,放字符串,不是放OGNL<s:property value="'<h1>HAHA<h1>'" escape="false" default="[这是默认值]"/>2.set -- 设置⼀个新变量,赋值var -- 新变量名scope --范围 page/request/session/applicationvalue --变量值,OGNL表达式,字符串要加单引号<s:set var="ah" value="newsList" scope="request"></s:set><s:property value="#request.ah"/>3.url -- ⽣成⽹址var -- 变量名value--要⽣成的URL地址,字符串可转义⾃OGNL,要⼿动写出完整的地址。

action -- 要⽣成的URL地址,字符串可转义⾃OGNL,⽣成出绝对路径。

⼀般⽤这个<s:url var="uu" action="News_getAll"></s:url><s:property value="#uu"/>4.bean -- JavaBean的实现类name -- 要实例化的Java类var -- 变量名5.param -- ⽣成参数name -- 标签名value -- OGNL表达式,加单引号<s:bean name="com.itnba.maya.domel.News" var="bbb"><s:param name="biaoti" value="'这是⾃定义的标题'"></s:param> </s:bean><s:property value="#bbb.biaoti"/><s:url var="uu" action="News_getAll"><s:param name="ids" value="'k001'"></s:param></s:url><s:property value="#uu"/>6.date -- 格式化输出⽇期name -- 要格式化的⽇期值 --- OGNL表达式format --- 格式化显⽰的格式。

ognl 三目表达式判断字符串参数拼接

ognl 三目表达式判断字符串参数拼接

ognl 三目表达式判断字符串参数拼接1.引言1.1 概述在本文中,将会介绍OGNL(Object-Graph Navigation Language)以及如何利用三目表达式来判断字符串参数拼接的方法。

OGNL是一种强大的表达式语言,可以用于访问和操作对象的属性、方法和索引,是很多Java框架(如Struts2、JSP等)中常用的表达式语言之一。

三目表达式是一种简洁的条件表达式,由三个部分组成:条件部分、真值部分和假值部分。

根据条件的真假情况,表达式可以返回真值部分或假值部分的值。

在本文中,我们将会利用三目表达式来判断字符串参数的情况,并实现相应的拼接方法。

本文的目的是为读者提供一个深入理解OGNL和三目表达式的文章,帮助读者在实际项目中更好地应用这两种技术。

在接下来的章节中,我们将首先介绍OGNL的基本概念和用法,然后深入探讨三目表达式的工作原理和常见用法。

最后,我们将给出一些例子,帮助读者更好地理解和运用OGNL和三目表达式。

在这篇文章中,我们将从基础知识开始,逐步向高级内容过渡。

无论您是初学者还是有一定经验的开发者,本文都会为您提供有价值的信息和实用的技巧。

希望读者通过本文的阅读,能够更加了解OGNL和三目表达式,并能够在实际项目中灵活运用这些技术。

接下来,我们将进入正文部分,首先介绍OGNL的简介和基本概念。

让我们一起开始这段令人兴奋的学习之旅吧!1.2 文章结构该篇文章主要围绕OGNL 和三目表达式展开讨论,并介绍了如何使用这两者来判断字符串参数拼接的方法。

文章结构如下所示:第一部分为引言,主要包括概述、文章结构和目的。

1.1 概述:介绍文章的主题和背景,提出需要解决的问题。

1.2 文章结构:本部分,即本文所在的部分,将详细介绍文章的结构和内容布局。

1.3 目的:阐明文章的目标和意义,以及解决问题的重要性。

第二部分为正文,主要分为三个小节,分别是OGNL 简介、三目表达式概述和字符串参数拼接方法。

ognl表达式 四则运算

ognl表达式 四则运算

ognl表达式四则运算
OGNL表达式是一种强大的表达式语言,它可以用于在Java应用程序中进行动态数据访问和操作。

其中包含了四则运算,即加、减、乘、除四种运算。

在OGNL表达式中,加法运算使用“+”符号表示,例如:
num1 + num2
这将返回num1和num2的和。

减法运算使用“-”符号表示,例如:
num1 - num2
这将返回num1减去num2的结果。

乘法运算使用“*”符号表示,例如:
num1 * num2
这将返回num1和num2的乘积。

除法运算使用“/”符号表示,例如:
num1 / num2
这将返回num1除以num2的结果。

除此之外,OGNL表达式还支持其他运算,如取模运算(“%”符号)和幂运算(“^”符号)等。

熟练掌握OGNL表达式的四则运算对于Java开发者来说是非常重要的。

- 1 -。

mybatis ognl调类方法

mybatis ognl调类方法

mybatis ognl调类方法Mybatis OGNL调用类方法Mybatis是一种持久层框架,它的主要作用是将数据库操作与Java代码分离,简化了数据访问层的编写。

OGNL(Object-Graph Navigation Language)是Mybatis中用于实现动态SQL的表达式语言。

在Mybatis中,可以使用OGNL表达式来调用Java类的方法。

下面我将介绍如何使用OGNL调用类方法。

首先,在Mybatis的SQL映射文件中,可以使用OGNL表达式来调用类方法。

例如,假设有一个User类,其中有一个静态方法getNameById,用于根据用户ID获取用户名。

可以在SQL映射文件中使用OGNL表达式调用该方法:```xml<select id="selectUserById" resultType="String">SELECT ${className}.getNameById(${userId})FROM usersWHERE id = #{userId}</select>```上述代码中,`${className}`是一个OGNL表达式,用于获取User类的类名。

`${userId}`是一个参数占位符,用于获取用户ID。

通过使用OGNL表达式调用类的静态方法,可以实现根据ID获取用户名的功能。

其次,在代码中使用OGNL表达式调用类方法也非常简单。

可以使用OGNL的`@class@methodName(args)`语法来调用类方法。

例如,假设有一个User类,其中有一个实例方法getAge,用于获取用户的年龄。

可以使用OGNL表达式调用该方法:```javaMap<String, Object> parameter = new HashMap<>();parameter.put("user", user);int age = (int) Ognl.getValue("@class@getAge()", parameter, user);```上述代码中,`user`是一个实例对象,`parameter`是一个存储OGNL表达式参数的Map,并且将`user`对象存入Map中。

OGNL标签

OGNL标签
ActonContext |
|--value stack(root)
|
|--request
|
|--parameters
获得List中指定位置的数据:lists[下标]==>${lists[下标]}
B.访问Set
获得web范围的Set: sets==>${sets}==>xxx.getAttribute("sets")
注:因为set是没有顺序的,所以不可以获得指定位置的数据
4>获得application范围的值
#
=>#application['name']
=>#application["name"]
相当于:${}和application.getAttribute("name");
eg:
<s:property value=""/>
此处是指访问栈中的p属性的name值
<s:property value="[1].top"/>
此处是指从栈的1位置开始访问栈,并访问此时栈的栈顶元素
<s:property value="[1]"/>
plists.add(p1);
Person p2 = new Person("lisi",32)
plists.add(p2);
Person p3 = new Person("wangwu",42)
plists.add(p3);
plists则是由Person对象组成的一个集合,那么我们可以对plists进行投影操作

mybatis ognl 高级用法

mybatis ognl 高级用法

MyBatis OGNL 高级用法1. 什么是 MyBatis OGNLMyBatis是一个开源的持久层框架,它可以将数据库操作和Java对象之间的映射进行简化。

OGNL(Object-Graph Navigation Language)是MyBatis中用于表达式求值的一种语言。

它可以在MyBatis的配置文件中使用,用于动态地生成SQL语句和进行数据处理。

2. OGNL 表达式基础OGNL表达式由一系列的属性、方法和操作符组成,用于对Java对象进行读取和操作。

下面是一些常用的OGNL表达式示例:2.1 访问对象属性使用点号(.)可以访问Java对象的属性。

例如,对于一个名为user的对象,可以使用来获取该对象的name属性的值。

2.2 调用对象方法使用小括号(())可以调用Java对象的方法。

例如,对于一个名为user的对象,可以使用user.getName()来调用该对象的getName方法。

2.3 数组访问使用方括号([])可以访问Java对象中的数组元素。

例如,对于一个名为numbers的整型数组,可以使用numbers[0]来获取数组中的第一个元素。

2.4 算术操作OGNL支持常见的算术操作,例如加法、减法、乘法和除法。

可以使用+、-、*和/来进行相应的操作。

2.5 逻辑操作OGNL支持逻辑操作,例如与(&&)、或(||)和非(!)。

可以使用这些操作符来对布尔值进行操作。

3. MyBatis 中的 OGNL 用法在MyBatis中,OGNL主要用于两个方面:动态SQL和结果映射。

3.1 动态SQLMyBatis的动态SQL功能允许根据不同的条件生成不同的SQL语句。

OGNL在动态SQL中发挥着重要的作用,可以使用OGNL表达式来判断条件和拼接SQL语句。

3.1.1 if 条件判断使用<if>标签可以在SQL语句中进行条件判断。

可以使用OGNL表达式来指定条件。

阿尔萨斯 ognl 可变参数

阿尔萨斯 ognl 可变参数

标题:深度解析阿尔萨斯和ognl可变参数一、引言在软件开发中,阿尔萨斯(Alibaba Java Diagnostic)和ognl (Object-Graph Navigation Language)可变参数是两个十分重要的概念和工具。

通过深入了解和掌握这两个主题,我们可以更好地开发和调试Java应用程序。

本文将从简单到复杂的角度,全面探讨阿尔萨斯和ognl可变参数的相关知识,并且共享我个人的观点和理解。

二、阿尔萨斯1. 阿尔萨斯概述让我们对阿尔萨斯进行一个整体的了解。

阿尔萨斯是阿里巴巴开源的Java诊断工具,它提供了一套丰富的功能,包括方法执行追踪、实时监控、参数解析等。

它能够帮助开发人员快速诊断和解决Java应用程序中的各种问题,大大提高了开发效率和应用程序的性能。

2. 阿尔萨斯的使用方法在实际开发中,我们可以通过在Java应用程序中引入阿尔萨斯的AgentJar,并通过命令行或Web界面对应用程序进行监控和诊断。

通过阿尔萨斯,我们可以查看方法的执行流程、参数的传递情况,甚至可以进行动态修改方法的返回值等操作,极大地方便了开发和调试工作。

3. 我的观点和理解个人而言,我认为阿尔萨斯作为一款优秀的Java诊断工具,其便利性和强大的功能给我在工作中带来了很大的帮助。

通过对阿尔萨斯的深入学习和实践,我更加灵活地进行应用程序的调试和优化,在解决各种问题时事半功倍。

三、ognl可变参数1. ognl的基本概念接下来,让我们来了解ognl可变参数这一概念。

ognl是一种对象图导航语言,它允许开发人员通过表达式来访问和操作Java对象的属性、方法等。

在实际开发中,ognl可变参数常常用于实现动态参数的传递和处理。

2. ognl可变参数的用法在Java开发中,我们可以通过使用ognl表达式来灵活地处理Java对象的属性和方法。

ognl可变参数允许我们在运行时动态地向方法传递参数,并根据需要进行调整和处理,大大增强了程序的灵活性和可扩展性。

ognl 二元表达式

ognl 二元表达式

ognl 二元表达式
(原创版)
目录
1.OGNL 简介
2.二元表达式的概念
3.OGNL 中的二元表达式
4.OGNL 二元表达式的应用
5.结论
正文
1.OGNL 简介
OGNL(Open Government Natural Language)是一种基于自然语言处理的政府文档处理技术。

它主要用于从非结构化文本数据中抽取结构化信息,以便进行进一步的分析和应用。

OGNL 技术在政府、企业等领域有着广泛的应用,尤其在政策法规、公告文件等场景中具有重要意义。

2.二元表达式的概念
二元表达式是指由两个或多个表达式通过逻辑运算符连接而成的表达式,例如:a > b、a < b、a == b 等。

在计算机科学中,二元表达式常用于条件判断、结果计算等场景。

3.OGNL 中的二元表达式
在 OGNL 中,二元表达式作为一种重要的文本处理手段,可以用于对非结构化文本数据进行条件筛选、信息抽取等操作。

OGNL 提供了丰富的逻辑运算符和比较运算符,例如:and、or、eq、ne 等,以满足各种复杂的条件判断需求。

4.OGNL 二元表达式的应用
OGNL 中的二元表达式在实际应用中具有重要价值。

例如,在处理政策法规文件时,可以通过 OGNL 二元表达式来提取特定条款、关键词等信息。

在企业领域,二元表达式也可以用于自动化处理各类公告、报告等文档,提高工作效率。

5.结论
OGNL 作为一种先进的自然语言处理技术,其二元表达式功能在处理非结构化文本数据方面具有重要作用。

ognl java 例子

ognl java 例子

ognl java 例子OGNL是一个功能强大的Java表达式语言,可用于访问Java对象的属性、方法和操作符。

它的全称是Object-Graph Navigation Language,即对象图导航语言。

在Java应用程序中,OGNL常用于表达式求值、表单验证、模板引擎和Spring等框架中。

本文将介绍OGNL在Java中的具体应用示例,包括OGNL表达式的基本语法和相关概念、如何在Java中使用OGNL表达式进行属性读写、方法调用和集合访问等操作。

1. OGNL表达式基本语法OGNL表达式由许多不同的语法组成,包括:- 文字和数字:例如“Hello world”,123等。

- 属性路径:一个属性路径由一系列属性名组成,表示对象之间的关系。

例如“person.address.street”表示一个人的居住地址的街道名称。

- 索引器:允许按位置或键访问集合、数组或Map等对象。

例如“items[0]”表示返回一个集合中第一个元素。

- 操作符:比较运算符、算术运算符、逻辑运算符等。

2. 在Java中使用OGNL表达式2.1 获取属性值通过OGNL表达式可以获取对象的属性值,例如获取一个人对象的姓名:String expression = "";String name = (String) Ognl.getValue(expression, context, root);System.out.println("姓名:" + name);2.2 设置属性值通过OGNL表达式可以设置对象的属性值,例如设置一个人对象的年龄:String expression = "person.age";Ognl.setValue(expression, context, root, 28);System.out.println("年龄:" + person.getAge());2.3 调用方法通过OGNL表达式可以调用对象的方法,例如调用一个人对象的sayHello()方法:String expression = "person.sayHello()";String result = (String) Ognl.getValue(expression, context, root);System.out.println("结果:" + result);2.4 访问集合通过OGNL表达式可以访问集合对象中的元素,例如获取一个集合中的第一个元素:String expression = "items[0]";Object item = Ognl.getValue(expression, context, root); System.out.println("集合第一个元素:" + item);通过OGNL表达式可以访问Map对象中的键值对,例如获取一个Map中的value:String expression = "map.key1";Object value = Ognl.getValue(expression, context, root); System.out.println("Map value:" + value);3. 示例代码下面是一个使用OGNL表达式访问对象的示例代码:public class Person {private String name;private int age;private Address address;// 省略getter和setter方法public String sayHello() {return "Hello, my name is " + name;}}public class Address {private String street;private String city;// 省略getter和setter方法}public class Example {public static void main(String[] args) throws OgnlException {Person person = new Person();person.setName("张三");person.setAge(26);Address address = new Address();address.setStreet("长安街");address.setCity("北京市");person.setAddress(address);List<String> items = new ArrayList<String>();items.add("item1");items.add("item2");items.add("item3");Map<String, String> map = new HashMap<String, String>();map.put("key1", "value1");map.put("key2", "value2");OgnlContext context = new OgnlContext();context.setRoot(person);context.put("items", items);context.put("map", map);// 获取属性值String expression = "";String name = (String) Ognl.getValue(expression, context, context.getRoot());System.out.println("姓名:" + name);// 设置属性值expression = "person.age";Ognl.setValue(expression, context, context.getRoot(),28);System.out.println("年龄:" + person.getAge());// 调用方法expression = "person.sayHello()";String result = (String) Ognl.getValue(expression, context, context.getRoot());System.out.println("结果:" + result);// 访问集合expression = "items[0]";String item = (String) Ognl.getValue(expression, context, context.getRoot());System.out.println("集合第一个元素:" + item);// 访问Mapexpression = "map.key1";String value = (String) Ognl.getValue(expression, context, context.getRoot());System.out.println("Map value:" + value);}}以上就是使用OGNL表达式在Java中访问对象的示例代码,希望能对您的学习有所帮助。

mybatis ognl表达式语法

mybatis ognl表达式语法

MyBatis 的OGNL 表达式语法是一种用于在SQL 语句中动态生成SQL 片段的强大工具。

OGNL 代表Object-Graph Navigation Language,它允许使用表达式来访问对象的属性、方法、集合等。

以下是一些MyBatis OGNL 表达式的常见用法:访问属性:使用#{} 可以访问对象的属性。

sqlSELECT * FROM user WHERE name = #{name}算术和比较操作符:您可以在OGNL 表达式中使用算术和比较操作符。

sqlSELECT * FROM user WHERE age > #{minAge}逻辑操作符:OGNL 支持逻辑操作符如AND, OR 和NOT。

sqlSELECT * FROM user WHERE (name = 'John' AND age > 18) OR (name = 'Jane' AND age < 25)集合和数组:OGNL 支持迭代集合和数组。

sqlSELECT * FROM user WHERE id IN<foreach item="item" index="index" collection="list" open="(" separator="," close=")">#{item}</foreach>条件判断:使用if、choose、when 和otherwise 进行条件判断。

sqlSELECT * FROM user WHERE 1=1<if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if>字符串处理:使用concat 进行字符串拼接。

ognl注入原理

ognl注入原理

ognl注入原理摘要:1.OGNL 简介2.OGNL 注入原理3.OGNL 注入的利用4.OGNL 注入的防范正文:1.OGNL 简介OGNL(Open Graph Notation Language)是一种用于表示图形结构和关系的表达式语言,常用于构建复杂的数据结构和网络应用。

它具有灵活性和强大的表达能力,可以方便地表示各种类型的数据和关系。

2.OGNL 注入原理OGNL 注入是一种常见的安全漏洞攻击方式,攻击者通过在OGNL 表达式中注入恶意的代码,从而实现对目标系统的非法操作。

OGNL 注入的原理主要基于OGNL 表达式的动态解析和执行。

当应用程序使用OGNL 表达式时,OGNL 解释器会根据表达式的语法和规则进行解析,并将解析后的结果赋值给相应的变量。

攻击者利用这个过程,通过在表达式中注入恶意代码,使得解析后的结果达到攻击者的目的。

3.OGNL 注入的利用OGNL 注入攻击可以实现多种目的,包括但不限于:- 窃取敏感信息:攻击者通过注入恶意表达式,可以获取到系统中的敏感信息,如用户密码、数据库配置等。

- 执行任意代码:攻击者可以利用OGNL 注入漏洞,执行任意的系统命令,从而实现对目标系统的完全控制。

- 拒绝服务攻击:攻击者可以通过注入大量恶意数据,导致系统崩溃或服务中断。

4.OGNL 注入的防范为了防止OGNL 注入攻击,开发者可以采取以下措施:- 对用户输入进行严格过滤和校验:开发者应该对用户输入的OGNL 表达式进行严格的过滤和校验,防止恶意代码的注入。

- 使用安全的OGNL 函数:开发者应该尽量使用安全的OGNL 函数,避免使用容易导致注入的函数。

- 对OGNL 表达式进行编码:开发者可以对OGNL 表达式进行编码,从而防止攻击者通过注入恶意代码实现攻击。

OGNL使用小结(一)

OGNL使用小结(一)

OGNL使用小结(一)最近一直使用struts2,表现层采用JSP,用的struts2标签,支持OGNL。

OGNL中的# $ %使用场景:1、“#”主要有三种用途:访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:名称作用例子parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id")request 包含当前HttpServletRequest的属性(attribute)的Map #erName相当于request.getAttribute("userName")session 包含当前HttpSession的属性(attribute)的Map #erName相当于session.getAttribute("userName")application 包含当前应用的ServletContext的属性(attribute)的Map #erName 相当于application.getAttribute("userName")attr 用于按request > session > application顺序访问其属性(attribute)#erName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止用于过滤和投影(projecting)集合,如books.{?#this.price<100};构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

2、“%”符号的用途在标志的属性为字符串类型时,计算OGNL表达式的值。

OGNL 表达式简介

OGNL 表达式简介

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

它使用相同的表达式去存取对象的属性。

OGNL特性:1,一个OGNL表达式的基本组成是:navigation chain。

组成如下:Properity nameMethod callsArray Indices如:name.toCharArray()[0].numericValue.toString()name.toCharArray()转化为数组;numericValue相当于Character类的getNumericValue()方法:static int getNumericValue(char ch);2,简化JavaBeans的get/set机制如:public Object getAttribute(String name)public void setAttribute(String name, Object value)简化为:session.attribute[“foo”]3,OGNL有一个简化变量机制(在变量前加符号#),所有OGNL变量在整个表达式里是全局的。

如:#var#var = 99listeners.size().( #this > 100 ? 2 * #this : 20 + #this ) 调用listeners的size()并与100比较。

4,chain subexpressions如:headline.parent.(ensureLoaded(), name)headline.parent<-root objectensureLoaded()被root object调用,然后set/get name property。

ognl 数组

ognl 数组

ognl 数组OGNL(Object-Graph Navigation Language)是一种用于处理Java对象的表达式语言,主要用于数据绑定和数据显示。

它提供了一种简单、直观的方式来访问和操作Java对象的属性。

在OGNL中,数组是一种常见的数据结构。

通过使用OGNL,我们可以对数组进行访问、遍历、过滤、排序和修改等各种操作。

下面是一些关于OGNL数组的相关参考内容。

1. 访问数组元素使用OGNL表达式可以轻松地访问数组元素。

可以通过指定索引的方式来访问数组特定位置的元素,例如`arrayName[index]`。

例如,对于一个名为`array`的数组,可以通过`array[0]`访问第一个元素。

2. 遍历数组OGNL提供了遍历数组的功能,可以使用`{}`括号将OGNL表达式的结果包装成一个数组。

可以使用`#item`来引用数组中的每个元素,并在OGNL表达式的上下文中使用它。

例如:```array = {1, 2, 3, 4}#item in array```这将返回一个包含数组`{1, 2, 3, 4}`中的所有元素的新数组。

3. 数组操作符OGNL提供了多种数组操作符,可以对数组执行不同的操作。

一些常用的数组操作符包括:- `+`:将两个数组合并成一个新数组。

- `-`:从一个数组中移除另一个数组中的元素。

- `*`:重复一个数组多次。

- `/`:将一个数组拆分成多个数组。

4. 数组过滤和排序使用OGNL可以轻松地对数组进行过滤和排序操作。

可以使用`?`来指定过滤条件,并使用`^`来指定排序条件。

例如:```array = {1, 2, 3, 4, 5}array.{#item > 2} // 过滤出大于2的元素array.^{#item} // 对数组进行升序排序array.$^{#item} // 对数组进行降序排序```5. 数组修改除了访问、遍历、过滤和排序数组之外,OGNL还可以通过修改数组元素来改变数组的内容。

ognl 数组

ognl 数组

OGNL 数组什么是 OGNL?OGNL(Object-Graph Navigation Language)是一种用于对象图导航的表达式语言。

它最初是为了在Java平台上访问和操作对象图而开发的,但现在也可以在其他编程语言中使用。

OGNL 具有简洁、直观和强大的特性,使得它成为了许多Java框架和库的重要组成部分。

例如,在Struts、Hibernate和Spring等框架中,OGNL 被广泛用于处理对象图。

数组操作数组是一种用于存储多个相同类型数据的数据结构。

在 OGNL 中,我们可以使用一些内置函数和语法来操作数组。

创建数组使用 OGNL 可以轻松地创建数组。

以下是创建一个包含整数的数组的示例:int[] numbers = {1, 2, 3, 4, 5};访问数组元素要访问数组中的特定元素,我们可以使用索引。

索引从0开始,并按照元素在数组中出现的顺序递增。

int firstNumber = numbers[0]; // 访问第一个元素(索引为0)int secondNumber = numbers[1]; // 访问第二个元素(索引为1)更新数组元素可以通过将新值赋给指定索引位置来更新数组中的元素。

numbers[0] = 10; // 更新第一个元素(索引为0)为10数组长度可以使用length属性获取数组的长度。

int length = numbers.length; // 获取数组的长度遍历数组OGNL 提供了一种简单的方式来遍历数组并访问每个元素。

for (int number : numbers) {System.out.println(number);}数组切片可以使用 OGNL 的切片语法来获取数组中的子数组。

切片语法使用:分隔起始索引和结束索引(不包括)。

int[] subArray = numbers[1:4]; // 获取从第二个元素到第四个元素(不包括)数组操作函数OGNL 还提供了一些有用的函数来操作数组。

ognl 表达式 if语句

ognl 表达式 if语句

ognl 表达式 if语句OGNL(Object-Graph Navigation Language)是一种基于Java 的表达式语言,用于在Java对象图中导航和操作属性。

它支持多种操作符和函数,可以用于条件判断、循环控制、属性访问等场景。

下面列举了一些符合标题要求的OGNL表达式的示例:1. 判断某个数是否大于10:```#num > 10 ? "大于10" : "小于等于10"```2. 判断某个字符串是否为空:```#str.isEmpty() ? "字符串为空" : "字符串不为空"```3. 判断某个集合是否包含指定元素:```#list.contains("element") ? "集合包含指定元素" : "集合不包含指定元素"```4. 判断某个对象是否为null:```#obj == null ? "对象为null" : "对象不为null"```5. 判断某个数是否为偶数:```#num % 2 == 0 ? "偶数" : "奇数"```6. 判断某个字符串是否以指定前缀开头:```#str.startsWith("prefix") ? "以指定前缀开头" : "不以指定前缀开头"```7. 判断某个集合是否为空:```#list.isEmpty() ? "集合为空" : "集合不为空"```8. 判断某个对象是否为指定类型:```#obj.class == ng.String ? "对象为String类型" : "对象不是String类型"```9. 判断某个数是否为正数:```#num > 0 ? "正数" : "非正数"```10. 判断某个字符串是否包含指定子串:```#str.contains("substring") ? "包含指定子串" : "不包含指定子串" ```以上示例展示了OGNL表达式在条件判断方面的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OGNL中的#、%和$符号用法说明
#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。

1.#符号的用途一般有三种。

1) 用于访问根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其它非根对象时,需要加#前缀。

实际上,
#相当于ActionContext. getContext();
#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。

2) 用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

3) 用来构造Map,例如示例中的#{'foo1':'bar1','foo2':'bar2'}。

2.%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

如下面的代码所示:
构造Map
<s:set name="foobar" value="#{'foo1':'bar','foo2':'bar2'}" />
<p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>
<p>不使用%:<s:url value="#foobar['foo1']" /></p>
<p>使用%:<s:url value="%{#foobar['foo1']}" /></p>
3.$符号
$符号主要有两个方面的用途。

在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:
<validators>
<field name=”intb”>
<field-validator type=”int”>
<param name=”min”>10</param>
<param name=”max”>100</param>
<message>BAction-test校验:数字必须为${min}为${max}之间!
</message>
</field-validator>
</field>
</validators>。

相关文档
最新文档