Struts2 OGNL详解:从基础到高级应用

需积分: 10 0 下载量 105 浏览量 更新于2024-09-09 收藏 228KB DOCX 举报
"本文介绍了Struts2中OGNL的概念、用法和原理,包括其与EL表达式的区别,以及OGNL上下文(ContextMap)和ActionContext对象的作用。" 在Struts2框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于访问和操作对象图。它允许开发者使用简单的“对象.属性”语法来调用对象的方法和访问属性,如示例中的`s.name`。OGNL不仅能够用来获取数据,还能用于设置数据,这在Struts2的标签中尤为明显。 1. OGNL的基本用法是通过`.`操作符来访问对象的属性和方法。例如,如果`Students`是一个已初始化并填充了数据的列表,我们可以在JSP中直接使用`s.name`来获取学生对象的名称。 2. EL(Expression Language)表达式常用于Java服务器页面(JSP),其特点是使用`${}`包裹,主要用于读取数据,不支持写入数据。EL表达式具有容错性,不会抛出空指针异常、字符串拼接错误或数组下标越界异常。 3. OGNL则更加强大,它可以被嵌入到Struts2的标签中,用于读取和写入数据。它支持多种操作,包括: - 基本用法:直接访问对象属性。 - 转换为字符串:通常需要Struts2标签帮助。 - 访问对象的普通方法。 - 访问静态方法和静态属性。 - 操作List集合和Map集合。 4. 尽管OGNL功能强大,但EL表达式仍然有其用途,尤其是在获取值栈中的数据。EL表达式首先尝试从域对象中获取值,如果找不到,则会查找值栈,并将找到的值放入域对象中。 5. OGNL的上下文,即ContextMap,是Struts2中存储数据的主要容器,其他容器都位于其内部。ContextMap是一个Map结构,键是String类型,值是Object类型,封装了请求所需的所有数据。 6. ActionContext对象是Struts2提供的一个工具类,用于操作ContextMap。每个HTTP请求都会创建一个新的ActionContext对象,并将其与当前线程绑定。这样,在整个请求处理过程中,ActionContext提供了对请求数据的访问。 OGNL是Struts2框架中不可或缺的一部分,它简化了对象属性和方法的访问,增强了动态数据处理的能力。同时,ActionContext和ContextMap则提供了管理和访问请求数据的机制,确保了Struts2框架的高效运行。