SSHWeb开发架构分析实现Word下载.docx
《SSHWeb开发架构分析实现Word下载.docx》由会员分享,可在线阅读,更多相关《SSHWeb开发架构分析实现Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
著名的软件大师RalphJohnson对框架(Framework>
进行了如下的定义:
框架是整个系统或系统的一部分的可重用设计,由一组抽象的类及其实例间的相互作用方式组成。
框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。
J2EE复杂的多层结构决定了大型的J2EE工程需要运用框架和设计模式来控制软件质量。
目前,市场上出现了一些商业的、开源的基于J2EE的应用框架,其中主流的框架技术有:
基于MVC模式的Struts框架、基于IoC模式的Spring框架以及对象/关系映射框架Hibernate等。
1.2框架共同点
所有现代的网络开发框架几乎都遵循了模型-视图-控制(MVC>
设计模式:
商业逻辑和描述被分开,由一个逻辑流控制器来协调来自客户端的请求和服务器上将采取的行动。
这条途径成为了网络开发的事实上的标准。
每个框架的内在的机制当然是不同的,但是开发者们使用来设计和实现他们的Web应用软件的API是很类似的。
差别还存在于每个框架提供的扩展方面,例如标签库,JavaBean包装器等。
所有的框架使用不同的技术来协调在Web应用程序之内的导航,例如XML配制文件,java属性文件或定制属性。
所有的框架在控制器模块实现的方法方面也存在明显的不同。
例如,EJB可能实例化在每个请求中需要的类或使用Java反射动态地调用一个适当的行为<
Action)类。
另外,不同框架在各自引入的概念上也有所不同。
例如,一个框架可能定义用户请求和反应场所,而另外一个框架可能仅仅定义一个完整的流:
从一个请求到多个响答和随后的再请求。
各种Java框架在它们组织数据流的方法方面是很类似的。
在请求发出后,在应用程序服务器上产生一些行动;
而作为响应,一些可能包含对象集的数据总是被发送到WEB层。
然后从那些对象:
可能是有setter和getter方法的简单类、JAVABEANS、值对象、或者一些集合对象中提取数据。
现代的Java框架还想方设法简化开发者的开发任务,如通过使用简易的API、数据库连接池、甚至数据库调用包等提供自动化的追踪方式来实现。
一些框架或者能够钩进<
hookedinto)另外的J2EE技术中,例如JMS(Java消息服务>
或JMX,或把这些技术集成到一起。
服务器数据持续性和日志也有可能成为框架的一部分。
1.3MVC模式
MVC模式是一个用于将用户界面逻辑与业务逻辑分离开来的基础设计模式,它将数据处理、界面以及用户的行为控制分为:
Model<
模型)-View<
视图)-Controller<
控制器)。
Model:
负责当前应用的数据获取与变更及相关的业务逻辑。
可用JAVABEAN来体现;
View:
负责显示信息。
可以使用JSP、VELOCITY模板等技术;
Controller:
负责收集转化用户的输入。
常用一个SERVLET来实现;
View和Controller都依赖于Model,但是Model既不依赖于View,也不依赖于Controller,这是分离的主要优点之一,这样Model可以单独的建立和测试以便于代码复用,View和Controller只需要Model提供数据,它们不会知道、也不会关心数据是存储在SQLServer还是Oracle数据库中或者别的什么地方。
1.4WEB层框架Struts
Struts是一个在JSPModel2基础上实现的MVC框架,其主要的设计理念是通过控制器将表现逻辑和业务逻辑解耦,以提高系统的可维护性、可扩展性及可重用性。
Struts框架的体系结构如下图所示:
下面就上图所示的体系结构图分析Struts框架中的MVC组件。
Ø
视图(view>
:
视图部分主要由JSP页面组成,其中没有流程逻辑、业务逻辑和模型信息,只有标记。
Struts自身包含了一组标记库(TagLib>
,这也是Struts的精华之一,灵活运用它们可以简化JSP页面的代码,提高开发效率。
控制器(controller>
Struts中的Controller主要是其自身提供的ActionServlet。
ActionServlet接收所有来自客户端的请求并根据配置文件(struts-config.xml>
中的定义将控制转移到适当的Action对象。
模型(model>
Struts没有定义具体Model层的实现,Model层通常是和业务逻辑紧密相关的,有持续化的要求。
目前在商业领域和开源世界,都有一些优秀的工具可以为Model层的开发提供便利。
1.5业务逻辑层框架Spring
Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。
这里所说的轻量级指的是Spring框架本身,而不是指Spring只能用于轻量级的应用开发。
Spring的轻盈体现在其框架本身的基础结构以及对其他应用工具的支持和装配能力。
与EJB这种庞然大物相比,Spring可使程序研发人员把各个技术层次之间的风险降低。
Spring框架的核心是控制翻转IoC(InversionofControl>
/依赖注入DI(DependenceInjection>
机制。
IoC是指由容器中控制组件之间的关系<
这里,容器是指为组件提供特定服务和技术支持的一个标准化的运行时的环境)而非传统实现中由程序代码直接操控,这种将控制权由程序代码到外部容器的转移,称为“翻转”。
DI是对IoC更形象的解释,即由容器在运行期间动态地将依赖关系(如构造参数、构造对象或接口>
注入到组件之中。
Spring采用设值注入(使用Setter方法实现依赖>
和构造子注入(在构造方法中实现依赖>
的机制,通过配置文件管理组建的协作对象,创建可以构造组件的IoC容器。
这样,不需要编写工厂模式、单例模式或者其他构造的方法,就可以通过容器直接获取所需的业务组件。
Spring框架的结构如下图所示。
Spring框架由七个定义明确的模块组成,且每个模块或组件都可以单独存在,或者与其他一个或多个模块联合实现。
SpringCoreContainer是一个用来管理业务组件的IoC容器,是Spring应用的核心;
SpringDAO和SpringORM不仅提供数据访问的抽象模块,还集成了对Hibernate、JDO和iBatis等流行的对象关系映射框架的支持模块,并且提供了缓冲连接池、事务处理等重要的服务功能,保证了系统的性能和数据的完整性;
SprnigWeb模块提供了Web应用的一些抽象封装,可以将Struts、Webwork等Web框架与Spring整合成为适用于自己的解决方案。
Spring框架可以成为企业级应用程序一站式的解决方案,同时它也是模块化的框架,允许开发人员自由地挑选适合自己应用的模块进行开发。
Spring框架式是一个松耦合的框架,框架的部分耦合度被设计为最小,在各个层次上具体选用哪个框架取决于开发者的需要。
1.6持久层框架Hibernate
O/Rmapping技术是为了解决关系型数据库和面向对象的程序设计之间不匹配的矛盾而产生的。
Hibernate是目前最为流行的O/Rmapping框架,它也是开源软件,它在关系型数据库和Java对象之间做了一个自动映射,使得程序员可以以非常简单的方式实现对数据库的操作,它不仅负责从Java类到数据库表格(以及来自Java数据类型的SQL数据类型>
的映射,而且还提供数据查询和检索能力,并能大大减少花在SQL和JDBC手工数据处理上的开发时间。
Hibernate工作原理如下图所示:
Hibernate通过对JDBC的封装,向程序员屏蔽了底层的数据库操作,使程序员专注于OO程序的开发,有助于提高开发效率。
程序员访问数据库所需要做的就是为持久化对象编制xml映射文件。
底层数据库的改变只需要简单地更改初始化配置文件(hibernate.cfg.xml或者hibernate.properties>
即可,不会对应用程序产生影响。
Hibernate有自己的面向对象的查询语言HQL,HQL功能强大,支持目前大部分主流的数据库,如Oracle、DB2、MySQL、MicrosoftSQLServer等,是目前应用最广泛的O/R映射工具。
Hibernate为快速开发应用程序提供了底层的支持
2、基于SSH框架的Web应用架构分析与设计
前面分析了基于J2EE的SSH框架技术,现代的企业开发中,越来越多地引入了多层架构设计模式。
SSH就是其中之一,SSH架构是当前主流的架构,在很多领域,包括金融、电信工程,大型门户网站均选择该架构作为业务支撑架构,开发流程也已经非常成熟。
但是该结构开发起来,依旧存在一些问题。
分析这些问题,得先从SSH架构的组成说起。
SSH为Struts+Spring+Hibernate的组成方式,Struts实现MVC,Spring负责架构的结合,Hibernate进行数据的持久化。
通常其分层开发的结构图如下:
这样的结构,系统从职责上分为四层:
WEB层、业务逻辑层、数据持久层和实体层。
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。
具体做法是:
用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑。
系统的基本业务流程是:
在WEB表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request>
和接收响应(Response>
,然后Struts根据配置文件(struts-config.xml>
将ActionServlet接收到的Request委派给相应的Action处理。
在业务层中,管理服务组件的SpringIoC容器负责向Action提供业务模型(Model>
组件和该组件的协作对象数据处理(DAO>
组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。
这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。
而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
但是对于当前日益复杂化的WEB2.0的开发,却存在不少问题,归纳起来主