进行Java Web应用软件开发,一般可以采用3种方式。
第一种是“自力更生”,从零开始,包括软件系统架构和底层工具一切都靠自己来实现。
第二种是“洋务运动”的“工具框架”开发方法,即自己设计软件系统架构,但是同时选用一些底层工具类的“工具框架”来配合自己搭建的架构进行开发。这类“工具框架”的典型代表有Struts 2, Hibernate 3等等。
第三种是“拿来主义”的“范例框架”开发方法,即自己不再独立设计系统架构和底层工具,而是选择一个已经将系统架构和底层工具类库等子框架都整合好,并提供范例模块的成熟的“范例框架”,直接参考范例框架上的范例模块,并使用范例框架整合好的底层工具类库等子框架,进行定制化开发自己的项目。这类“范例框架”包括AppFuse, Spring Roo, Spring Side, Play, Seam等。
实践证明,第三种“范例框架”开发方法,是最快速高效的。因为这将大大缩短软件开发的“起步”过程,提高敏捷软件开发的首次迭代的质量,并让今后的开发工作能建立在一系列前人已经摸索出来的“最佳实践”的基础之上。
要使用“范例框架”开发方法,有必要回顾一下Java Web应用的开发框架。在Java Web应用开发领域,软件开发框架十分丰富。如果把Java Web应用开发的架构按照软件系统的三层模型来分层,可以分为表示层、业务层和数据层这3层。表示层负责显示应用的结果,业务层负责处理业务逻辑,数据层负责存取数据库。每一层都有相应的软件开发框架。
2000年3月,Apache Struts开源项目开始启动。Struts是运用MVC Model 2较早并且为大多数Java Web开发人员所熟悉的Java Web应用开发框架。
其他运用MVC Model 2模式的开源项目也相继发展起来,比如另一个开源项目OpenSymphony,于2002年推出了比Struts技术更先进的名为Webwork的Java Web应用开发框架。
2008年,上述两个开源项目Struts和Webwork进行了合并,推出了一个名为Struts 2的新框架。Struts 2框架实现了上述“三层模型”的表示层和业务层的一些功能,不妨把这类框架称为Web应用框架。由于Struts推出时间早,Struts 2框架是目前国内外Web应用框架中名气最大的。其他常用的通用Web应用框架还包括Apache Tapestry和JavaServer Faces。
Java是面向对象的语言,在进行Java Web应用开发,存储数据到数据库(即持久化persistence)时,免不了要在数据层进行对象-关系映射(Object-relational mapping, ORM)。一些框架完成了上述基于ORM的持久化工作,其中最有名的是Hibernate。这类框架可以称为ORM持久化框架。其他常用的ORM持久化框架还包括:iBATIS和Java Persistence API (JPA)。
一些通用开发框架也相继推出,如2003年发布的Spring Framework。Spring Framework的兴起缘于Sun公司的EJB 1.1至2.1的设计缺乏灵活性,不便于测试而广受批评这样的背景之下。Spring Framework最大的优势,是实现了依赖注入(Dependency Injection,DI)和面向方面的编程(Aspect-oriented programming, AOP)。DI使得对象的实例化不再由程序控制,而是由Spring Framework容器来控制,这样会使得模块之间的耦合度降低,更加容易测试。AOP能够把一些模块所共有的通用功能(如日志、安全、事务)抽象出来集中处理,这能减少开发人员的工作强度,让他们能更加关注业务逻辑,而不是上述通用功能。
由于上述框架数量繁多,要把它们有机地整合起来,在一个项目中充分发挥它们应有的作用,也是一件复杂的事情。一些开源框架就开始做框架整合的工作,整合工作除了把表示层、业务层和数据层的框架组合起来之外,一般还提供若干项目骨架(project skeleton)或范例(archetype),内含如用户管理、权限管理这样的通用功能、一些范例模块和代码自动生成工具。这类框架可以称之为范例框架(Archetype Framework)。范例框架中发展较早的是AppFuse,于2003年推出了1.0版本。最近发展起来的范例框架是Spring Roo,于2009年推出了1.0版本。国内常用的范例框架还包括中国工程师自己创建的Spring Side。其他常用范例框架还包括:JBoss Seam和Play Framework。
下表列出了上述Java Web开发框架的相关信息。
软件开发框架 | 初始版本时间/ 版本号 | 最近版本时间/ 版本号 | 框架类型 |
Spring Framework | 2003.06 | 2010.10.29/3.0.5 | 通用开发框架 |
Play Framework | 2008.02 | 2011.04.13/1.2 | 范例框架 |
AppFuse | 2003.11.30/1.0 | 2011.04.04/2.1 | 范例框架 |
Spring Roo | 2009.12/1.0.0.RELEASE | 2011.04.13/1.1.3.RELEASE | 范例框架 |
Spring Side | 2006.08.07/1.0 | 2010.09.15/3.3.4 | 范例框架 |
Jboss Seam | 2005.09 | 2011.03.31/3.0.0.Final | 范例框架 |
Hibernate | 2001 | 2011.04.06/3.6.3.Final | ORM 持久化框架 |
iBATIS | 2002 | 2010.12.31/3.0.4 | ORM 持久化框架 |
JPA | 2006.05.11/1.0 | 2009.12.10/2.0 | ORM 持久化框架 |
Struts | 2000.05 | 2010.12.20/2.2.1.1 | Web 应用框架 |
JSF | 2004.03.11/1.0 | 2009.06.28/2.0 | Web 应用框架 |
Apache Tapestry | 2000.01 | 2011.03.30/5.2.5 | Web 应用框架 |