OGNL表达式语言详解:Struts2中的核心组件
需积分: 21 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开发提供了更强大、更灵活的工具,使得开发者能够更高效地构建和维护应用程序。
2013-01-09 上传
2010-04-07 上传
2007-09-11 上传
2020-04-09 上传
2021-10-20 上传
点击了解资源详情
无不散席
- 粉丝: 32
- 资源: 2万+
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章