`
silentJesse
  • 浏览: 107546 次
  • 性别: Icon_minigender_1
  • 来自: 福建厦门
社区版块
存档分类
最新评论

struts2 ognl(转自http://blog.163.com/hzd_love/blog/static/13199988120108165835754)

阅读更多
表达式通常用来访问页面中的各种变量,进行结果输出.

struts2中共支持以下几种表达式语言(默认的是OGNL):

OGNL:可以方便地操作对象属性的开源表达式语言;

JSTL:(JSP Standard Tag Library):JSP2.0集成的标准表达式语言;

Groovy:基于Java平台的动态语言,它具有时下比较流行的动态语言的一些特性;

Velocity:一种基于Java的模板匹配引擎。

一、什么是OGNL

名称:全称是Object-Graph Navigation Language

用途:是一个用来获取和设置java对象属性的表达式语言。

应用场合:通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法可以提供许多应用。比如在XML文件或者脚本文件中嵌入OGNL表达式语法,在JSP页面使用OGNL表达式语法。

操作对象:基于当前对象的上下文。

二、OGNL引用方式

属性名称:如对象user的属性username,可以使用user.username来获取.

方法调用:可以使用user.hashCode()返回当前对象的哈希码.

数组元素:对于userlist数组对象,可以使用userlist[0]来引用其中的某一个元素.

三、OGNL相对其他表达式语言具有下面几大优势

1)支持对象方法调用:如xxx.doSomeSpecial()

2)支持类静态的方法|值调用:格式为"@[类全名(包括包路径)]@[方法名|值名]"。如:

@java.lagn.String@format('foo%s','bar')--调用类静态方法

@tutorial.MyConstant@APP_NAME--访问类的静态值

3)支持赋值操作和表达式串联:如price=100,discount=0.8,calculatePrice(),这个表达式会返回80

4)访问OGNL上下文(OGNL context)和ActionContext

5)操作集合对象



四、使用OGNL表达式

1)要使用OGNL表达式,首先需要在web.xml中添加ActionContextCleanUp过滤器

<filter>

<filter-name>struts-cleanup</filter-name>

<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>

</filter>

<filter-mapping>

<filter-name>struts-cleanup</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

五、'#'运算符

用途一般有三种:

1)访问非根对象属性,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext()。

parameters:包含当前HTTP请求参数的Map,#parameters.id[0],等价于request.getParameter("id");

request:包含当前HttpServletRequest的属性的Map,#request.userName,等价于request.getAttribute("username");

session:包含当前HttpSession的属性的Map,#session.userName,等价于session.getAttribute("username");

application:包含当前应用的ServletContext的属性的Map,#application.userName,等价于application.getAttribute("username");

attr:用于按request→session→application顺序访问某个属性,#attr.userName,等价于按顺序在request,session,application范围内读取userName属性,直到找到为止。

2)用于过滤和投影(projecting)集合

如person.{?#this.age>20}

?--获取集合中所有满足选择逻辑的对象(拿sql来做比例就是"select * from xxx where age>20")

^--获取集合中第一个满足选择逻辑的对象(拿sql来做比例就是"select top(1) from xxx where age>20")

$--获取集合中最后一个满足选择逻辑的对象

3) 用来构造Map

如#{'foo1':'bar1', 'foo2':'bar2'}

六、'%'运算符

用途是在标识的属性为字符串类型时,计算OGNL表达式的值,如:

<s:url value="test.jsp?age=#userlist['admin']">→test.jsp?#userlist['admin']---可见当字符串与OGNL表达式串起来时,只会被当作字符串对待,并不执行

<s:url value="test.jsp?age=%{#userlist['admin']}">→test.jsp?age=44---使用了该符号,就可以使得OGNL表达式被执行

七、'$'运算符

两个用途:

1)用于在国际化资源文件中,引用OGNL表达式。例如在资源文件中有一个标签fileName,则可以在资源文件中引用:

validation.require=${getText(fileName)} is required

2)在struts2配置文件中引用OGNL表达式,如:

<action name="AddPhoto" class="addPhoto">

<result type="redirect">ListPhotos.action?albumId=${albumId}</result>--但这个albumId是从哪来的呢?

</action>
分享到:
评论

相关推荐

    struts2-core-2.3.15.3.jar

    Apache Struts Copyright 2000-2011 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Dojo (http://dojotoolkit.org/). ...

    struts-2.1.8.1-src.zip

    Apache Struts Copyright 2000-2007 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Dojo (http://dojotoolkit.org/). ...

    struts-2.3.15.3-apps.zip

    Apache Struts Copyright 2000-2011 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Dojo (http://dojotoolkit.org/). ...

    struts-2.5.13-docs

    Apache Struts Copyright 2000-2011 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Dojo (http://dojotoolkit.org/). ...

    Struts2漏洞检查工具2018版.exe

    增加S2-057 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 此漏洞影响范围非常小,要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,...

    Struts2中使用标签实现组合查询和带分页的例子

    在Struts2框架中,`&lt;sx:&gt;`标签是Struts2 XWork库的一部分,用于增强JSP页面的功能,提供更强大的数据绑定和表单处理能力。本篇将重点讲解如何利用`sx:`标签实现组合查询和带分页功能。 首先,让我们了解下Struts2的...

    Struts2漏洞检查工具2017版

    增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...

    struts2 项目源码

    在提供的源码中,你可以找到名为`*Action.java`的文件,这些文件就是Action类,它们继承自`org.struts2.interceptor.struts2-action`或`com.opensymphony.xwork2.ActionSupport`。 2. **配置文件**:Struts2的配置...

    st2 webconsole.html页面ognl调试1

    Struts2是一个流行的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。在开发过程中,调试是必不可少的环节,Struts2提供了多种调试方式,其中包括XML、Console、Command和Browser模式。这里我们...

    Struts2漏洞检查工具2018版.zip

    struts2漏洞exp利用工具, 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 此漏洞影响范围非常小,要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-...

    struts2.3.20版本的jar包

    这个是struts2.3.20版本的所需要的九个包 commons-fileupload-1.3.1.jar commons-io-2.2.jar commons-lang3-3.2.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-3.0.6.jar struts2-core-2.3.20.jar struts...

    Struts2漏洞利用工具2017版V1.8

    增加安恒信息研究员nike.zheng发现的S2-045,jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-Type头中构造OGNL表达式来执行Java代码。http://struts.apache.org/docs/s2-045.html...

    使用的ognl的chm

    在Java开发中,尤其是Web应用框架如Struts2和Hibernate中,OGNL被广泛使用。它允许开发者以简洁的方式访问和操作对象的属性,甚至包括深层次的对象图导航。 **OGNL的基础概念:** 1. **表达式**:OGNL的核心是其...

    eclipse搭建SSH框架详解

    - 必须引入的JAR包有:Commons-logging-1.0.4.jar、Freemarker-2.3.13.jar、Ognl-2.6.11.jar、Struts2-core-2.1.6.jar 和 Xwork-2.1.2.jar。 - 另外还需注意导入以下三个JAR包:commons-io-1.3.2.jar、commons-...

    struts2 ognl的用法

    ### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...

    Struts 2 远程代码执行漏洞(s2-045\s2-046)修复所用到的包

    1.严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。 2.如果您使用基于Jakarta插件,请升级到Apache ...--来源 http://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin/2.3.32

Global site tag (gtag.js) - Google Analytics