基于MVC模式的WEB开发框架研究

基于MVC模式的WEB开发框架研究

 

摘要: MVC设计模式是基于J2EE的Web应用开发的首选模式,当前许多流行的框架也都是基于MVC设计模式的。本文介绍了MVC设计模式的结构和优缺点,然后介绍了Sun公司提出的再Java Web开发领域的两种规范:JSP Model1和JSP Model2、接着介绍了Struts实现MVC的机制,并在此基础上提出了一种基于MVC模式的新型WEB应用开发框架——WebFramework,并对该框架的各个层次的组成、功能进行了详细的描述。

 

 

关键词: MVC设计模式;J2EE;StrutsWebFramework

1引言

模型、视图和控制器即 MVC 模式是在Smalltalk-80 中使用的一种软件设计模式,这种模式在应用到Web 开发中,也就是SUN 公司的Model2 架构,在很多场合这两个词交互使用。既然说到了MVC 模式,我们不得不提Struts 框架体系结构,众所周知,它是MVC 的一种很好的实现。Struts 框架的核心是一个MVC 风格的控制器,搭起了模型和视图之间的支柱桥梁。

随着开源软件的兴起,各种框架也纷纷出现,在实际软件开发中运用这些框架,大大降低了J2EE开发的复杂度和难度,降低了开发成本。但是这些框架也有不足的地方,如难于掌握,配置复杂等等。本文研究的目的在于设计出一种简单易行的WEB开发框架——WebFramework,WebFramework结构清晰,易于理解,增加系统的可扩展性,可维护性,降低开发成本。

2 MVC概述

MVC模式是"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"。MVC是Xerox PARC在20世纪80年代为编程语言SmallTalk-80发明的一种软件设计模式,至今已被广泛使用,最近几年被推荐为Sun公司J2EE平台的设计模式,受到越来越多的Web开发者的欢迎。

 MVC设计模式

MVC是一种设计模式,她强制性地把应用程序的输入、处理和输出分开。MVC应用程序总是由这三个部分组成:模型、视图和控制器,它们分别担负不同的任务。图2-1 显示了这几个模块各自的功能以及它们的相互关系。

 

                               

Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。

3基于Struts 框架的Web系统的应用

Struts是Apache基金会Jakarta项目组的一个Open Source项目,它将Servlet2.2和JSP1.1标记用作实现的一部分,它由一组相互协作的类、servlet和JSP标记,组成一个可重用的系统设计。它能够很好地帮助Java开发者利用J2EE开发WEB应用。它将设计模式中“分离显示逻辑与业务逻辑”的能力发挥的淋漓尽致。因此,越来越多的大型的WEB应用项目的开发都纷纷采用Struts框架,或者借鉴Struts架构设计,进行基于MVC模式的应用系统的开发。

3.1 Struts 如实现MVC 模式

Struts提供了一个控制器Servlet类ActionServlet来实现MVC模式,用来管理JSP页面和其他表现层组件之间的流程控制。在表现层之外,Struts通过使用类ActionForward和ActionMapping的控制流决策来实现MVC控制层模式。下面我们就列举Struts的几个核心类并简要说明一下这些类是如何对应MVC的组件职责。

ActionServlet:实现控制器功能,接受用户请求和状态改变以及发出视图选择。

Action:控制器的一部分,与用户业务模型进行交互,执行状态改变或查询,以及告诉

ActionServlet:下一个要选择的视图。

ActionForm:显示模块的数据。

ActionForward:用户指向或者视图的选择。

ActionMapping:帮助控制器将请求影射到操作。

3.2 Struts 框架在Web 系统中的实现

在 Web 系统中,我们根据自己的需要主要继承了Struts 的ActionForm 类、Action类,以及使用了一些Struts 的视图标签。JSP 页面表示视图层,ActionForm、InitAction 和EventAction 组件来自于控制层,而各个具体的InitHandler和EventHandler 用于业务模型层。在系统实际开发过程中,我们力求各个业务逻辑独立开发,相互间互不影响,也就是达到系统的松散耦合性。现在我们就图-1 说明一下各个组件的作用和之间的交互。

JSP 页面:控制页面输出,接收来自ActionForm 的数据。

ActionForm 子类:继承Struts 的ActionForm 类,纪录从页面取得或将要显示到页面的数值,作为参数在控制层和模型层之间传递。

InitAction 类:用于初始化各个页面,每个页面都对应一个具体的InitAction 子类,实现父类

InitAction 的一些方法,关于InitAction 类和这些方法如何实现我们将在下面介绍。

EventAction 类:定义了各个页面上的事件操作,每个页面对应一个具体的EventAction 子类,对于父类EventAction 类我们也在下面内容中介绍。

InitHandler 类:实现初始化页面的业务处理,InitHandler 类定义了一下共同的操作和一些虚方法,而具体的InitHandler 则来实现这些虚方法。

EventHandler 类:实现页面上的事件处理,每个页面对应一个或多个EventHandler 子类,这些类继承父类EventHandler,同样实现了父类的一些虚方法。

 

posted on 2020-05-14 13:04  哈弗h6  阅读(550)  评论(0编辑  收藏  举报

导航