OGNL表达式与struts2整合应用

本文详细介绍了OGNL(Object-Graph-Navigation-Language)表达式的使用方法,包括取值、赋值、调用方法等功能,并深入探讨了OGNL与Struts2框架的整合应用,如表单参数接收、配置文件使用及页面标签等。

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

OGNL:网上查阅。

Object-Graph-Navigation-Language的缩写,全称对象视图导航语言。在jsp中同EL表达 式有相似之处,但功能较之强大。可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实 现字段类型转化,操作集合等功能。并不属于struts2开发,属于第三方表达式语言。

 

准备工作:

导包:导入struts2的基本包即可。或者以下:

asm-xxx.jar

asm-commons-xxx.jar

asm-tree-xxx.jar

ognl-xxx.jar

软准备:

准备root和context,此处root为自定义User类型,context为Map类型

Ognl.getValue("String",context,root);

 

语法:直接使用代码

取值:

System.out.println(Ognl.getValue("name", context, root));

System.out.println(Ognl.getValue("#user1.name", context, root));

赋值:

Ognl.getValue("name='rose'", context, root);

Ognl.getValue("#user1.name='aaa'", context, root);

调用方法:

Ognl.getValue("setName('李磊')", context, root);

Ognl.getValue("#user1.setName('凉快')", context, root);

调用静态方法:全限定名

System.out.println(Ognl.getValue("@myself.web.test.OgnlUtils@echo('hello')", context, root));

访问静态属性:

System.out.println(Ognl.getValue("@myself.web.test.OgnlUtils@field", context, root));

特殊情况:调用Math类的方法或访问其属性,不需要完整类名

System.out.println(Ognl.getValue("@@random()", context, root)); System.out.println(Ognl.getValue("@@PI", context, root));

创建 list |map集合:

List list = (List) Ognl.getValue("{1,2,'as','sd'}", context, root); 

Map map = (Map) Ognl.getValue("#{'name':'rose','age':16}", context, root);

 

OGNL与struts2整和应用:

应用原理:即ValueStack,存在于ActionContext中。ActionContext有ValueStack的引用,ValueStack 也有ActionContext的引用。ValueStack是struts2的接口,OgnlValueStack是ValueStack的实现类,每 当客户端发送一个请求,struts2便会创建一个action实例同时创建一个OgnlValueStack值栈实例

 

值栈:包括两部分,root和context。

root中默认存放当前请求action的实例对象,以继承ArrayList的形式完成栈结构

context即为ActionContext的引用,在这个ActionContext中又引用了ValueStack(对应上文)

 

整合应用:

①即前面提到的表单参数接收:

1.属性驱动:

请求到达action之前时,默认20个拦截器中的params拦截器将表单提交的键值对参数作为ognl表达 式来解析。eg:'name'='tom' ,从root中查找name属性,并为name属性赋值为tom

2.对象驱动:

类似于属性驱动。eg:'user.name'='tom' ,从root中找到user属性,再找到user的name属性并赋 值为tom

3.模型驱动:

默认20个拦截器中,modelDriven比params先一步执行。此处action是实现了ModelDriven接口 的,而源码中modelDriven会将action对象获取到,再将action对象中的user,以压栈的形式,压到 root的栈顶。这样当拦截器的params解析参数时,就能从root中查找到user的name属性并赋值了。

②配置文件中使用ognl:比如为重定向附加参数

 

 / 

 xxx 

 ${name}

 

action重定向到下一action时,即可带上前者中的属性:

http://xxxxxx:8080/xxx/xxx?name=xxx

③页面标签简介:

1.:jsp中使用,可页面上看到类似超链接的按钮,单击可查看context和root的数据内容

2.:分为map存取(键值对形式)和root存取(属性名)

ServletActionContext.getRequest().setAttribute("name", "requestName");往request中存

页面使用ongl取

3.:遍历

 

遍历ActionContext中list集合,遍历到的元素,放到root栈顶。

property 标签不写value属性,默认取栈顶元素,遍历完成后root栈恢复

 

 

遍历ActionContext中list集合,遍历到的元素,放到root栈顶。

同时,将当前遍历到的元素,以name作键放入ActionContext中(map结构)

  

  

4.文本输入框

此处:%强制ognl表达式,回显的是 context中list键对应的索引为1的数据

 

OGNL特殊符号:

#:#list从context中取值;#{key:value} 创建map集合

%:强制ognl表达式,用于表单数据回显

$:struts.xml中配置附加参数-${name}

内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值