软件架构和J2EE开发平台
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1软件架构和J2EE开发平台
2.1.1软件架构
软件架构(software architecture)是一系列相关的抽象模式的有机结合,
用于指导大型应用系统各个方面的设计,是一个应用系统的草图。
软件架构描述
的对象是指直接构成系统的抽象组件以及各个组件之间的连接关系,明确和细致I,,.“地描述组件之间的通讯。
在实施阶段,这些抽象组件被细化为实际的组件,例如
具体的某个类或者对象。
在面向对象领域中,组件之间的连接通常以接口来实现。
软件体系结构是构建计算机应用软件的基础,在系统设计过程中,一个软件
架构师设计软件构架,以作为满足不同需求的实际应用系统设计方案的基础。
对于开发Web应用,要从头开始设计并开发出一个可靠、稳定的框架是一
件较难的事。
随着Web开发技术的日趋成熟,在Web开发领域出现了一些现成
的可以利用的优秀框架,开发者可以直接使用它们,J2EE平台及J2EE范畴内的Struts, Spring, Hibernate等就是比较成熟的框架。
下面分别来阐述。
2. 1. 2 j2EE开发平台
1. J2EE概念
Java 2平台目前有3个版本,它们是适合于小型电子设备和智能卡的Java 2
平台Micro版(Java 2 Platform Micro Edition, J2ME)、适用于桌面应用系统
的Java 2平台标准版(Java 2 Platform Standard Edition, J2SE)、适用于开
发服务器应用程序和服务的Java 2平台企业版(Java 2 Platform Enterprise
Edition, J2EE)。
其中,J2EE是一种利用Java 2平台来简化企业应用系统的开发、部署和管理相关的复杂问题的体系结构。
J2EE技术核心是Java平台或Java
2平台的标准版,J2EE巩固了标准版中的许多优点。
J2EE最终目的就是成为一
个能够使企业开发者大幅缩短应用软件投放市场时间的体系结构。
2. J2EE的四层模型
J2EE是使用多层的分布式应用模型,应用逻辑按功能划分为不同组件,各
个应用组件根据它们所在的层可分布在不同的计算机上。
一个多层次应用模型能
够为不同的每种服务提供一个独立的层,图2-1是J2EE典型的四层结构图。
J2EE规范定义了以下四个层次:
(1)客户端层(Client Tier)
客户端层用来实现企业级应用系统的操作界面和显示层。
另外,某些客户端
程序也可实现业务逻辑(例如,应用小程序),因此,客户端层可分为基于Web
的和非基于Web两种情况。
基于Web的情况下主要作为企业Web服务器的浏览器,非基于Web的客户层则是独立的应用程序,也就是胖客户机,用来完成瘦客户机
无法完成的任务。
(2)Web层
为企业提供Web服务,包括企业信息发布等内容。
Web层由Web组件组成。
J2EE平台中Web组件包括JSP页面和Servletso Web层也可以包括一些JavaBeanso Web层主要用来处理客户端请求,调用相应的逻辑块,并把处理结
果以动态网页的形式返给客户端。
(3)业务层(Business Tier)
业务层也叫EJB层或应用层,由EJB服务器和EJB组件组成。
一般情况下开
发商把Web服务器和EJB服务器产品整合在一起发布,称为应用服务器。
EJB层
用来完成企业级信息系统的业务逻辑,这是企业级应用核心,由运行在业务层中
的EJB来处理。
一个Bean从客户端接收数据、进行提交处理,然后把数据送到
企业信息系统层存储起来。
同样,一个Bean也可以从企业信息系统获得数据,
发送到客户端界面。
业务层中的EJB要运行在容器中,容器解决了底层的一些问
题,如多线程安全管理、资源池、事务处理、生命周期、状态管理等。
(4)企业信息系统层(Enterprise Information System tier)
处理企业系统软件,包括企业基础系统、数据库系统及其它遗留的系统。
J2EE 将来的版本应该能够支持连接架构(Connector Architecture)。
它是连接J2EE
平台和企业信息系统层的标准API.
业务层和Web层共同组成了三层J2EE应用的中间层,即服务层,其它两层
是客户端层和存储层或企业信息系统层。
3. J2EE的优势
J2EE为搭建具有可伸缩性、灵活性、高安全性的商务系统提供了良好的机制,以下分别介绍J2EE的优势。
(1)保留现存的IT资产:由于企业必须适应不断变化的商业需求,就要利
用已有的企业信息系统方面的投资,而不是重新制定全盘方案就变得非常重要。
这样,一个以渐进的方式建立在已有系统之上的应用系统是公司所需求的。
由于基于J2EE平台的应用系统几乎能够在任何操作系统和硬件配置上运行,现有的
操作系统和硬件能够被保留使用。
(2)高效的开发:J2EE允许软件公司把一些通用的、很繁琐的服务端任务
交给中间件供应商去完成。
这样开发人员可以集中精力在如何创建业务逻辑上,相应地缩短了应用系统开发时间。
(3)支持异构环境:J2EE能够开发部署在不同环境中的可移植程序。
基于
J2EE的软件系统不依赖任何特定的操作系统、中间件、硬件。
因此设计合理的
基于J2EE的应用系统只需开发一次就可部署到各种平台。
这在典型的异构企业
计算环境中是至关重要的。
J2EE标准也允许客户订购与J2EE兼容的第三方的现
成的程序组件,把它们安装到异构环境中,节省了自行制订整个方案所需的费用。
(4)可伸缩性:企业必须选择一种服务器端平台,这种平台应能提供极好
的可伸缩性,去满足利用企业应用系统进行商业运作的大批新客户。
基于J2EE
平台的应用程序能以集群方式部署到不同操作系统上,当然允许多台服务器集成部署。
这种部署可有数千个处理器,搭建可高度伸缩的系统,满足未来商业应用发展的需要。
(5)稳定的可用性:一个服务器端平台必须能365*24小时运转以满足公司
客户、合作伙伴的需要。
这是实时性很强的商业系统较为理想的选择。
2. 1. 3 J2EE平台与.Net平台比较
下面从四方面进行J2EE平台与.Net平台比较[4]0
1.多系统整合和系统延展性
跨平台的特性是J2EE的最大特点,目前用J2EE技术实现的企业级应用可
以运行在大机、Unix,windows,linux等各种操作操作上,后台可以连接Oracle,
DB2, Informix等多种数据库,并且效率方面没有太大的区别。
在多个系统连接
方面,J2EE也提出了很多很好的解决方案。
J2EE技术能够实现与企业遗留系统的整合当然,J2EE目前也提倡使用Web Service等技术来进行系统互联。
总的来说,J2EE技术是一套通用标准,它由
诸多大公司一起支持,所以技术的通用性和标准性较高,现在基本上成为企业级应用系统的事实标准。
. Net从本质上来说不是一套标准,而是微软产品的集合,因此,选择.Net
框架技术,基本上就选定了微软操作系统平台,甚至底层硬件也仅能选择工ntel 的系列芯片,而不能在大机、Unix以及Linux等其余系统上使用。
在数据库方面,. Net对自身的Microsoft SQL Server支持也会比其他数据库好。
在系统
连接方面,. Net也提倡使用Web Service,这个技术目前还比较新颖,成熟可靠
的解决方案不多。
总之,在多系统集成和系统延展性方面,J2EE占绝对优势,现在而言,. Net 技术很难望其项背。
2.1/0处理和线程调度
在这个方面,从应用角度看,两者都能够达到企业级应用系统的需求。
但是
工//0处理速度和线程调度问题从本质上来讲应该由底层硬件和操作系统来解决。
J2EE支持几乎支持各种硬件和操作系统,仅从这点来讲,都比.Net技术占优势。
其它不说,大型计算机的1/0处理能力和线程调度能力是其它任何机种所无法
企及的。
而且,大机上现在只能运行J2EE,而不能运行.Net。
就凭这一点,就
说明了在这个方面J2EE确实优于.Net技术。
3.稳定性和安全性
稳定性和安全性方面可以用很多技术方式去实现和补偿,问题的关键是看投
入的成本和维护的费用,仅凭昂贵的资金投入显然是不可取的。
因此,就把讨论
范围定在操作系统和硬件芯片级别上。
. Net技术进入高端应用市场,依靠的是Windows Data Center之类的操作系统,依靠的是工ntel的安腾芯片。
Windows操作系统的稳定性和安全性也远
不如Unix乃至S/390等操作系统。
Windows是最普遍的桌面系统,同时也是最
大的病毒温床,众多的病毒困扰着Windows操作平台的使用者。
目前,利用
Microsoft SQL Server的漏洞的病毒进行肆虐就是一个明证。
Unix, Linux和
大型机操作系统的病毒较少,安全级别也比Windows高的多。
另外,. Net所能够运行的硬件平台,一般来讲只有Intel公司的芯片,
工ntel公司的志强芯片一般认为它仅是个部门级别服务器的芯片。
所以,. Net技
术在高端的企业级应用市场缺乏案例支持。
4.产品成熟度等其他因素
J2EE在1999年形成成熟的架构,并且到目前已经有相当成熟的经过检验
的企业应用案例,而.Net框架技术技术源自微软以前开发企业应用程序的平台
DNA(Distributed Network Architecture),其中包括了许多以前已经被证实
的技术,J2EE却是众多企业级解决方案的提供商所力推的,所以J2EE在企业
中有诸多成功案例和解决方案。
这些可以从世界多种大企业的IT应用系统的实
际情况可以看出。
世界上大多数企业级IT系统,使用J2EE平台技术的远远大
于.Net。
因此,. Net技术还没有太多比较成功的实施案例。
2. 2 SSH架构
2.2.1 Struts框架
1. Struts框架的基本概念
Struts是基于MVC的Web应用框架。
Struts是由一组相互协作的类、
servlet和JSP标记组成的一个可以重用的MVC 2设计。
Struts为Java Web应用软件提供了模型一视图一控制器(Model-View-
Controller, MVC)框架,尤其适用于研发大型可扩展的Web应用,为Web应
用提供了一个可以通用的框架,使开发人员可以把精力集中在如何解决实际业务
问题上。
另外,Struts框架提供了多处可供扩展和定制的地方,使得应用程序
可以便利地扩展框架,更好地适应变化的用户需求。
2. Struts实现MVC的原理
Struts其实就是在Model2基础上实现的一个MVC框架。
在Struts框架
中,模型由实现业务逻辑的JavaBean或EJB组件组成,控制器由
ActionServlet和Action来共同负责,视图由JSP文件构成。
(1)视图
视图就是一组JSP文件。
在这些JSP文件中没有业务操作,也没有模型方面的信息,只有标签,这些标签可以是标准的JSP标签或客户化标签,如Struts
标签库中标签。
还有,通常可以把Struts框架中的ActionForm Bean也划分
到视图模块中。
ActionForm也是一种JavaBean,除了具有一些普通JavaBean
的常规方法,还含有一些特殊的方法,Struts框架利用ActionFrom来进行视图
和控制器之间表单信息的传递,Struts框架把用户输入的表单信息保存在
ActionFrom中,把它传给控制器,控制器可以对ActionFrom中的数据进行编辑,
JSP文件使用Struts标签获取修改后的ActionFrom的信息,重新设置HTML
表单内容。
(2)模型
模型表示企业应用程序的状态和业务逻辑。
对于大型企业应用,业务逻辑通
过JavaBean或EJB组件实现。
(3)控制器
控制器由ActionServlet类和Action类组成。
ActionServlet类继承了
HttpServlet类,是Struts框架中的最核心组件,在Struts框架中和Action
类起控制器的作用。
ActionServlet作用是接受来自用户的HTTP请求,再根据
struts -config. xml的配置信息,把来自用户的HTTP请求再转发给适当的
Action对象。
Action类作用是接受ActionServlet类调用,再根据自身的方法
调用模型,更新模型的信息,并协助控制应用程序的流程。
对于小型应用系统,Action类本身也可以进行实际的业务逻辑。
对于大型
企业应用,Action担任用户请求和业务逻辑处理之间的适配器(Adaptor),其
职责是将请求与业务逻辑分开,Action根据客户端请求调用相关的业务逻辑组
件。
业务逻辑组件由Java Bean或EJB来完成,Action类则侧重于控制应用程
序的流程,而不是完成应用程序的逻辑。
通过将这些业务逻辑放在单独的Java
包或EJB中,可以提高应用组件的灵活性和可重用性。
当ActionServlet控制器收到客户端请求后,把该请求转发到一个Action
实例。
如果这个实例还不存在,控制器会创建它,然后调用该Action实例的
execute()方法。
Action的execute()方法返回一个ActionForward对象,
它封装了把客户端请求再转发给其他它Web组件的信息。
用户实现自己的
Action类(即Action基类的子类)时,必须覆盖其中的execute()方法。
在Action基类中返回null.
(4) Struts的配置文件struts一conf i g. xml
上面提及一个客户端请求是通过ActionServlet来处理和转发的。
那么,ActionServlet根据配置文件struts-config. xml,把客户端请求转发给Action
对象。
在struts一config. xml中,Action的映射信息通过<action>元素来配置。
这些定义信息在系统启动的时候被读入内存,供Struts在运行期间调用。
在内
存中,每一个<action>元素都对应一个ActionMapping类的实例。
2.2.2 Spring框架
Spring是轻量级的来自于项目经验的开源J2EE框架,它是在项目开发过程
中根据经验逐步总结出的一种架构。
Spring可以将简单的组件配置成为复杂的
应用,极大的简化了复杂项目的开发。
Spring使用JavaBean来完成以前只能由
EJB完成的工作。
然而,Spring的用途不限于服务器端的开发。
从简单性、可测
试性和松祸合的角度来讲,任何Java应用程序都可以从Spring中受益。
Spring
框架的良好架构使项目代码更易维护,可以集成诸如Hibernate, WebWork,
Struts. Freemarker等优秀的框架。
Spring清晰的结构层次划分,使得开发人
员可以使用框架的某项功能,而不需要使用它的全部解决方案,如AOP, WEBMVC
都可以作为独立的库进行使用。
Spring框架由七个模块组成,图2-2为Spring框架概览图。
图2-2 Spring框架概览图
如果从一个整体来讲,7个模块为开发者提供了开发企业应用所需的一切,
但不需要将应用完全基于Spring框架,开发者可以自由地挑选适合应用的模块。
从图2-2 Spring框架概览图可以看出,所有的Spring模块都是在核心容器
之上构建的,容器定义了Bean是如何创建、配置和管理的。
当配置应用时,会潜在地使用这些类。
下面分别介绍Spring框架七个模块。
[5]
1.核心容器
这是Spring框架中最基础的部分,包含并管理其应用对象的配置和生命周
期,从这个意义上将,它是一种容器。
Spring提供了依赖注入(Dependency
Injection)特征实现容器对Bean的管理。
其中最基本的概念是BeanFactory,
它是任何Spring应用系统的核心。
BeanFactory是工厂模式的实现,它使用工oC
将应用配置和依赖说明从应用代码中分离出来。
从大小与开销两方面讲,Spring
都是轻量的,Spring与传统的重量级的EJB容器混同。
现介绍控制反转(工oC)o Spring通过一种称作控制反转的技术促进了模块
间的松祸合。
系统应用工oC时,一个对象依赖的其它对象会以被动的方式传递进
来,而不是这个对象自行创建或者查找依赖对象。
可以这么认为,IOC与JNDI
相反,前者不是对象从容器中寻找依赖,而是容器在初始化对象时,对象还没请
求时,就主动将依赖传给它。
2.应用上下文(Context)模块
上下文模块使Spring成为一个框架。
这个模块丰富了BeanFactory的概念,
增加了对国际化消息、事件传播以及验证的支持。
另外,上下文模块提供了许多企业服务,例如,JNDI访问、电子邮件、EJB
集成、远程以及时序调度(scheduling)服务。
3. Spring的AOP模块
Spring利用其AOP模块提供了对面向切面编程的丰富支持,允许通过分离
应用的业务逻辑与系统级服务进行内聚性的开发。
AOP模块是在Spring应用中
实现切面编程的基础。
为了保证Spring与其它AT框架的互用性,Spring的AOP
模块支持基于AOP联盟定义的API. AOP联盟的目标是通过定义一组共同的接口
和组件,促进AOP的使用及不同的AOP间的互用性。
4. JDBC抽象和DAO模块
使用JDBC经常产生大量的重复代码,Spring的JDBC和DAO模块抽取了这
部分重复代码,因此开发人员可以保持数据库访问代码干净、简洁,并且可以防
止因关闭数据库资源失败而引起的异常问题。
JDBC和DAO模块还在几种数据库
服务器给出的错误消息之上建立了一个有意义的异常层,还使用AOP模块为应用
中的对象提供了事务管理服务。
5.对象/关系映射集成模块
对那些习惯使用对象/关系映射工具而不是直接使用JDBC的开发者,Spring
提供了对象/关系映射(ORM )模块。
Spring并不实现它自己的ORM解决方案,
而是为几种流行的ORM框架提供集成方案,包括.丁D0, Hibernate和iBATIS SQL映射。
Spring 的事务管理支持这些ORM框架中的每一个解决方案。
6. Spring的Web模块
Web上下文模块建立在应用上下文模块之上,提供一个适合于Web应用的上
下文。
此外,这个模块还提供面向服务支持。
7. Spring的MVC框架
Spring为构建Web应用提供功能全面的MVC框架。
虽然Spring比较容易地
与其它MVC框架集成,但Spring的MVC框架使用控制反转对控制逻辑和业务对
象提供了完全的分离,它允许声明性地将请求参数定义到业务对象中。
另外,
Spring MVC框架还可以利用Spring的其它服务。
综上所述,Spring降低了J2EE应用系统开发的复杂性。
它的核心是轻量级
的控制反转容器,它的目标是为J2EE企业级应用系统提供了全方位的整合框架,
在Spring框架下实现多子框架的组合,这些子框架之间可以相互独立,也可以
使用其它的框架方案加以更换,Spring希望为企业应用开发提供一站式的解决
方案。
2.2.3 Hibernate工具介绍
Hibernate是一种Java语言环境下的对象一关系映射解决方案,是一种开源
的软件。
它用来把对象模型表示的对象映射到基于SQL的关系模型中,为面向
对象的实体模型到关系型数据库之间的映射,提供了一个极为方便的框架。
Hibernate对JDBC进行了极其轻量级的对象封装,使Java程序员可以随心所欲
的使用对象编程思想来操作数据库。
Hibernate能够应用在任何应用JDBC的场
合,既可以在Java的客户端程序上应用,也可以在Servlet/JSP的Web应用中
应用,而且,Hibernate可以在应用EJB的J2EE架构中代替CMP,完成数据持久
化的任务。