核心概念IoC的具体体现为:高层模块不依赖底层模块,实现必须依赖抽象,应用程序不应依赖于容器,而是容器服务于应用程序。它可以帮助开发者完成组件之间的依赖关系注入,使得组建之间的依赖达到最小,进而提高组件的重用性。Spring是个低侵入的框架,其中的组件并不会意识到它正置身于Spring中,这使得组件可以轻易的从框架中脱离,而几乎不用任何修改,反过来说,组件也可以简单的方式加入到框架中,使得组件甚至框架的整合变得很容易。图2-3是Spring的整体框架。
图2-3 Spring的整体框架
Core封装包是框架的最基础部分,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
构建于Core封装包基础上的Context封装包,提供了一种框架式的对象访问方法,有些像JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化的支持,事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器[8]。
DAO提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。
ORM封装包提供了常用的"对象/关系"映射APIS的集成层。其中包括JPA、JDO、Hibernate。利用ORM封装包,可以混合使用所有Spring提供的特性进行"对象∕关系"映射,如前边提到的简单声明性事务管理。
2.2.3 Hibernate框架
Hibernate 控制的是持久层,这里通常是程序最容易失控的地方。这里通常是程序最容易失控的地方。开发者总是低估构建他们自己的持久框架的挑战性。系统内部的持续层不但需要大量调试时间,而且还经常缺少功能使之变得难以控制,这是持久层的通病。Hibernate为Java提供了OR持久化机制和查询服务,Hibernate将在Java类里使用的HQL语句转换为SQL语句,利用JDBC驱动进而操作数据源,完成数据的增、删、改等最低层是关系数据库。Hibernate的持久对象是基于POJO和Java collections。此外,使用Hibernate并不妨碍你正在使用的IDE。Hibernate通过查询语言(HQL) 或者正则表达的API来完成查询。HQL 是一种对象查询的自然语言,非常类似于SQL,它只是把SQL里的table和columns用Object和它的fields代替[9]。像Hibernate这类的高级ORM框架支持大部分主流数据库,并且这个框架支持Parent/child关系,事物处理,继承和多态。Hibernate体系结构如图2-4所示。
图2-4 Hibernate体系结构
Hibernate是优秀的持久化工具,不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库,使用Hibernate,可以大大减少操作数据库的工作量。Hibernate在持久层解决了面向对象设计范式和数据库关系模型不匹配的问题,是一个理想的O/R 映射工具,用它来替代Spring框架对JDBC的封装是一个很好的做法。
2.2.4 SSH框架整合
以上对Struts、Spring和Hibernate三种框架技术,进行了详细的研究,从中可以看出,对于各个框架技术的个体而言不存在优与劣,而只是应用领域不同而已。如何针对某一具体领域,选择合适的框架技术来相互弥补应用中的不足,则是很值得讨论的,构架图如图2-5所示。
图2-5 SSH构架图
Struts是一种优秀的J2EE MVC实现框架,运用了成熟的MVC设计模式和前端控制器(Front Controller)模式,并基于尽可能保持事物简单化的动机。Struts采取了分级的拉出式MVC模式。"拉出式"是指视图组件根据要求,从控制器中将模型信息拉出来作为响应。这与传统的Model的方式不同,传统的Model没有使用模型来管理信息,而是直接使用视图来访问信息。"分级"是指对视图数据的存放,在Struts中,"值堆栈"用来为视图提供信息,利用FilterDispatcher配合Xwork.xml文件实现对整个系统的导航。对业务流程动态配置,而不用将流程控制硬编码在代码中[10]。Struts利用强大的OGNL和值堆栈机制,为View层和Model之间实现了完美的数据共享,方便、灵活的拦截器是开发人员可以针对特定需求实现数据的拦截。
Struts+Spring+Hibernate是目前国外众多知名软件企业最主流的应用技术,也是J2EE未来发展的趋势,Struts作为前台控制框架简化了程序的开发,使页面设计人员和Java程序员达到有效的分离,使项目的可扩展性大大增强,提升了开发效率,降低了维护成本。Spring作为一个应用于所有层面综合框架,具有强大的应用功能及灵活性,非常适合作为一些大规模软件项目的底层平台[16]。Hibernate作为后台O/R mapping一个持久层框架的轻量级组件,对持久层进行了轻量级封装,降低了程序的复杂度,易于调试,减轻了程序员的负担,具有很强的扩展性,API开放,可自行对Hibernate原码进行修改,扩展所需的功能,所以Struts+Spring+Hibernate的联合框架一定具有美好的前景。
Spring是业界一直非常推崇的轻量级容器,与各种框架能够很好的集成。虽然Struts本身通过Xwork实现IoC机制,但考虑到在应用中会使用到AOP机制,而选择使用Spring作为容器来维护Bean的操作,能够很好的实现业务逻辑的分离,避免将所有的任务都由Struts完成。依靠IoC的依赖注入,给开发人员减轻了负担,使程序代码逻辑结构清晰,这样不但实现了组件间的松散耦合还大大提高了开发效率。Spring框架的优势不止于此,如事务操作、AOP和集成的持久层实现等给开发人员带来了极大的方便。不用拘泥于设计事务机制、繁琐的try-catch代码和数据库连接和获取、关闭等。Hibernate作为一种持久层框架和Spring天然的搭配在一起,使开发人员可以完全以面向对象的方式进行系统分析、系统设计并可以使用面向对象的操作方式操作数据库记录[11]。更为重要的是,应用系统在不同数据库间移植非常方便,只需在配置文件中更改即可。
开发过程中,三种框架技术的集成非常方便,作为开源框架中的佼佼者,三种技术顾及到了和其他框架的结合,而且开发者针对具体的应用需求,可以修改源代码,定制客户化服务。在项目实施中通过对以上三种框架的集成,充分利用各自的优势,互为补充,取得了良好的效果。
2.3 AJAX技术
1) AJAX概念
AJAX是2005年2月由Jesse James Garrett首先提出来的,它是Asynchronous Javascript And XML的简写,即异步的JavaScript和Xml而程序调用。AJAX是一种客户端开发技术,它能够与任何主流的服务器端语言,比如JAVA、C#、PHP、VB.NET等共同使用[12]。AJAX实际上不是一项全新的技术,它是把几项技术以强有力的全新思维方式整合而成。
2) AJAX大致涵盖以下几方面内容:
(1) 利用XHTML和CSS进行基于标准的页面表示;
(2) 利用DOM对载入的页面进行动态的显示和交互;
(3) 利用XML和XSLT进行数据的交换和处理;
(4) 利用XMLHttpRequest进行通信代理,完成异步数据检索;
(5) 利用Javascript来编写AJAX引擎,将以上技术融合在一起。
3) AJAX应用和传统WEB应用的差别
在传统WEB应用中,用户运行程序的模式是:提交页面→等待响应→重新显示页面。只要刷新页面,就必须是完全刷新,这期间用户对程序的体验是中断的。利用AJAX可以使用户在不重载页面的情况下,通过Javascript启动一个异步HTTP请求从服务器获取信息,然后部分刷新页面信息,使用户对应用的体
上一篇:
基于J2EE的考勤管理系统(word文档)
下一篇:
基于JSP邮件收发系统论文