1、CONFIDENTIALJava高级框架应用开发案高级框架应用开发案例教程例教程(一一)Struts-Spring-Hibernate概概述述主要内容主要内容1.1 框架概述1.2 Struts、Spring和Hibernate概述1.3 开发工具与配置1.1 框架概述框架概述在介绍软件框架(Framework)之前,我们首先要明确什么是框架和为什么要使用框架。这要从企业面临的挑战谈起。如图1-1所示:1.1 框架概述框架概述可以看到,随着项目的规模和复杂性的提高,企业面临前所未有的各个方面的挑战。根据优先级排序,主要包括高可靠性(High Availability),低成本(Cost Eff
2、ective),可扩展性(Scalability),投放市场快速性(Time to Market),安全性(Secure),性能(Good Performance),可集成性(Ability to integrate),以及多平台支持(Multi-channel)等。那么,我们如何面对并且解决这些挑战呢?这需要采用通用的、灵活的、开放的、可扩展的软件框架,由框架来帮助我们解决这些挑战,之后再在框架基础之上开发具体的应用系统。如图1-2所示:这种基于框架的软件开发方式和传统的汽车生产方式是很类似的,如图1-3所示:1.1 1.1 框架概述框架概述那么到底什么是软件框架呢?框架(Framework
3、)的定义如下:l是应用系统的骨架,将软件开发中反复出现的任务标准化,以可重用的 形式提供使用l大多提供了可执行的具体程序代码,支持迅速地开发出可执行的应用; 但也可以是抽象的设计框架,帮助开发出健壮的设计模型l好的抽象、设计成功的框架,能够大大缩短应用系统开发的周期l在预制框架上加入定制的构件,可以大量减少编码量,并容易测试l分别用于垂直和水平应用1.1 1.1 框架概述框架概述框架具有以下特点:l框架具有很强(大粒度)的可重用性,远远超过了单个类;它是一个功 能连贯的类集合,通过相互协作为应用系统提供服务和预制行为l框架中的不变部分,定义了接口、对象的交互和其他不变量l框架中的变化部分(应用
4、中的个性)一个好的框架定义了开发和集成组件的标准。为了利用、定制或扩展框架服务,通常需要框架的使用者从已有框架类继承相应的子类;以及通过执行子类的重载方法,用户定义的类将会从预定义的框架类获得需要的消息。这会给我们带来很多好处,包括代码重用性和一致性,对变化的适应性,特别是它能够让开发人员专注于业务逻辑,从而大大减少了开发时间。如图1-4所示对有没有使用框架对项目开发所需工作量(以人*月来衡量)的影响进行了对比。1.1 1.1 框架概述框架概述从图中我们不难看出,对于没有使用框架的项目而言,开发所需工作量(以Man days,即人*月来衡量)会随着项目复杂性的提高(以Business func
5、tion,即业务功能来衡量)以几何级数递增,而对于使用框架的项目而言,开发所需工作量会随着项目复杂性的提高以代数级数递增。举个例子,假定开发团队人数一样,一个没有使用框架的项目所需的周期为6-9个月的话,那么同样的项目如果使用框架则只需要3-5个月。1.1 1.1 框架概述框架概述在软件架构设计中,我们往往建立软件系统的高层结构,常常用到分层架构模式。l分层模式是一种将系统的行为或功能以层为首要的组织单位来进行分配(划分) 的结构模式: 通常在逻辑上进行垂直的层次Layer划分 在物理上发明则进行水平的层级Tier划分l分层要求: 层内的元素只信赖于当前层和之下的相邻层中的其它元素(注意这并非
6、绝对的要求)大部分的Web应用在职责上至少能被分成4层:表示层(Presentation Layer)、持久层(Persistence Layer)、业务层(Business Layser)和域模块层(domain model Layer)。每个层在功能上都应该是十分明确的,而不应该与其他层混合。每个层要相互独立,通过一个通信接口而相互联系。下面将分别详细地介绍这四层,讨论一下这些层应该提供什么,不应该提供什么。1.2 Struts、Spring和Hibernate概述这里讨论一个使用三种开源框架的策略:表示层用Struts;业务层我们用Spring;而持久层则用Hibernate。如图1-5
7、所示。1.2 Struts、Spring和Hibernate概述1.2.1 表示层 一般来讲,一个典型的Web应用的前端应该是表示层。这里可以使用Struts框架。下面是Struts所负责的: 管理用户的请求,做出相应的响应 提供一个流程控制器,委派调用业务逻辑和其他上层处理 处理异常 为显示提供一个数据模型 用户界面的验证以下内容,不该在Struts表示层的编码中经常出现,与表示层无关的。 与数据库直接通信 与应用程序相关联的业务逻辑及校验 事务处理 在表示层引入这些代码,则会带来高耦合和难以维护的后果。1.2 Struts、Spring和Hibernate概述1.2.2 持久层持久层典型的
8、Web应用的后端是持久层。开发者总是低估构建他们自己的持久层框架的挑战性。系统内部的持久层不但需要大量调试时间,而且还经常因为缺少功能使之变得难以控制。这是持久层的通病。幸运地是,有几个对象/关系映射(Object/Relation Mapping,ORM)开源框架很好地解决了这类问题,尤其是Hibernate。Hibernate为Java提供了持久化机制和查询服务,它还给已经熟悉SQL和JDBC API的Java开发者创造了一个学习桥梁,使他们学习起来很方便。Hibernate的持久对象是基于POJO(Plain Old Java Object)和Java集合(collections)的。此
9、外,使用Hibernate并不妨碍你正在使用的IDE(Integrated Development Enviroment)。 1.2 Struts、Spring和Hibernate概述下面是Hibernate所负责的: 如何查询对象的相关信息。 Hibernate是通过一个面向对象的查询语言(HQL)或者正则表达的API来完成查询的。HQL非常类似于SQL,只是把SQL里的table和columns用Object和它的fields代替。HQL语言容易理解且文档也做得很好。HQL是一种面向对象查询的自然语言,很容易就能学会它。 如何存储、更新、删除数据库记录。 如Hibernate这类的高级OR
10、M框架支持大部分主流数据库,并且支持父表/子表(Parent/child)关系、事务处理、继承和多态。1.2 Struts、Spring和Hibernate概述1.2.3 业务层业务层一个典型Web应用的中间部分是业务层或者服务层。从编码的视角来看,这层是最容易被忽视的一层。我们往往在用户界面层或持久层周围看到这些业务处理的代码,这其实是不正确的。因为它会造成程序代码的高耦合,这样一来,随着时间推移,这些代码将很难维护。幸好,针对这一问题有好几种框架(Framework)存在。最受欢迎的两个框架是Spring和PicoContainer。这些也被称为轻量级容器(micro container)
11、,它们能让你很好地把对象搭配起来。这两个框架都着手于“依赖注射”(dependency injection)(还有我们知道的控制反转Inversion of Control=IoC)这样的简单概念。这里我们将关注于Spring的依赖注射和面向方面编程。另外,Spring把程序中所涉及到的包含业务逻辑和数据存取对象(DataAccess Object)的Objects例如transaction management handler(事务管理控制)、Object Factoris(对象工厂)、service objects(服务组件)都通过XML来配置联系起来。1.2 Struts、Spring和
12、Hibernate概述后面我们会通过项目和实例来揭示一下Spring是怎样运用这些概念的。下面是业务层所负责的: 处理应用程序的业务逻辑和业务校验 管理事务 提供与其他层相互作用的接口 管理业务层级别的对象的依赖 在表示层和持久层之间增加了一个灵活的机制,使得他们不直接联系在一起 通过揭示从表示层到业务层之间的上下文(Context)来得到业务逻辑(business services) 管理程序的执行(从业务层到持久层)1.2 Struts、Spring和Hibernate概述1.2.4 域模块层域模块层既然我们致力于的是一个Web的应用,我们就需要一个对象集合,让它在不同层之间移动。域模块层
13、由实际需求中的业务对象组成比如,订单明细(OrderLineItem)、产品(Product)等等。开发者在这层不用管那些数据传输对象(Data Transfer Object),仅关注域对象(domain object)即可。例如,Hibernate允许你将数据库中的信息存入域对象(domain objects),这样你可以在连接断开的情况下把这些数据显示到用户界面层,而那些对象也可以返回给持久层,从而在数据库里更新。而且,你不必把对象转化成DTO(这可能导致它在不同层之间的传输过程中丢失)。这个模型使得Java开发者能很自然运用面向对象编程(Object-Oriented Programm
14、ing),而不需要附加的编码。本书围绕上述架构,通过一个完整的项目AscentWeb医药商务系统来具体展开Struts-Spring- Hibernate这三部分的讲解。1.2 Struts、Spring和Hibernate概述1.3 开发工具与配置开发工具与配置1.3.1开发工具与环境开发工具与环境1集成开发工具集成开发工具IDE:MyEclipse 7.02001年11月IBM宣布捐出了价值4千万美金的开发软件给开放源码的Eclipse项目,Eclipse是替代IBM Visual Age for Java的下一代IDE开发环境。(注:Eclipse是“蚀”的意思,SUN微系统公司推出了J
15、ava,eclipse of the sun就是“日蚀”,以此与SUN公司竞争。)Eclipse的官方网站是http:/www.eclipse.org,你可以在Downloads栏目中下载其最新Release版本;当然你也可以下载它的官方中文语言包,这样,不仅程序界面甚至帮助文档都是简体中文的了。根据Eclipse的体系结构,通过开发插件,它能扩展到任何功能和任何语言的开发。这也正是Eclipse的潜力所在。Myeclipse是Eclipse开发插件,7.0版本支持spring2.5,所以选择MyEclipse7.0作为开发工具。2服务器:服务器:Tomcat 6.0.18Tomcat是一个免
16、费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总能在Tomcat中得到体现。我们使用的是Tomcat 6.0.18。Tomcat提供了各种平台的版本供下载,可以从http:/jakarta. apache.org上下载其源代码版或者二进制版。由于Java的跨平台特性,基于Java的Tomcat也具有跨平台性。1.3 1.3 开发工具与配置开发工具与配置3数据库:数据库:Mysql 5.0.45MySQL是一个多用户、多线程的SQL数据库
17、,是一个客户机/服务器结构的应用,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。它是目前市场上运行最快的 SQL(Structured Query Language结构化查询语言)数据库之一,你可以从http:/上下载,它提供了其它数据库少有的编程工具,而且MySQL对于商业和个人用户是免费的。这里我们使用相对稳定的5.0.45版本。MySQL的功能特点如下:可以同时处理几乎不限数量的用户;处理多达50,000,000以上的记录;命令执行速度快,也许是现今最快的;简单有效的用户特权系统。1.3 1.3 开发工具与配置开发工具与配置1.3.2工具集成步骤1.Eclipse连To
18、mcat首先确定自己机器安装了Tomcat6.0.18,并且在环境变量中配置了java_home变量。打开Eclipse,在应用中我们要应用MyEclipse7.0,该版本直接和Eclipse集成在一起。连Tomcat进行下面步骤选择Window-Preferences进入下面界面如图1-6所示:1.3 1.3 开发工具与配置开发工具与配置 选择MyEclipse-Servers-Tomcat-Tomcat 6.x,如图1-7所示:首先选中Enable,然后Tomcat home directory选择Tomcat6.0.18根目录,点击Apply、OK即可。1.3 1.3 开发工具与配置开发
19、工具与配置2.Eclipse 连 MySQL数据库点击Window-Show View-Other打开如下对话框如图1-8所示:1.3 1.3 开发工具与配置开发工具与配置 选择MyEclipse Database-DB Browser 点击OK。如图1-9所示:1.3 1.3 开发工具与配置开发工具与配置 上面操作打开了上面操作打开了DB Browser试图,在该试图空白区点击右键,选择试图,在该试图空白区点击右键,选择New进行进行新建连接(如果有也可以右键新建连接(如果有也可以右键Edit),如图),如图1-10所示所示:1.3 1.3 开发工具与配置开发工具与配置 点击点击New后出现
20、下图配置连接页面,如图后出现下图配置连接页面,如图1-11所示:所示:按照上面配置连接,其中Driver name:自己随意取名,URL配置自己的url,后面acesys为连接的库名,请自己正确设置,user name、password为自己安装Mysql用户名密码,Driver JARs选择mysql驱动,正确设置完后可以勾选Save password以便以后每次连接不用再输入密码,最后点击Finish配置完成。1.3 1.3 开发工具与配置开发工具与配置 成功设置后DB Browser试图区会出现刚设置的连接,选中右键连接或右上方连接按钮,正确连接到数据库,如图1-12所示 上述操作已经正确设置了mysql连接,在进行Hibernate开发时,可以直接使用设置好的连接。1.3 1.3 开发工具与配置开发工具与配置