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