OGNL表达式语言详解:Struts2中的核心组件

需积分: 21 0 下载量 141 浏览量 更新于2024-08-18 收藏 493KB PPT 举报
"本文主要介绍了OGNL(Object Graphic Navigation Language),一种在Java中广泛使用的表达式语言,尤其在Struts 2框架中的应用。OGNL提供了比EL(Expression Language)更为丰富的功能,如对象方法调用、类静态方法调用和值访问。此外,文章还提到了OGNL中的上下文(Context)概念,它是一个实现了Map接口的数据结构,通常在Struts2中由ActionContext实现。Struts2框架的发展历程和与Struts1的区别也被提及,指出Struts2实质上是以WebWork为核心,具备更先进的设计理念和处理流程。" OGNL是Object Graphic Navigation Language的简称,它是一种强大的表达式语言,被广泛应用于Java开发中,特别是作为Struts 2框架的默认表达式语言。OGNL不仅支持基本的属性访问,还具备以下特点: 1. **对象方法调用**:OGNL允许开发者直接在表达式中调用对象的方法,如`xxx.sayHello()`,这在处理业务逻辑时非常方便。 2. **类静态方法调用和值访问**:OGNL可以使用`@[类全名(包括包路径)]@[方法名 | 值名]`的格式调用类的静态方法或访问静态变量,如`@java.lang.String@format('foo %s', 'bar')`或`@com.xtgj.Constant@APP_NAME`。 3. **操作集合对象**:OGNL支持对集合进行操作,如遍历、索引访问等,使得处理复杂数据结构变得更加简单。 上下文(Context)在OGNL中扮演着关键角色,它是一个存储键值对的容器,实现了Map接口。在Struts2中,ActionContext是上下文的具体实现,它将请求和响应的相关信息存储在Map结构中,便于在处理请求时访问和修改。ActionContext通常包含Action、ValueStack、Session、Request、Application等重要对象,为OGNL表达式的解析提供数据环境。 Struts技术的发展历程中,Struts1虽然在稳定性和市场占有率上有显著优势,但随着时间推移,其设计上的局限性逐渐显现,如与JSP/Servlet的深度耦合、单一的表现层支持以及对Struts1 API的高度依赖。为了应对这些挑战,Struts1演化出两个分支:Struts2和Shale。Struts2以WebWork为核心,引入了拦截器(Interceptor)机制,大大改善了处理流程和可测试性。而Shale则采用了全新的设计思路,与原Struts1框架关联较小。 Struts2的处理流程主要包括:浏览器发起请求,FilterDispatcher作为核心控制器调度合适的Action,接着WebWork的拦截器链处理通用功能,如验证,然后调用Action的`execute`方法执行具体业务逻辑,最后返回结果到浏览器,支持多种视图技术。 对比Struts1,Struts2的主要改进包括: - **非侵入性**:Struts2降低了对应用程序代码的依赖,使得代码更易于维护和测试。 - **拦截器链**:通过拦截器,开发者可以轻松添加预处理和后处理逻辑,增强了框架的灵活性。 - **更丰富的Action结果**:Action的执行结果可以映射到多个视图,增强了视图的多样性。 - **更强大的表达式语言**:OGNL的引入,提供了更多高级功能,如动态方法调用和复杂数据结构操作。 OGNL和Struts2的结合为Java Web开发提供了更强大、更灵活的工具,使得开发者能够更高效地构建和维护应用程序。