您的当前位置:首页正文

基于Java的MVC框架结构与实现

来源:个人技术集锦
维普资讯 http://www.cqvip.com 北京石油化工学院学报 第14卷第1期 Vo1.14 NO.1 2006年3月 Journal of Beij ing Institute of Mar.2006 Petro—chemical Technology 基于Java的MVC框架结构与实现 张世博 周树杰 闵 艳 (北京石油化工学院计算机系,北京102617) 摘 要MVC框架结构是一种有效的开发模式,可以有效的分离数据表现和数据访问,利 用可伸缩的控制器来维护整个流程。通过概括MVC特点,对其作较深入的讨论,介绍了基于Java的 MVC实现方法,尤其具有共性的核心控制器的编写方法,实现了自定义的一种MVC框架结构,并与开 源项目Struts进行了对比。在实际应用中,该MVC框架良好支持了项目开发。 关 键 词MVC;框架结构;软件设计模式 中图法分类号TP311.52 开发一个企业级的应用项目时,如果只有 (2)View为表示层,又称人机界面层,显示 一种客户端,则很容易解决,但存在各种终端 应用的状态。 时,如WAP、PDA或PC桌面浏览器,必须开 (3)Controller为控制器,处理用户输入、 发不同的应用程序处理来自不同客户端的请 设备和程序间的交互。 求,这样可能会出现重复的数据访问,导致开发 周期的延长。在这种情况下,MVC(Model View Controller,缩写为MVC)被提了出来,它 是一种应用软件开发框架,并且得到了越来越 多的应用。虽然有成型的开源项目Struts以 及基于Ruby语言的Rails模型可以使用,但是 其配置繁琐,Struts的Taglib属于开源项目的 自定义标记库,不一定适合所有开发者的要求, 图1 MVC工作流程 因此寻求一套适用的MVC框架就有了必要, 1.2 应用功能层、表示层和控制器之间的关系 笔者在设计开发物流系统时,针对不同访问方 这三者之间的关系: 式,设计了一套更为适用的MVC框架结构。 (1)Controller—Model:Controller根据输 1 MVC框架 入,创建特定的Model,并传递必要参数。 Model获取数据并进行处理。 MVC最初是为Smalltalk语言而设计的, (2)Controller—View:Controller根据输 其主要思想是面向对象的设计方法,将用户界 入以及Model的输出,选择显示方式,同时要 面与程序本身隔离,利用控制器来维护整个 将Model的引用或Model产生的数据或对象 流程。 的引用传递给View。 1.1 MVC框架组成 (3)View—Model:Model负责数据获取和 MVC框架主要包括三部分: 处理,View可以直接从Model获取数据,在一 (1)Model为应用功能层,负责数据处理, 定的条件下,Model也可以通过View更新数 执行请求的操作。 据,这种情况在Web应用中很少见。 收稿日期 2005—09—09 维普资讯 http://www.cqvip.com 第1期 张世博等.基于Java的MVC框架结构与实现 11 2基于JAVA的MVO框架 (1)定义REQUEST—NAME:含义为执行 动作的类别,包括: MVC是一种应用程序开发框架,不依赖 ①登录(Login); 于具体的开发语言,但是对于不同的语言,其具 ②注销(LogOut); 体的实现方式是不同的。下面介绍基于JAVA ③页面直接跳转(GeneralHandler)(无业 语言的开发方法,如图2所示,因为MVC框架 务逻辑处理); 本身的开发特点(针对多用户界面),所以基于 ④页面跳转(ReDirect)(经业务逻辑处 JAVA语言的MVC框架应用更具有代表性。 理)。 在整个框架中,如何设计一套灵活的控制 (2)定义BusinessLogicName:含义为处理 机制是最至关重要的,至于页面显示和业务流 具体某个业务逻辑的程序名称。在MVC框架 程则针对不同的应用有不同的表现形式,而控 结构上主要表现为MODEL。 制器则有比较大的雷同性,以下首先给出在模 (3)定义JSP—RESPONSE:含义为要显示 块中所定义的控制参数的含义,然后简要给出 给客户端浏览的界面。 核心控制器的控制实现方法。 /页面参数 sERVLET控制器处理卜—= 面UEST_NAM ̄ —\—/ 户端显亲 调用Model rt用户登录信息处理l ::: 模块,执行 .・. …。 、、 ...........................— / ,BusinessLogic 生成REQUEST例_NAMEI"Re D irec t-程序实卜|1G ralHdl。. 图2基于JAVA的MVC框架流程 在应用中,控制器表现为Servlet,业务逻 HandlerProxy{ 辑表现为Java Beans,视图表现为JSP或HT— public void handleRequest(servlet, MI 或WMI 等。下面是控制器的实现方法: request,response,session){ Public class CoreControl1er extends Ht— Hashtable requestParams== tpServlet{ getRequestParameters(request); ……//系统初始化 public abstract void processRe— public void doGet(……){processRe— quest(requestHandler,params)throws Ex quest(request,response)} ceptlo private void processRequest{ final String requestName—request.・ } getParameter(REQUEST_NAME); 针对不同的REQUEST—NAME,processRe— ……//以下继续取得BusinessI ogic— quest生成不同的执行动作程序实例 Name,requestParams等参数 对于REQUEST_NAME值为I.ogin: (;lass C===Class.forName(request— final BusinessI ogic login—getBusi— Name); nessI ogic(”Login”); RequestHandler rh===(Request login.process((HandlerProxy)me,pa— Handler)C.newlnstance();//生产执行动作程 rams); 序的实例 对于REQUEST—NAME值为Logout: rh.handleRequest(this,request,re— session.invalidate(); sponse,session); 对于REQUEST—NAME值为GeneralHan— } dler: > final String requestName—params.get public class Requst Handler implements (”BusinessLogicName”).toString(); 维普资讯 http://www.cqvip.com 12 北京石油化工学院学报 2006年第14卷 final BusinessLogic bizLogic—getBusi— (4)由于分离了模式中的流控制和数据表 nessLogic(requestName); 现,可以分清开发者的责任,加快了开发进度。 bizLogic.process((HandlerProxy)me, 利用MVC开发模式必须着重注意以下几 params); 点:第一、相关功能分解实现模块化。第二、代 对于REQUEST—NAME值为ReDi ̄rect: 码和设计重复利用。第三、兼容不同终端类型 final Hashtable requestParams==ge— 的用户界面。 tRequestParameters(request); 在系统开发过程中,如何明确的界定 final String url—requestParams.get(” Model,View,Controller三者之间的界限,使 JSP—RESPONSE”).toString(); 它们之间耦合度最小,是要着重考虑的问题。 servlet. getSerVletContext ( ). ge— 比如说在界面上输入了一堆信息后,应该 tRequestDispatcher(ur1).forward(request, 有一个数据结构来存放,Controller是仅仅把 response); 这个结构送给Model处理呢?还是自己直接 经过上面的程序流程,当应用程序根据页 对它分析?如果是直接把数据做成包送给 面参数生成了特定的REQUEST—NAME实例 Model,那么,当屏幕设计涉及到数据结构的变 后,开始执行相应的BusinessLogic,这些Busi— 化时,这个改动就通过变动后的参数包波及到 nessLogic可以是登录操作、注销操作、业务数 Model,这种形式上的逻辑与界面分离不友好, 据的分析处理过程,还可以是页面直接跳转操 因为Controller和Model的关系本质上并没有 作。 解耦,设计更改过程还要在两处奔波。在第二 当在程序执行过程中,完成Controller的 种情况下,Controller自己直接处理用户输入 逻辑后,开始调用具体的BusinessLogic逻辑, 的数据,把必要的数据按Controller—Model接 也就是MVC中的Model模块,Model模块的 口要求的格式重新组装,与Model交互,返回 编写就完全依据业务逻辑需要了,当业务逻辑 业务约束处理后的结果,再作下一步打算,要是 完成后,就需要返回处理结果数据给客户端,具 这样,那么Controller的职责变得有些模糊不 体的客户端显示由Controller根据JSP—RE— 清,因为它承担了MVC概念中Model职责的 SPONSE进行控制。 一部分业务规则验证工作,必须了解业务逻辑 至此,完成一次完整的用户逻辑操作。在 的输入数据结构。以便于把输入数据重新组 这个过程中,首先由客户端的页面(VIEW)提 合,这种了解出现两个问题:一是与Model的 交操作要求,由核心控制器(Controller)完成参 解耦不彻底;二是Controller所承担的前期的 数解析,调用相应的业务逻辑(BusinessLogic) 部分业务规则,在处理这种问题的时候,有个考 完成页面的数据处理要求,并返回数据给页面 虑限度,如何界定,需要在程序设计开发的时候 (View)。 具体问题具体分析。 3 MVC框架的特点及需要考虑的 4 结论 问题 阐述了MVC框架模型,它与“数据、逻辑、 上面的介绍中,之所以可以对业务系统按 表示”三层结构的不同之处如下: 照不同的角色、模块来划分,正是由MVC开发 (1)应用可以根据具体请求来选择业务模 模式的特点所决定的,由它的特点可以得出 式和显示方式。最典型的例子是:相同的服务 MVC的应用要点: 请求来自不同类型的终端设备,例如PC和 (1)MVC结构适用于多用户的、可扩展 wAP设备。这两个服务请求是要求访问相同 的、可维护的、具有很高交互性的系统。 的业务逻辑,因此产生一致的数据输出,但是输 (2)MVC可以很好的表达用户的交互和 出页面是不同的,一个针对PC,一个针对 系统模式。 WAP。 (3)很方便的用多个视图来显示多套数据, (2)Controller根据输入选择相同的Mod— 使系统很方便的支持其他新的客户端类型。 el,可能产生结构相近、内容不同的数据。这时 维普资讯 http://www.cqvip.com 第1期 张世博等.基于Java的MVC框架结构与实现 13 候Controller可选择相同的显示方式达到 发基于MVC应用的难度,而MVC框架则降 View的共享,这是三层结构所做不到的。 低了开发门槛。 (3)对应用来说,Controller控制了整个 (2)页面导航是Struts的另一个优点,使 web应用的流程,它可以控制产生不同的输 系统的脉络更加清晰,容易把握整个系统各部 出。 分之间的联系,这对于后期的维护有着莫大的 通过对比发现,MVC结构最大的优点在 好处,针对此特点,MVC框架结构距其尚有差 于不同终端设备的业务逻辑程序的共享性上, 距。 减少了重复逻辑的开发。而且由于系统进行了 在开发物流调度信息系统时,应用了此 不同角色的划分,明确了不同开发者的任务,使 MVC框架设计,良好的划分了模块,有效的支 系统开发并行前进,加快了开发速度。MVC 持多人协作开发,最大程度的支持了多种访问 的最直接的应用就是现在的Web Application。 终端,提高了开发效率。 前端(View)是不同类型的用户界面,如Web Browser(HTMI ,WML等格式)或客户端应用 参考文献 程序。后端(Mode1)就是和BusinessLogic密 切相关的数据。Servlet解决了如何根据不同 E1]Paul J.Perrone.J2EE构建企业系统[M].张志伟 的要求对相同的数据达到不同的显示效果 控 等译.北京:清华大学出版社,2001;6. 制数据间的约束关系。 [2] 尹汉东,任邵东,周生炳.基于J2EE的weh应用 此MVC框架与现在流行的Struts结构对 的MVC架构实现[J].计算机仿真,2004(ii): 比,二者的优缺点主要集中体现在两个方面: 133 137. [3]饶一梅等.软件设计模式及其在Java类库中的典 (1)Taglib是Struts的标记库,灵活运用 型实现_J].计算机工程与应用,2002(4):48—5o. 能大大提高开发效率。但是也正因为此,对初 学者而言,需要一个持续的学习过程,加大了开 Design of MVC Framework Based on Java Zhang Shibo Zhou Shuj ie Min Yan (Department of Computer Science,Beij ing Institute of Petro-chemical Technology,Beijing 102617) Abstract MVC is an important architecture in software development.This paper introduces"the concept of MVC,outlines the key technology of Java that relates to MVC,and implements the MVC framework.Especially the Controller is introduced in detail,and a self defined MVC iS ac— tualized.The experimental results show that this MVC can effectively enhance the development of proj ect in application. Key words MVC;architecture;design patterns 

因篇幅问题不能全部显示,请点此查看更多更全内容