- 浏览: 18972 次
- 性别:
- 来自: 韶关
-
最新评论
Struts2 OGNL基础上的增强
1、值栈(ValueStack)
Struts2 OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为Struts2 OGNL的根对象。
我们知道,Struts2 OGNL上下文中的根对象可以直接访问,不需要使用任何特殊的“标记”,而引用上下文中的其他对象则需要使用“#”来标记。由于值栈是上下文中的根对象,因此可以直接访问。那么对于值栈中的对象该如何访问呢?Struts2提供了一个特殊的OGNLPropertyAccessor,它可以自动查找栈内的所有对象(从栈顶到栈底),直接找到一个具有你所查找的属性的对象。也就是说,对于值栈中的任何对象都可以直接访问,而不需要使用“#”。
假设值栈中有两个对象:student和employee,两个对象都有name属性,student有学号属性number,而employee 有薪水属性salary。employee先入栈,student后入栈,位于栈顶,那么对于表达式name,访问的就是student的name属性,因为student对象位于栈顶;表达式salary,访问的就是employee的salary属性。正如你所见,访问值栈中的对象属性或方法,无须指明对象,也不用“#”,就好像值栈中的对象都是OGNL上下文中的根对象一样。这就是Struts2在OGNL基础上做出的改进。
2、[N]语法
如上所述,如果想要访问employee的name属性,应该如何写表达式呢?我们可以使用[N].xxx(N是从0开始的整数)这样的语法来指定从哪一个位置开始向下查找对象的属性,表达式[1].name访问的就是employee对象的name属性。
在使用[N].xxx语法时,要注意位置序号的含义,它并不是表示“获取栈中索引为N的对象”,而是截取从位置N开始的部分栈。
3、top关键字
top用于获取栈顶的对象,结合[N].xxx语法,我们就可以获取栈中任意位置的对象。
如:[0].top,[1].top等
4、访问静态成员
除了使用标准的OGNL表达式访问静态字段和静态方法外,Struts2还允许你不指定完整的类名,而是通过“vs”前缀来调用保存在栈中的静态字段和静态方法。
@vs@FOO_PROPERTY@vs@someMethod()@vs1@someMethod()
vs表示ValueStack,如果只有vs,那么将使用栈顶对象的类;如果在vs后面跟上一个数字,那么将使用栈中指定位置处的对象类。
标准方法:@类全限定名@静态属性或方法名
< ?xml:namespace prefix = s />< s:property value="@action.SystemInfo@WEB_CONTEXT">< /s:property >
5、值栈中的Action实例
Struts2框架总是把Action实例放在栈顶。因为Action在值栈中,而值栈又是OGNL中的根,所以引用Action的属性可以省略“#”标记,这也是为什么我们在结果页面中可以直接访问Action的属性的原因。
6、Struts2中的命名对象
Struts2还提供了一些命名对象,这些对象没有保存在值栈中,而是保存在ActionContext中,因此访问这些对象需要使用“#”标记。这些命名对象都是Map类型。
parameters
用于访问请求参数。如:#parameters['id']或#parameters.id,相当于调用了HttpServletRequest对象的getParameter()方法。
注意,parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象,一量对象被创建(在调用Action实例之前就已经创建好了),它和HttpServletRequest对象就没有了任何关系。
request
用于访问请求属性。如:#request['user']或#request.user,相当于调用了HttpServletRequest对象的getAttribute()方法。
session
用于访问session属性。如:#session['user']或#session.user,相当于调用了HttpSession对象的getAttribute()方法。
application
用于访问application属性。如:#application['user']或#application.user,相当于调用了ServletContext的getAttribute()方法。
attr
如果PageContext可用,则访问PageContext,否则依次搜索request、session和application对象。
以上就是对Struts2 OGNL的分析与简介
发表评论
-
(转)在swing中显示web页面~~
2011-05-14 16:42 1689http://www.chinajavaworld.com/t ... -
(转) firstResult/maxResults specified with collection fetch; applying in memory!
2010-11-25 13:23 1872之前遇到了同样的问题。记录一下: WARN ... -
映射枚举
2010-11-18 13:07 932Hibernate对枚举类型映射类EnumType对id的支持 ... -
收藏卡了。。复制一下吧。。
2010-11-01 14:20 596import java.util.Arrays; im ... -
追MM的23种设计模式 (转)
2010-11-01 13:32 602创建型模式 1、FACTORY— ... -
截字符串
2010-11-01 12:14 620<c:set var="subStr" ... -
editplus右键打开(转)
2010-10-22 22:45 2093经常有这样的情况, 本来右键里原有的Editplus打开文件项 ... -
一封装的参考
2010-10-21 14:09 6811. Page.java package cn.loen.p ... -
base(转)
2010-10-20 20:25 592package pack.java.ssh.basedao; ... -
优化策略
2010-10-18 22:44 6761、outer-join关键字(many-to-one的情况) ... -
刚学hibernate遇到不能保存问题,查到后找到方法解决~
2010-10-18 22:19 975hibernate.hbm.xml中加入 <pro ... -
(转)Struts1+Spring+Hibernate配置
2010-10-15 17:50 919开发环境:MyEclipse6.0+Tomcat5.0+Ora ... -
(转)Struts2+Spring2+Hibernate3开发环境搭建
2010-10-15 17:49 820看到网上有很多ssh配置文章,但是有很多是调不通的,还有版本不 ... -
(转)MyEclipse从数据库反向生成实体类之Hibernate方式
2010-10-15 17:48 1060上次谈到利用MyEclipse ... -
java串口编程(转)
2010-10-09 14:12 7301. SerialBean SerialBean是本类库与其他 ... -
myeclipse8.0如何安装 visual class
2010-10-08 17:35 1045打开Help-->Install-->New So ... -
jsp_AJAX 下拉连动_2
2010-10-08 14:49 474<%@ page language="java ... -
jsp_AJAX 下拉连动
2010-10-08 14:47 672引用 <%@ page language=" ...
相关推荐
在Struts2框架中,OGNL主要负责视图层与模型层之间的数据传递,使得开发者能够轻松地将后台的数据渲染到前端页面上。 在Struts2中,OGNL的主要用途包括: 1. **Action属性访问**:开发者可以通过OGNL表达式在...
其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达语言,用于在视图层与模型层之间传递数据。在深入理解OGNL的源码之前,我们首先需要了解OGNL的基本概念和用法。 OGNL是一种强大的表达式语言...
在Struts2中,OGNL作为视图层与控制器层之间的桥梁,负责解析和执行来自Action的请求参数,将它们映射到Action类的属性,同时将Action的结果传递给视图进行渲染。 1. **OGNL的基本语法** OGNL的语法非常灵活,可以...
6. **OGNL与Struts2的集成**: - 在Struts2的拦截器链中,`ognl.OgnlValueStack`拦截器负责处理OGNL表达式的计算和执行。 - `Result`类使用OGNL来设置模型数据到视图模板。 理解Struts2 OGNL的源码有助于我们更...
Struts2将ActionContext与OGNL结合,使得请求参数可以直接在表达式中使用。 5. **安全特性**:在Struts2中,OGNL的不当使用可能导致安全漏洞,如著名的Struts2 OGNL注入攻击。源代码中包含了对这种风险的防护措施,...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据绑定和交互。通过OGNL,开发者可以轻松地访问和操作对象图中的任何属性,实现灵活的数据传递。 ...
通过分析这个项目,开发者可以了解如何在实际应用中组织Struts2的Action、配置文件、以及如何利用OGNL进行数据操作。同时,对于使用Eclipse或MyEclipse进行Java Web开发的初学者来说,也是一个很好的学习实例,有助...
在Struts2中,OGNL用于Action类与JSP页面之间的数据传递,使得开发者无需编写繁琐的getter和setter方法,提高了开发效率。例如,一个简单的Action类可能包含如下属性: ```java public class UserAction { private...
- Struts2中OGNL与Action、ValueStack的关系。 - OGNL的安全性问题,如OGNL注入攻击,以及如何防范。 在压缩包文件`struts-ognl.asta`中,可能包含了一些示例或测试用例,用于演示Struts2中PropertyAccessor的使用...
这篇博客文章"Struts2对Ognl的封装--TypeConverter"探讨了Struts2如何通过TypeConverter机制来增强OGNL的功能。 首先,我们来看一下OGNL。OGNL允许开发者用简洁的语法来获取和设置对象的属性,甚至可以进行复杂的...
### Struts2 OGNL 表单提交问题详解 #### 一、背景介绍 Struts2框架作为一款流行的企业级应用开发框架,在处理MVC架构方面有着独特的优势。其中,OGNL (Object-Graph Navigation Language) 作为一种强大的表达式...
Struts2 OGNL是一个关于Java Web开发中的关键知识点,主要涉及到的是Apache Struts2框架与Object-Graph Navigation Language(OGNL)的结合使用。Struts2是一个流行的MVC(模型-视图-控制器)框架,它极大地简化了...
在阅读《Struts2_1900_OGNL》这篇博文时,可能你会了解到作者如何分析Struts2的源码,理解OGNL在框架中的作用,以及如何利用工具进行调试和优化。博主可能还会分享如何防止OGNL注入攻击的实践经验和最佳实践。 总之...
同时,源代码分析也能帮助开发者避免潜在的问题,如安全漏洞,例如著名的Struts2 S2-045远程代码执行漏洞,就是由于OGNL表达式不当处理导致的。因此,理解和掌握这些源代码不仅能提高开发效率,也有助于增强应用的...
在这个主题中,我们将深入探讨Struts2与OGNL的整合以及它们在实际开发中的应用。 **Struts2框架概述** Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,提供了更多的特性和灵活性。Struts2的核心设计...
Struts2是一个流行的Java web开发框架,它使用OGNL(Object-Graph Navigation Language)作为其主要的数据绑定和表达式语言。OGNL允许开发者方便地在字符串和对象之间进行交互,从而实现动态的数据操作。本文主要...
在 Struts2 框架中,OGNL 作为默认的表示层语言,用于视图与模型之间的数据绑定。Struts2 的核心功能之一就是允许开发者通过 OGNL 表达式在 JSP 页面、Action 类以及值栈之间灵活地传递数据。 源码分析: 1. **...
struts2漏洞分析,介绍了最近发现的struts2的漏洞。并详细解释了该漏洞产生的原因。
了解Struts2与OGNL的结合,可以通过阅读Struts2的源码来深入理解其工作原理。这包括`org.apache.struts2.util.OgnlValueStack`、`org.apache.struts2.components.UIBean`等类,以及`ognl`库中的相关实现。 6. 开发...
核心技术篇首先分析了Struts2中多种具有代表性的设计模式,然后对Struts2中的精华——OGNL表达式引擎和XWork框架的原理及机制进行了全面深入的分析和讲解。运行主线篇首先对Struts2的两大运行主线——初始化主线和...