2.1.1 MVC设计模式的基本思想
MVC设计模式即把一个应用的输入、处理、存储、输出流程按照 Model、View、Controller的方式进行彻底的分离,这样一个应用被分成三个层——模型层、视图层、控制层。
视图(View)代表用户交互界面,是系统的外观。对老式的 WEB 应用程序来说,视图就是由HTML元素组成的界面,在新式的WEB[13]应用程序中,虽然HTML 依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,例如 XHTML,XML/XSL,WML 等标识语言。随着应用的复杂性和规模性不断增加,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC 模式中的视图层仅仅是接收用户输入的数据,以及将处理之后的数据呈现给用户,而不在视图层上的作任何业务的处理,所以视图层仅仅是一个数据的表示而已,当模型发生改变时,视图也会随之改变。
模型(Model)用来在后台存储或远程系统中数据的维护,执行主要的业务流程,是应用系统的核心部分。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。MVC 设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员的设计是否优秀的依据。MVC 中并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。
控制器(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个转发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制器并不做任何的数据处理。例如,用户点击一个连接,控制器接受请求后, 并不处理业务信息,只把用户的信息传递给模型,告诉模型该做什么,然后根据模型提供的结果选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型,而其中可能只需一个控制器进行转发。
尽管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。直到基于J2EE的JSP Model 2 问世时才得以改观[5]。它用JSP技术实现视图的功能,用Servlet[18]技术实现控制器的功能,用EJB(Enterprise JavaBean) 或Java Bean实现模型的功能。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC 将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。本文下一小节会详细介绍MVC模式中的Struts框架。
2.1.2 MVC设计模式下Struts框架概述
(1) Struts[3]的体系结构
Struts就是在JSP Model2 基础上实现了的一个MVC框架,其视图层由JSP 文件实现,以及用于在客户端进行简单验证的JavaScript脚本语言,控制层由ActionServlet实现,而模型的业务逻辑则由EJB和JavaBean实现。
(2) Struts[4]的核心组件
Struts实现了MVC框架,所以其组件也就是也MVC中的Model组件、View组件、Controller组件。在这几个基本组件中有ActionServlet、ActionMapping、Action、ActionForm、Struts标签库等核心组件。
(3) ActionServlet组件
ActionServlet组件是由org.apache.struts.action.ActionServlet 类实现的,这个类是javax.servlet.http.HttpServlet 类的扩展,它是Struts框架的核心控制器组件,所有的用户请求都先经ActionServlet处理,然后根据配置文件的指定描述由ActionServlet转发给其它组件。Struts框架只允许一个应用配置一个ActionServlet类,在应用程序的生命周期中仅创建ActionServlet类的一个实例,这个实例可以同时响应多个请求。
(4) ActionMapping组件
ActionMapping对象,顾名思义就是Action映射对象,它帮助控制器进行框架内部的流程控制。ActionServlet是控制器任务的具体执行者,ActionMapping则为ActionServlet 指明了具体执行路线,是Struts 体系结构的具体体现者。Struts-config.xml 是一组响应用户请求的ActionMapping对象集合,每一个用户请求都有一个ActionMapping对象与之相对应。它需要应用开发者配置与用户请求相对应的ActionForm数据属性、是否需要进行数据校验和回写、Action 数据处理、输入页面、以及处理完成后可能跳转的页面等一组属性信息,这组属性信息构成一个ActionMapping对象,它决定了该项请求的处理过程。
(5) Action组件
所有Action类都是org.apache.struts.action.Action扩展类,是用户请求和业务逻辑之间的桥梁,每个Action可以充当一项业务代理。它是Struts应用程序开发的核心, 控制着应用程序的流程,它接收ActionForm类的用户请求数据,根据请求数据调用相应的模型来处理业务逻辑,并根据处理结果指明应用的流向,Action类应该是控制应用程序的流程,而不是控制应用程序的业务逻辑,所以通常将业务逻辑放在JavaBean 或EJB中处理,这样就可以为WEB应用提供更大的灵活性和重用性。
(6) ActionForm组件
ActionForm类是org.apache.struts.action.ActionForm扩展类,程序开发人员为每个JSP页面的表单都创建的一个ActionForm Bean, 以维护Web 应用程序的会话状态,但一个ActionForm可以对应多个表单, 具有很好的重用性。它要求为表单中出现的每个字段定义一个属性,是视图与模型进行数据交换的桥梁。使用它的目的是为了存储用户在相关表单中输入的数据,在数据校验通过后,由控制器传送给相应的模型进行业务逻辑操作,同时在数据校验失败后,将同一网页进行再生,并提供一组错误信息,这样就可以让用户只修改错误的输入数据。
2.2 Hibernate概述
在当今的企业级应用开发中,面向对象的开发方法已经成为主流,但是在数据库的应用方面关系数据库仍然是主流,它是非面向对象的,并且关系数据库技术已经发展得相当成熟,占据了数据库市场90%以上的份额,对象数据库的普及尚需时日,所以本文有必要对关系数据库进行封装,使之成为可以操纵的对象。而且在Struts框架下的三层结构:表示层、业务逻辑层、数据层,这样的划分虽然是非常经典的,但是在实际项目中,往往会对三层体系结构做一些扩展来满足目的需要。一个最常用的扩展就是将三层体系扩展为四层体系,即表示层、控制层、业务逻辑层、数据持久层。这就是将数据持久单独作为一个体系层提出来,使之成为Java应用和关系数据库之间的桥梁。数据持久层就是在对象-关系数据库之间提供一个成功的企业级别的映射解决方案,尽最大可能弥补这两种范例之间的差异。
转贴于 酷文网-论文下载中心 http://www.coolwen.net
共13页: 上一页 [1] 2 [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
网摘收藏: