Struts2 OGNL投影功能解析与实战

需积分: 21 0 下载量 34 浏览量 更新于2024-08-18 收藏 493KB PPT 举报
"这篇文章除了介绍OGNL(Object-Graph Navigation Language)表达式的投影功能,还讨论了Struts2框架的发展、架构以及与Struts1的对比。" OGNL表达式的投影功能是Java开发中的一种强大工具,特别是在Struts2框架中,它允许开发者以简洁的方式筛选和操作集合对象。在给定的例子中,OGNL的`{?}`、`^`和`$`操作符用于从集合`books`中提取特定的子集: 1. `?` 操作符:用于选取满足条件的所有元素。在这个例子中,`books.{?#this.price > 35}`会返回价格大于35的书籍列表。`#this`是指当前遍历的Book对象,`price`属性是判断条件。 2. `^` 操作符:获取满足条件的第一个元素。如果需要找到价格最高的书籍,可以使用类似`books.{^#this.price > 35}`的表达式。 3. `$` 操作符:获取满足条件的最后一个元素。这在寻找价格最低的书籍时会很有用,如`books.{#$this.price > 35}`。 Struts2框架的发展是基于Struts1的局限性和技术进步的需求。Struts1虽然在稳定性上有良好表现,但其与JSP/Servlet的高度耦合导致了可测试性差、表现层技术单一等问题。因此,Struts2应运而生,它采用了WebWork的核心,引入了更先进的设计理念: 1. Struts2与ServletAPI解耦,使得应用程序更易于测试。 2. 支持多种视图技术,增强了灵活性。 3. 使用拦截器(Interceptor)链,允许在Action执行前后添加通用功能,如输入验证,提高了代码复用性。 Struts2的处理流程大致如下: 1. 用户发起请求,由FilterDispatcher核心控制器接收。 2. FilterDispatcher根据请求选择合适的Action。 3. 拦截器链对请求进行预处理,执行相关的业务逻辑。 4. Action的`execute`方法执行具体操作,根据请求参数和业务逻辑返回结果。 5. 结果信息被渲染并回传给客户端,支持多种视图技术,如JSP、FreeMarker等。 在与Struts1的对比中,Struts2的主要改进包括: 1. 更低的侵入性,减少了对Struts API的依赖。 2. 强大的拦截器机制,提供了更灵活的扩展和控制流管理。 3. 更好的类型安全性和表达式语言(如OGNL),提高了代码的可读性和维护性。 总结来说,OGNL的投影功能增强了Struts2中数据处理的灵活性,而Struts2作为Struts1的升级版,解决了原框架的一些问题,提供了更现代、更灵活的MVC架构。