进行Java Web应用软件开发,一般可以采用3种方式。
第一种是“自力更生”,从零开始,包括软件系统架构和底层工具一切都靠自己来实现。
第二种是“工具框架”开发方法,即自己设计软件系统架构,但是同时选用一些底层工具类的“工具框架”来配合自己搭建的架构进行开发。这类“工具框架”的典型代表有Struts 2, Hibernate 3等等。
第三种是“拿来主义”的“范例框架”开发方法,即自己不再独立设计系统架构和底层工具,而是选择一个已经将系统架构和底层工具类库等子框架都整合好,并提供范例模块的成熟的“范例框架”,直接参考范例框架上的范例模块,并使用范例框架整合好的底层工具类库等子框架,进行定制化开发自己的项目。这类“范例框架”包括AppFuse(2.2.1/2013.1.25), Spring Roo(1.2.4), Spring Side(4.1/2013.7.18), Play, Seam等。
如:AppFuse
AppFuse是一个集成了当前最流行的Web应用框架的一个更高层次的Web开发框架,也 可以说是一个Web开发基础平台,它与它所集成的各种框架相比,它提供了一部分所有Web系统开发过程中都需要开发的一些功能,如登陆、用户密码加密,用户管理、根据不同的用户可以展现不同的菜单,可以自动生成40%-60%左右的代码,自带了默认的一些在CSS中设定的样式,使用这些样式能很快的改变整个系统的外观,还有自动化测试的功能。
它最大的价值就是为我们提供了一个Web开发的新的方式和思路,尽管这些技术在国外都已进很流行了,但在国内能够将Hibernate、 Struts、Spring、DBUnit、Ant、Log4J、StrutsMenu、Xdoclet、SiteMesh、Velocity、JUnit、JSTL、WebWork这些技术集成到一个框架中的还不多见,所以即使不 使用它的全部功能,它也给我们提供了一个很好的借鉴、学习的机会。
AppFuse的另一个启示是:我们可以依靠开源软件的功能降低开发成本,而且可以阅读开源软件的代码提高所在团队的整体实力。
实践证明,第三种“范例框架”开发方法,是最快速高效的。因为这将大大缩短软件开发的“起步”过程,提高敏捷软件开发的首次迭代的质量,并让今后的开发工作能建立在一系列前人已经摸索出来的“最佳实践”的基础之上。
要使用“范例框架”开发方法,有必要回顾一下Java Web应用的开发框架。在Java Web应用开发领域,软件开发框架十分丰富。如果把Java Web应用开发的架构按照软件系统的三层模型来分层,可以分为表示层、业务层和数据层这3层。表示层负责显示应用的结果,业务层负责处理业务逻辑,数据层负责存取数据库。每一层都有相应的软件开发框架。
2000年3月,Apache Struts开源项目开始启动。Struts是运用MVC Model 2较早并且为大多数Java Web开发人员所熟悉的Java Web应用开发框架。
其他运用MVCModel 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和JavaPersistence API (JPA)。
一些通用开发框架也相继推出,如2003年发布的Spring Framework。Spring Framework的兴起缘于Sun公司的EJB 1.1至2.1的设计缺乏灵活性,不便于测试而广受批评这样的背景之下。Spring Framework最大的优势,是实现了依赖注入(DependencyInjection,DI)和面向方面的编程(Aspect-orientedprogramming, 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 通用开发框架
Play Framework 2008.02范例框架
AppFuse 2003.11.30/1.0 范例框架
Spring Roo 2009.12/1.0.0.RELEASE 范例框架
Spring Side 2006.08.07/1.0范例框架
Jboss Seam 2005.09 范例框架
Hibernate 2001 ORM持久化框架
iBATIS 2002 ORM持久化框架
JPA 2006.05.11/1.0ORM持久化框架
Struts 2000.05 Web应用框架
JSF 2004.03.11/1.0 Web应用框架
Apache Tapestry 2000.01 Web应用框架
- 编译、报告和代码生成:Ant、Ant Contrib Tasks、Checkstyle、EMMA、Java2Html、PMD 和 Rename Packages
- 测试框架:DbUnit、Dumbster、jMock、JUnit 和 Canoo WebTest
- 数据库驱动程序:MySQL 和 PostgreSQL
- 持久性框架:Hibernate 和 iBATIS
- IoC 框架:Spring
- Web 框架:JSF、Spring MVC、Struts、Tapestry 和 WebWork
- Web 服务:XFire
- Web 工具:Clickstream、Display Tag、DWR、JSTL、SiteMesh、Struts Menu 和 URL Rewrite Filter
- Security:Acegi Security
- JavaScript 和 CSS:Scriptaculous、Prototype 和 Mike Stenhouse 的 CSS Framework