Struts2 ValueStack & ActionContext & OGNL 关系小结
原生的OGNL三要素:
1.expression 求值表达式——首先会被解析成对象树
2.root object 根对象——默认的操作对象
3.context OGNL执行环境——OGNL执行的上下文环境
OGNL context是一个Map结构,ognl.OgnlContext类implements Map接口,root对象也在context里面,并且做这一个特殊的对象处理,具体表现为对root 对象的操作不需要加#指示符号(并且加上了#一定取不到root对象里面的值)。
在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等
Ognl从根中取属性, 如果没有则抛异常,
从其他上下文中取属性, 如果没有, 不抛异常,返回为null
import org.junit.Test; public class OgnlTest { @Test public void test1() { OgnlContext context = new OgnlContext(); context.put("name", "zhangsan"); context.put("age", 100); Person person = new Person(); person.setName("wan"); context.put("person", person); Person root = new Person(); root.setName("root"); try { //不带#号, 找root根的属性 System.out.println(Ognl.getValue("name", context, root)); //不带#号,找root根的属性,找不到, 则抛异常ognl.NoSuchPropertyException: com.ognl.Person.person1 // System.out.println(Ognl.getValue("person1", context, root)); System.out.println(Ognl.getValue("#name", context, root)); System.out.println(Ognl.getValue("#person", context, root)); //不存在的属性, =null System.out.println(Ognl.getValue("#person1", context, root)); System.out.println(Ognl.getValue("#person.name", context, root)); //从"hello world"的根里面找name属性, 找不到抛异常 System.out.println(Ognl.getValue("name", context, "hello world")); } catch (OgnlException e) { e.printStackTrace(); } } }
相关推荐
2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...
Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...
ValueStack是Struts2的核心组件之一,它是一个数据存储结构,用于管理Action上下文中的对象。Action中的属性会被放入ValueStack,从而可以直接在JSP中通过OGNL表达式访问。 8. **ValueStack Debug和Contents** ...
- **Struts2**: 引入了ValueStack的概念,这使得开发者可以在视图层直接访问Action中的数据。Struts2还支持多种视图技术,如FreeMarker、Velocity等。 #### 数据绑定 - **Struts1**: 使用Commons-BeanUtils进行...
深入讲解Struts中的ognl和valueStack
本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...
在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...
Struts2使用ValueStack来存储和传递数据,使得数据可以在Action和JSP之间无缝流动。 四、配置与注解 Struts2支持XML配置和注解配置两种方式。XML配置文件主要用于定义Action、结果类型、拦截器栈等,而注解则可以更...
5. **XWork2**:Struts2是在XWork框架的基础上发展起来的,XWork提供了Action管理和执行的核心机制,包括ActionContext、ValueStack等关键组件。 6. **运行流程**:当一个请求到达服务器,Struts2框架会解析`struts...
同时,Struts2的ValueStack和OGNL(Object-Graph Navigation Language)表达式语言使得数据绑定和视图渲染变得简单高效。 行程管理功能可能涉及对用户行程的创建、查看、修改和删除。Struts2支持多种数据源,如...
在Struts2框架中,核心组件包括Action、Interceptor、Result、ValueStack等。Action是业务逻辑的执行者,Interceptor是拦截器,用于在Action执行前后进行额外的操作,如日志记录、权限检查等。Result则是Action执行...
页面绑定方面,Struts1依赖JSP标准机制,而Struts2采用ValueStack技术,允许taglib直接访问值栈中的对象,无需在视图和对象之间建立直接绑定,提高了重用性。 在类型转换上,Struts1的ActionForm属性通常是String...
- **Struts2**则使用了ValueStack来存储Action对象和视图数据,这种机制允许在不同的页面之间传递数据,从而实现了更加灵活的页面导航。 #### 数据类型转换 - **Struts1**使用ActionForm中的方法来转换表单提交的...
6. **ValueStack**:ValueStack是Struts2中存储Action属性和请求参数的对象栈,使得在Action和JSP之间传递数据变得简单。 7. **Tiles框架集成**:Struts2可以与Tiles框架集成,方便地进行页面布局和组合。Tiles定义...
3. **ValueStack**:Struts2的核心组件,用于存储和管理请求中的数据。攻击者可以通过ValueStack修改或访问敏感信息。 4. **CVE-2016-1000031**:这个漏洞发生在Struts2的URL重写功能中,攻击者可以利用此漏洞通过...
此外,Struts2还提供了一个强大的ValueStack机制,用于在Action和视图之间传递数据。 #### 六、配置机制的不同 - **Struts1**: 使用XML配置文件进行配置,这种方式虽然直观但随着项目规模的增长可能会变得难以管理...
这本书可能详细解释了Struts2的工作原理,如Action、Interceptor(拦截器)、Result和ValueStack等核心概念。它还会介绍如何创建和配置Struts2应用,以及如何处理表单提交、文件上传、国际化等常见任务。 "struts2...
- **ValueStack**: Struts2中的ValueStack是一个对象栈,用于存储ActionContext中的数据。它可以简化视图层的数据访问,只需通过OGNL表达式即可访问栈中的对象。 - **OGNL(Object-Graph Navigation Language)**: ...
Struts2 API是Java开发中的一个关键工具,它为基于MVC(Model-View-Controller)设计模式的Web应用程序提供了一种强大的框架。Struts2是Apache软件基金会下的一个项目,它继承了Struts1的优点并引入了许多改进,旨在...