Shale 不是什么?Shale 不是打包好的、有编制好的文档并经过严格测试的产品,也没有附带自动安装程序和优雅的管理界面。那么 Shale 到底是什么呢?Brett McLaughlin 在本文中将揭开这个 Struts 后代的面纱。本文是一个由五部分组成的系列中的第一篇文章,在本文中,Brett 解释了 Shale 是什么,Shale 与 Struts 框架的不同之处,以及如何在开发环境中安装和设置它。
在过去 5 年间出现的所有 Web 框架中,Jakarta Struts 是 Java™ 开发人员使用得最多的一种框架,因此其后代的问世是一件值得注意的事情。虽然 Shale 还不是最流行的框架,也不是最为人熟悉的框架,但是出自名门的背景仍给人以深刻印象。更令人兴奋的是,Shale 并不仅仅是 Struts 的重大升级和新的发行版:它彻底更新了 Struts 中的很多核心原则,并且加入了 Web 开发中最新的思想。
在这个由五部分组成的系列中,您将了解到,Shale 与 Struts 的背离是一柄双刃剑。一方面,Shale 是经过精心设计的 Struts 的后代。Shale 的创立者综合考虑了 Struts 的优点和不足,提出可与其前辈媲美的下一代框架。另一方面,正如您很快就可以在这个系列中看到的一样,Shale 是 一种完全不同于 Struts 的框架,其中隐含着很多新的开发工作!
Shale 不仅仅是 Struts 的又一个修正版,它已扩展到超出 Struts 所能达到的高度。它包含 Java Web 程序设计中一些最重要的、最近的开发成果,包括 JSP Standard Tag Library(JSTL)和 JavaServer Faces(JSF),并建立在这些开发成果之上。Shale 完全应该被看作是与 Struts 不同的一种框架,在这个系列中,我将还 Shale 框架以本来面目。在这个月的文章中,将首先对 Shale 与 Struts 之间的区别作一个概述,然后带您体验安装 Shale 并测试安装情况的步骤。最后,我将给出一些思想,令您能进一步参与到 Shale 项目(它是开放源码的)中,并提供一些相关的信息。整个系列的目的就是要向您展示如何安装 Shale 以及如何使用 Shale 构建和开发项目,同时很少涉及 Shale 的前辈,即 Struts 框架。
评价 Shale
任何新的 Web 开发框架要想在这个竞争已经很激烈的领域占得一席之地,最好能够经受住巨大压力下的评测。好消息是,Shale 独力经受住了细致的考察。但是,坏消息是,由于 Shale 完全是对 Struts 重新构建的产物,因此必须重新编写和重新测试您所有基于 Struts 的代码,以便实现这些代码。您将花同样多的精力来编写一个新的 Shale 应用程序,或将一个 Struts 应用程序转换成 Shale 应用程序,就好像 Shale 与 Struts 完全无关一样。
所以接下来我们忍不住要问,为什么还要采用 Shale 呢?为了得出答案,我首先解释一下 Shale 的伟大之处 ―― 这在很大程度上是由于它的 Struts 血统,但这又不是惟一的原因 ―― 然后讨论 Shale 之所以没有 被发布为 Struts 框架的重要修正版的两大原因。这样,您就会更好地理解从 Shale 身上可以得到什么,这将有助于评价使用这种下一代的框架是否值得。
Struts 血统
接下来,Struts 要做的事情就是保持它的强大性:从写出第一批代码开始,Struts 连续 6 年一直是最流行的 Web 开发框架之一。至今它仍然是人们口中的谈资,笔下的素材,使用得不比任何竞争对手少。由于 Struts 是如此流行,如此长寿,如今它已经有丰富的功能,有良好的文档,被广泛地支持,并且易于使用,在它上面进行开发和管理也很容易。数千名开发人员对 Struts 邮件列表上的问题作出答复,数万名开发人员试用 Struts 并报告问题,这使得这些问题很容易得到修复。
最后,Struts 是不断发展的。很多框架一开始比较强大,然后就停滞不前(商业产品和开放源码项目都存在这样的现象),而 Struts 总是不断提供新的特性。当您下载 Struts 时,核心发行版中还包含一个健壮的确认引擎(validation engine),并且 Struts 已经与 JavaServer Faces 集成,拥有广泛的标记库和一个不断发展的 Model 2 架构,其中引入了在分布式 n-层应用程序领域中最新的思想。而且告诉您,Struts 还紧跟程序设计中出现的新模式,例如 IoC(Inversion of Control)。Struts 与 WebWork 和 Spring 框架自然地集成,后两者都是具有最佳血统的、为使用 Web 开发中的新方法提供入口的框架。
简而言之,您很难发现在 Struts 中有做不成 或不支持的事。所以显然我们就要问,为什么 Shale 要另起炉灶呢?为什么 Shale 没有成为 Struts 的下一个版本呢?这有两个主要原因:一个原因与鲜为人知的新软件发行惯例有关,另一个原因则与众所周知的 Struts 根基中的弱点有关。让我们分别来考虑这两个原因。
发行版辨析
要理解 Shale 为什么没有成为 Struts 的一个新的发行版,首先需要理解关于新软件发行的一两件事。对于一个新的软件发行版,大多数用户首先看的是一组新的特性。版本升级的幅度越大,用户对新特性的期待就越大。因此,如果软件版本从 2.1 升级到 2.2,就应该有一些新的特性,但是如果从版本 2.2 升级到版本 3.0,那么就应该有很多 新特性。这就是为什么当一些大型产品(例如 Microsoft Word)或操作系统(例如 Windows 和 Mac OS X )出了新版本的时候,用户总是对它们很挑剔。对于每一个新的发行版,用户总是期待有更多新的特性。
由于大多数用户一味地将注意力放在特性上,他们没有意识到向后兼容性(backward compatibility)才是真正最有价值的东西。虽然每个人都希望 Excel 中加入新的、很好的选项,希望 Panther 与 iTunes 有更好的集成,希望 Gnome 中对 XUL 有更好的支持,但是如果那些用户现有的程序和文件在新版本下突然不能运行的话,相信他们会尖叫,“这是血腥谋杀”。在这种情况下,新特性毫无价值。
对于 Struts 也一样。一般来说,Struts 的每个新版本都增加了新的特性,同时保持了与之前版本的向后兼容性。此外,新版本的 Struts 还需要支持旧版本的 Java 平台和 Servlet 规范,因为已安装的旧的 Struts 要在这些平台上运行。这两个需求 ―― 向后兼容性和对旧版本的 Java API