基于MVC模式的WEB开发框架研究
基于MVC模式的WEB开发框架研究
摘要: MVC设计模式是基于J2EE的Web应用开发的首选模式,当前许多流行的框架也都是基于MVC设计模式的。本文介绍了MVC设计模式的结构和优缺点,然后介绍了Sun公司提出的再Java Web开发领域的两种规范:JSP Model1和JSP Model2、接着介绍了Struts实现MVC的机制,并在此基础上提出了一种基于MVC模式的新型WEB应用开发框架——WebFramework,并对该框架的各个层次的组成、功能进行了详细的描述。
关键词: MVC设计模式;J2EE;Struts;WebFramework
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,同样实现了父类的一些虚方法。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步