APP下载

基于MVC设计模式的Struts框架研究

2015-01-02陈星王宁吴特杨东

科技视界 2015年1期
关键词:监听视图框架

陈星王宁吴特杨东

(中国矿业大学〈北京〉机电与信息工程学院,中国 北京 100083)

0 引言

MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。并且由于其鲜明特点,广泛受到程序开发人员的青睐。使用MVC模式的目的是实现一种动态的程式设计,使之简化对后续程序的修改和扩展,并且可以重复利用程序的某一部分。而基于MVC模式的Struts框架,可以将问题进行划分,成为一个个的小模块,这样使得问题更容易得到解决,系统结构更加清晰,另外当问题发生变化或者当技术有所改变时,我们可以进行代码重用,这能够极大的提高开发人员的开发效率。所以基于MVC模式的Struts框架非常适合开发大型的复杂系统。本文详细介绍了MVC模式的基本思想,以及Struts框架的体系结构。

1 MVC模式概述

1.1 MVC架构

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。模型(Model):就是业务流程/状态的处理以及业务规则的制定。视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,完成用户的请求。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如图1所示。

图1 MVC模型

1.2 MVC模式的优势与不足

MVC能够被众多的web应用系统作为主流框架,主要原因在于它具有巨大而众多的优势,这主要体现在下面几个方面。

(1)MVC可以让一个正在运行着的模型,同时建立和使用多个视图,并且,MVC中具有一种特殊的机制,那就是内置数据监听机制,依靠观察者模式,这种机制可以监听模型层数据的更新,并且能够同步将视图层的数据进行更新,以此来实现同步响应。

(2)在视图和控制器之间,是相互透明和独立的。这种特点,可以让开发人员根据需要来动态的定制控制器和视图之间的关联关系,以此开发相对复杂的应用系统。同样因为视图和模型之间是相互独立、分别存在的,所以如果在做跨平台的系统移植时,把一个模型单独移植到新的平台进行工作就会相对比较简单。我们仅仅需要在新的平台上将视图重新设计,并且重新运行控制器。

(3)由于MVC是一种思想,是一种潜在框架结构,因此我们可以在此模型的基础上建立客制化的应用框架,以此来满足客户的个性化需求。

虽然MVC具有很多的优点,但是也有一些不足的地方,例如,使得系统结构更加复杂,从而增加了实现的难度。此外,MVC适用于相对规模比较大的系统,如果系统实现的功能结构相对比较简单,那么如果严格遵循MVC模式,反而会使得系统结构复杂度增加,并且还有可能由于进行跟多的更新操作,导致系统运行效率降低。另外,视图与控制器之间的耦合性过强。虽然在理论上,视图与控制器之间是相互分离的,但是在实际的应用中,视图和控制器之间的耦合性还是比较强的。如果视图中没有控制器的话,那么他的应用将会非常有限,反之亦然。这种强耦合阻碍了组件的独立复用。还有,视图通过模型界面访问数据的效率很低,这是由于在模型层中提供的接口是不相同的,因此视图为了获得足够多的显示数据,往往需要进行多次调用,这种方式访问数据的效率比较低,并且对系统操作性能也有一定的影响。

综上所述,通过对MVC模式的分析,可以看出MVC模式的作用是很明显的,并且在大的系统结构中作用会更加明显。

2 MVC模式基本实现方法

实现MVC模式的方法不止一种,例如使用Struts或jsf等MVC模式的框架,本身就是一个实现。下面主要来介绍一种简单的基本实现方法。

2.1 Model的实现

在Model的实现过程中,最关键的地方在于定义一个具有存储多个数据更新的用的监听对象向量。并且根据这个向量可以编写出下面的两个函数,以此来分别实现添加数据业务时监听对象的添加和发生更新时能及时把消息发送给所有的监听对象:

//当注册模型发生修改时需通知的对象

//将变化通知队列中的每个视图

2.2 View的实现

在视图的实现过程中,关键的地方有三点。第一点是我们在进行视图构造函数时,需要将视图注册到指定的模型对象中去(model addChangeListener(view));第二点需要做的就是定义一个能够存放和它所关联的控制器对象的向量,并且我们需要根据这个向量的对象,定义增加动作监听者的注册方法 (public void addUserGestureListener(Controllerb));最后,我们还得需要为视图编写一个能够依靠传入对象的类型来显示不同的界面的方法。通过上面所说的三个关键点,视图就能够实现接收模型更新的通知、发送动作到控制器,并且能够接受控制器对显示界面的控制。

2.3 Controller的实现

相对于模型的实现和视图的实现,控制器的实现要简单很多。因为对于控制器来说,只需定义一个模型对象和视图对象就能能实现。模型对象是为了方便在函数中进行调用其业务的行为,视图对象是为了方便于将控制器的动作注册到视图中去,使他们可以成为该视图的动作接收者。

3 基于MVC模式的Struts框架

所谓的基于MVC模式的STRUTS框架,实际上就是把JavaServlet、JSP、 自 定 义 标 签 (TagLib)、JavaBeans、XML和 信 息 资 源(Resource Bundles)整合到一个统一的框架中,由此组成了一个可复用的MVC设计。Struts框架本身带有自己的控制器,同时还整合了其它的一些能够实现模型层和视图层的技术,而且,Struts框架提供了许多可供扩展和定制的地方。同时,Struts提供自定义标记库,通过这些自定义标记可以顺利完成和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,以此来完成对用户数据的封装。图2显示了Struts的工作流程。

图2 struts的工作流程图

(1)Struts框架总控制器(ActionServlet),作用是用来完成所有初始化工作。当启动总控制器之后,首先会读取Struts-config.xml的配置信息,目的是为相应的对象进行不同的Struts模块初始化。当在Web容器启动时,初始化动作也会自动完成,总控制器完成初始化动作后,将通过URL匹配映射截获所有以.do结尾的URL请求。

(2)用户向Web应用程序器提交一个请求的方法有两种,一种是提交表单,另一种是调用URL,而用户请求的数据会通过HTTP协议上传给Web服务器。

(3)控制器接收HTTP请求,然后控制器首先会通过ActionConfig找出对应该请求的Action子类,如果没有找到对应的Action,控制器直接会把请求转发给JSP或者静态页面。如果有对应的Action,并且这个Action有一个相应的ActionForm,ActionForm首先会被控制器实例化,然后会使用HTTP请求的数据来填充其属性,然后保存在ServletContext中,这样就可以被其它Action对象或者JSP调用。

(4)控制器根据配置信息将请求切换到具体的ActionFormBean也一并传给这个Action的execute()方法。

(5)Action一般其中只包含一个execute()方法,它的作用是负责执行相应的业务逻辑,然后会返回一个ActionForward对象,控制器会通过这个ActionForward对象来进行转发工作。

(6)根据业务处理时产生的不同结果,Action会返回一个目标相应对象给总控制而这个目标相应对象对应的是一个具体的JSP页面或者另外一个Action。

(7)总控制器根据业务功能Action返回的目标响应对象,将HTTP请求转换到这个目标响应对象中,通常来说,它是一个具体的JSP页面。

(8)目标响应对象(JSP)将结果页面展现给用户。

4 结论

综上所述,MVC模式已经被广泛的应用于软件开发之中,它可以通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。而使用基于MVC模式的Struts框架极大的提高了控制层的灵活性,增加了代码的可重用性。并且由基于MVC模式的Struts框架构建的复杂系统可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强、便于扩展的控制器,来维护整个流程。因此在结构复杂的系统中基于MVC模式的Struts框架有着很大的优势和发展前景。

[1][美]Ivor Horton.Java 2 入门经典 JDK5[M].潘晓雷,于浚泊,王丹,等,译.北京:机械工业出版社,2005:1-1058.

[2]赖英旭,刘增辉,李毛毛.MVC模式在B/S系统开发中的应用研究[J].微计算机信息,2006,22(10-3):62-64.

[3]孙卫琴.精通 Struts:基于 MVC 的 Java Web设计与开发[M].北京:电子工业出版社,2004,8:7-35.

[4]菜剑,景楠.Java Web 应用开发:J2EE 和 Tomcat[M].2 版.北京:清华大学出版社,2005,1:35-250.

[5]孙卫琴,李洪成.Tomcat与 Java.Web开发技术详解[M].北京:电子工业出版社,2004,4:29-134.

[6]殷兆麟,张永平,姜淑娟.Java 网络高级编程[M].北京:清华大学出版社,北京交通大学出版社,2005,5:94-235.

[7][美]Marco Pistoia,Nataraj Nagaratnam,等.企业级 Java 安全性:构建安全的J2EE应用[M].尹亚,明喻卫,严进宝,译.北京:清华大学出版社,2005,3:72-109.

猜你喜欢

监听视图框架
千元监听风格Hi-Fi箱新选择 Summer audio A-401
广义框架的不相交性
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
网络监听的防范措施
WTO框架下
应召反潜时无人机监听航路的规划
一种基于OpenStack的云应用开发框架
局域网监听软件的设计