前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇mvc框架范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
(中国矿业大学〈北京〉机电与信息工程学院,中国 北京 100083)
【摘要】一个好的设计模式能够有效地建立系统结构,降低系统复杂度。模型-视图-控制器(mvc)就是一个框架级的设计模式,它可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强的、便于扩展的控制器,来维护整个流程。本文在介绍了MVC模式的发展、概念以及实现的基础上,详细介绍了MVC模式在Struts框架中的具体应用。
关键词 MVC模式;Struts框架;应用研究
0引言
MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。并且由于其鲜明特点,广泛受到程序开发人员的青睐。使用MVC模式的目的是实现一种动态的程式设计,使之简化对后续程序的修改和扩展,并且可以重复利用程序的某一部分。而基于MVC模式的Struts框架,可以将问题进行划分,成为一个个的小模块,这样使得问题更容易得到解决,系统结构更加清晰,另外当问题发生变化或者当技术有所改变时,我们可以进行代码重用,这能够极大的提高开发人员的开发效率。所以基于MVC模式的Struts框架非常适合开发大型的复杂系统。本文详细介绍了MVC模式的基本思想,以及Struts框架的体系结构。
1MVC模式概述
1.1MVC架构
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。模型(Model):就是业务流程/状态的处理以及业务规则的制定。视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,完成用户的请求。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如图1所示。
1.2MVC模式的优势与不足
MVC能够被众多的web应用系统作为主流框架,主要原因在于它具有巨大而众多的优势,这主要体现在下面几个方面。
(1)MVC可以让一个正在运行着的模型,同时建立和使用多个视图,并且,MVC中具有一种特殊的机制,那就是内置数据监听机制,依靠观察者模式,这种机制可以监听模型层数据的更新,并且能够同步将视图层的数据进行更新,以此来实现同步响应。
(2)在视图和控制器之间,是相互透明和独立的。这种特点,可以让开发人员根据需要来动态的定制控制器和视图之间的关联关系,以此开发相对复杂的应用系统。同样因为视图和模型之间是相互独立、分别存在的,所以如果在做跨平台的系统移植时,把一个模型单独移植到新的平台进行工作就会相对比较简单。我们仅仅需要在新的平台上将视图重新设计,并且重新运行控制器。
(3)由于MVC是一种思想,是一种潜在框架结构,因此我们可以在此模型的基础上建立客制化的应用框架,以此来满足客户的个性化需求。
虽然MVC具有很多的优点,但是也有一些不足的地方,例如,使得系统结构更加复杂,从而增加了实现的难度。此外,MVC适用于相对规模比较大的系统,如果系统实现的功能结构相对比较简单,那么如果严格遵循MVC模式,反而会使得系统结构复杂度增加,并且还有可能由于进行跟多的更新操作,导致系统运行效率降低。另外,视图与控制器之间的耦合性过强。虽然在理论上,视图与控制器之间是相互分离的,但是在实际的应用中,视图和控制器之间的耦合性还是比较强的。如果视图中没有控制器的话,那么他的应用将会非常有限,反之亦然。这种强耦合阻碍了组件的独立复用。还有,视图通过模型界面访问数据的效率很低,这是由于在模型层中提供的接口是不相同的,因此视图为了获得足够多的显示数据,往往需要进行多次调用,这种方式访问数据的效率比较低,并且对系统操作性能也有一定的影响。
综上所述,通过对MVC模式的分析,可以看出MVC模式的作用是很明显的,并且在大的系统结构中作用会更加明显。
2MVC模式基本实现方法
实现MVC模式的方法不止一种,例如使用Struts或jsf等MVC模式的框架,本身就是一个实现。下面主要来介绍一种简单的基本实现方法。
2.1Model的实现
在Model的实现过程中,最关键的地方在于定义一个具有存储多个数据更新的用的监听对象向量。并且根据这个向量可以编写出下面的两个函数,以此来分别实现添加数据业务时监听对象的添加和发生更新时能及时把消息发送给所有的监听对象:
//当注册模型发生修改时需通知的对象
public void addChangeListener(View cv) throwsException{
//** 1添加cv到变化监听队列
changeListeners. add(cv);
}
//触发模型变化事件
private void fireModelChangeEvent(Objectf){
View V;
for ( int i=0; i<changeListeners. size(); i++){
try {
//将变化通知队列中的每个视图
System. ou.t println(dMode:l fireModelChangeEvent loopd+i);
v=(View)changeListeners. get( i);
v. handleChange(f);
}catch(Exception e){
System out println(e toString());
}
}
}
2.2View的实现
在视图的实现过程中,关键的地方有三点。第一点是我们在进行视图构造函数时,需要将视图注册到指定的模型对象中去(model addChangeListener(view));第二点需要做的就是定义一个能够存放和它所关联的控制器对象的向量,并且我们需要根据这个向量的对象,定义增加动作监听者的注册方法(public void addUserGestureListener(Controllerb));最后,我们还得需要为视图编写一个能够依靠传入对象的类型来显示不同的界面的方法。通过上面所说的三个关键点,视图就能够实现接收模型更新的通知、发送动作到控制器,并且能够接受控制器对显示界面的控制。
2.3Controller的实现
相对于模型的实现和视图的实现,控制器的实现要简单很多。因为对于控制器来说,只需定义一个模型对象和视图对象就能能实现。模型对象是为了方便在函数中进行调用其业务的行为,视图对象是为了方便于将控制器的动作注册到视图中去,使他们可以成为该视图的动作接收者。
3基于MVC模式的Struts框架
所谓的基于MVC模式的STRUTS框架,实际上就是把JavaServlet、JSP、自定义标签(TagLib)、JavaBeans、XML和信息资源(Resource Bundles)整合到一个统一的框架中,由此组成了一个可复用的MVC设计。Struts框架本身带有自己的控制器,同时还整合了其它的一些能够实现模型层和视图层的技术,而且,Struts框架提供了许多可供扩展和定制的地方。同时,Struts提供自定义标记库,通过这些自定义标记可以顺利完成和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,以此来完成对用户数据的封装。图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.
【关键词】mvcjava应用程序框架实践探索
一、框架的设计
1、设计目标
设计目标是完成应用程序通用的部分,这样程序员就可以将自己的精力和注意力放在具体程序的业务逻辑上,而和业务逻辑没有关系的部分就可以被忽略。框架使用的是MVC模式,该模式可以把数据的显示和数据分开。对于程序员来说,其工作就是把核心数据放到表示数据的类之中,此外将相应的方法添加到其中。从本质上将,框架属于完整的程序,因此其运行不需要添加一行代码。关于框架支持的应用程序的分类:(1)单文档单视图。也就是说在应用程序中存在一个文档。此外,只有一种类型的一个视图。(2)多文档类型。在同一个应用程序实例中,应用程序可以将多个文档框架窗口打开。
2、MVC 模式的使用
之所以使用MVC 模式,是因为其具有以下优点:(1)MVC 模式和该框架的设计目标相符。(2)可以建立和使用多个视图。(3)视图与控制器的可接插性。(4)模型的可移植性。(5)MVC模式有很多的应用,比如:java的可视化组件就对其进行了使用。
3、类的划分
应用程序框架中的类主要包括以下几个方面:应用程序类、文档类、视图类、子框架窗口类、事件类、框架窗口类、状态栏类、工具栏类、菜单栏类等。
4、类之间的关系
文档类,视图类和控制类之间的关系如图1所示。
图1 文档类、视图类和控制类之间的关系
应用程序类和文档管理类的关系见图2。
图2应用程序类和文档管理类的关系
视图类和子框架窗口类的关系见图3。
图3 视图类和子框架窗口类的关系
二、框架中消息流程
命令消息的流程。框架中的命令消息分为:数据操作命令消息和框架命令消息两类。框架命令消息:在原始框架中,有新建文档命令,将文档命令打开,对文档命令进行保存,另存文档命令和退出程序命令。数据操作命令消息:消息流程是:用户操作控制类对象框架窗口子框架窗口视图文档视图。
"激活"消息流程。一定要让视图的视觉状态和在框架中真实状态一致。当视图处于活动状态时,需要满足以下几个条件:(1)视图处于接受操作的状态。(2)和视图有关的子框架窗口处于活动状态。(3)文档管理器表示活动文档的成员指向该文档。激活"消息的传送流程设计见图4。
图4"激活"消息的传送流程设计
1、模板功能的实现
可以生成某个类实例的对象就是模板。一个模板可以生成若干个对象,也可以只生成一个对象。模板功能的实现思路:程序员需要先创建一个类的对象,之后将其注册到框架。在需要时,框架对该对象进行使用,这样就可以生成其他对象。
2、文档类的实现
文档类对数据的公共操作包括:新建文档,打开文档,另存文档,保存文档操作,关闭文档操作。文档数据的存取。文档类型不同,那么其中的数据也就有差异。因此,还没有一种方法把全部种类的文档的数据序列化到文件,因此需要提供这两个抽象接口。
3、视图类的实现
视图类的方法有:视图更新方法,接受激活消息的方法,关闭视图类实例的方法。此外,视图必须捕获激活事件。
视图类子类XxView的设计。第一步对父类的构造函数进行调用,第二步对数据成员变量、可视化组件实施初始化,最后把这些组件添加到视图之中。需要实现的方法是ViewMvc getInstance().
4、 文档管理类的设计
文档管理类可以被分为两类:(1)仅仅用于单文档模式,这一类只管理一个文档。(2)用于多文档模式。这一类可以管理多个文档。
文档管理类基类 DocumentManager的设计。面对对象理论主要强调的是针对接口进行编程,这样做对于系统的扩展和维护是十分有利的。在文档管理类的设计中使用该原则的目的是让单文档管理器和多文档管理器的差异对于框架透明。我们可以可以提取这两种管理器的共同操作,因此就可以形成一个接口。对这个接口我们命名为:DocumentManager。DocumentManager有:(1)新建文档接口。文档管理器主要对文档进行管理,比如:销毁、创建以及初始化等。因此,框架处理用户的"新建......"命令时,需要调用文档管理器的新建文档接口。(2)打开文档接口。文档的打开可以说是文档创建的一种方式,因此框架在响应用户"打开......"命令时,也会把这一任务交给文档管理器。此时,文档管理器就会打开文档。(3)关闭文档接口。文档的销毁即文档的关闭,因此当响应用户退出程序命令时,会对文档管理器进行委托,关掉全部的文档。(4)接收文档激活消息的接口。如果试图激活,那么和试图有关的文档此时也会被激活。该文档被激活的消息需要被发送到文档管理器,这样做的目的是方便让文档管理器激活这一文档。
结束语:
21世纪软件工业发展的一大趋势是软件构件化。目前,工业化的软件复用已经进化到了面向领域的应用框架。框架是一种可复用设计,主要表现形式是:构件实例间交互的方法。笔者对mvc的java应用程序框架的实践进行了分析和探讨,希望对大家有借鉴的意义。
参考文献:
关键词:MVC模式;Struts;Web应用
中图分类号:G642 文献标识码:A
传统的Web应用开发工具(ASP、JSP)将页面显示、商业逻辑和数据处理大部分都集中在页面代码中,Web应用扩展维护比较困难,在大型Web应用开发中愈发显得力不从心。MVC设计模式将页面显示、商业逻辑和数据处理相分离,最大限度地降低系统各部分之间的耦合性,提高代码重用率,易于分工协作。而Struts是一个为开发基于MVC模式的应用架构的开源框架。
1MVC设计模式
MVC设计模式是一种著名的用户界面软件开发设计模式,它是模型-视图-控制器(Model-View-Controller)缩写。在MVC设计模式中,它把应用程序分成了3个核心部分,原理如图1所示。
(1) 模型(Model)。模型封装了用户数据和处理数据的业务逻辑,体现了应用程序的当前状态,而且可以将用户数据状态的变化提供给多个显示该数据的视图共用。
(2) 视图(View)。视图提供了用户界面,是用户和应用程序的交互的窗口,既接受用户输入,也把模型数据状态显示给用户,但是视图不负责任何业务逻辑处理,仅仅是将用户输入数据传递给控制器或将模型数据显示给用户。
(3) 控制器(Controller)。控制器连接了模型和视图,根据用户请求判断将请求交给哪个模型来完成,然后调用视图来显示模型处理后的用户请求结果。
MVC设计模式将应用程序进行了分层,提高了软件的可扩展性、可维护性。
2Struts框架
Struts框架继承了MVC设计模式的特性,是J2EE体系架构的一种轻量级实现。其工作原理如图2所示:
(1) 控制器的实现。Struts框架中采用了ActionServlet和Action类以及Struts-config.xml配置文件作为控制器的实现。其中,Struts-config.xml配置文件配置了不同用户请求及对应的具体业务逻辑组件来供ActionServlet类查询。ActionServlet类是中心Servlet,负责处理所有的用户请求。当用户提出请求,ActionServlet类最先对请求进行处理,它将根据Struts-config.xml配置文件将用户请求映射到具体的Action类;而当Action类调用模型组件处理好用户请求,并返回了处理结果后,仍然由ActionServlet类根据Struts-config.xml配置文件将结果转发到视图提供给用户,或者转发另外一个Action做进一步处理。Action类实现了具体的业务逻辑,它接受用户的输入,然后调用具体的模型组件来完成用户请求。
(2) 视图的实现。Struts构架主要采用了JSP作为视图的实现,它提供了丰富的JSP标签库支持应用程序的开发,而且引入了ActionForm组件(实质为JavaBean)作为用户表单的封装来完成数据的传输。
(3) 模型的实现。Struts框架对模型――即复杂的数据持久化层没有提供太多的支持,但是这也就是说开发人员有更多自由来选择合适量级的持久化技术,比如Hibernate、EJB等。
3Struts工作流程
对于采用Struts 框架的Web应用,其具体工作流程如下:
(1) 客户端通过本地浏览器向服务器发出一个请求;
(2) 控制器接收请求,找到对应的Action;
(3) Action类执行建立在模型组件基础上的业务逻辑;
(4) 一旦Action类处理完业务逻辑,它把控制权返回给ActionServlet;
(5) 当ActionServlet把Action类的处理结果传送到指定的视图中。
4Web开发中的应用
以一个Web考试系统中的考生注册子系统为例,说明Struts 在Web程序开发中的应用。考生在注册页面上输入考生名、密码等相关信息,若注册成功,控制将转向一个显示注册成功的页面,否则控制将转向一个显示失败的页面。具体步骤如下:
(1) 项目建立。
(2) 实现视图功能的用户界面的设计。Struts中,JSP 页面中利用Struts框架提供的taglib 标记库的标记能够大大提高开发效率。在该系统中,其注册页面reguserinfo.jsp 概要如下:
…
//引用Struts bean 标记
…
UserName:
Password:
…
(3) 实现模型功能的组件设计。模型部分包含了应用程序的业务逻辑。
① 系统状态组件(FormBean),即实体模型类,它继承自ActionForm类,用来存放表单数据,与注册页面的表单对应的数据Bean如下:
…;
public class UserForm extends ActionForm{
…
public String getUserID(){return userID;}
public void setUserID(String userID)
{this.userld= userID;}
…
}
② 指令类组件(ActionBean),它扩展了Action 类,主要是用来控制应用程序的流程,当注册考生按“Submit”按钮后,来自用户的请求被Servlet 送到指令类组件RegUserAction,指令类调用相应的业务逻辑进行处理,然后把请求转发给相关的JSP,其程序概要为:
…;
public class RegUserAction extends Action
{
public ActionForward perform(ActionMapping
mapping, ActionForm form, HttpServletRequest
req, HttpServletResponse response) {
//获取注册信息,并据此做相应操作
…
}
}
(4) 实现控制器功能的指令。控制器类ActionServlet的核心是Struts-config.xml 配置文件,它包含了应用程序的整个逻辑流程。在考生注册信息过程中,用reguserinfo.jsp实现注册页面;用UserForm(扩展了ActionForm)封装了表单数据;用RegUserAction实现了考生注册信息并控制了应用程序流程;而在Struts-config.xml 配置文件里实现了注册页面(reguserinfo.jsp)、数据Bean(UserForm)、逻辑Bean(RegUserAction)之间的联系,其配置信息为:
…
name="userForm"scope="request">
…
当在注册页面上单击“Submit”按钮时,考生请求被提交给ActionServlet, ActionServlet 根据Struts-config.xml 中的配置信息,把/reguser.do 的URL映射到RegUserAction,把考生注册信息封装到UserForm,由RegUserAction 完成
注册操作,然后转发给“/regsuccess.jsp”。
(5) 系统运行。 完成整个系统的功能实现。
5总结
Struts体系框架自从2001年7月了1.0版之后,已经越来越得到Java开发者的支持,实践证明,Struts体系框架的确是一个优秀的框架,大大缩短了Java Web应用程序的开发周期,提高了系统开发效率。
参考文献:
[1] 孙卫琴. 精通Struts:基于MVC的JavaWeb设计与开发[M]. 北京:电子工业出版 ,2004.
[2] 阎宏. Java与模式[M].北京:电子工业出版社,2002.
[3] Ted Husteel, Cedric Dumoulin, David Wiwerfeldt, et al.《Struts in Action》[M]. ManningPublication co.2001.
Application Methods of Struts Framework Based on MVC Designed Pattern
XU Cong, WANG Ya-xuan
(Software College, Dalian University of Foreign Language, Dalian 116044, China)
关键词:Ajax技术;Struts框架;异步响应;JavaScript
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)34-1650-03
The Research of Web Application Framework Based on the Collaboration of Ajax Technology and MVC Pattern
HE Xi-chun, XIONG Qian-xing, WU Ting
(Department of Computer Science and Technology, Wuhan University of Technology, Wuhan 430063, China)
Abstract: There are many problems in the existing Electronic Application System with the B/S mode. For example: The user always needs to wait for a long time for the result; the server always has to be under large pressure; a large part of resources at the client-side are leaved unused and so on.. This article studies the Ajax technology at first, and then combines it with the Struts Framework based on the MVC design pattern. With the collaborative work from the two parts, we can promote the response speed of the Web applications based on the B/S mode and construct a more effective web-application framework.
Key words: Ajax technology; Struts framework; asynchronous response; JavaScript
随着Internet的飞速发展,基于Web的诸多应用以其丰富而生动的界面和方便使用等特点在信息化的建设中发挥的作用日益显著。随着服务器端开发技术的成熟,越来越多的开发人员开始亲睐B/S(Browser/Server)的设计模式。如何克服B/S模式自身的一些问题:例如用户体验不如C/S模式;服务器端压力过大,没有充分利用客户端的资源,也就成为应用系统需要研究的新问题。例如,某大型水路征稽系统,就是一个典型的电子政务系统。该系统集征稽与管理为一体,征稽部分帮助完成用户开票操作,管理部分用于数据的统计分析和查询。征稽部分对实时性和数据的准确性要求很高,
并且用户输入的过程中涉及到相关数据的验证。综合起来,就是要求服务器既能提供相当于本地系统似的响应速度,又可以提供大量数据的统计查询。
针对以上问题,本文提出将Ajax技术与MVC模式相结合的新型web框架应用到电子系统中。为了避免页面的臃肿和维护的困难,在中间层上采用MVC的设计模式。同时利用Ajax技术实现浏览器与服务器无刷新交互,数据的按需获取与页面的部分加载,极大的缓解网络流量。将Ajax的优越性,与现有的MVC设计模式相结合,使得Web应用不仅层次分明,可重用性强,具有高的健壮性和可伸缩性,而且具有良好、丰富的用户体验。
1 基于MVC模式的Struts框架介绍
MVC(Model-View-Control)模式,就是模型-视图-控制器模式,其核心思想是将程序划分
成相互独立又能协同工作的三个部分,现在是web应用程序普遍采用的开发模式。Struts即是MVC设计模式一种实现。
1) 控制器:控制层,起到控制整个业务流程(Flow Control)的作用,实现视图和模型部分的协同工作。在Struts中起着控制器的作用的是ActionServlet。所有的控制逻辑利用Struts一config.xml文件来配置。
2) 视图:视图是应用程序中与用户实现交互的界面相关的部分,即表示层,通常实现数据的输入和输出功能。主要是由JSP来控制页面的输出。
3) 模式:模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑,具有实现具体的业务逻辑、状态管理的功能。
模型-视图-控制器模式工作流程见图1。
Struts框架优点显而易见:可以将逻辑处理与页面显示清楚分开;页面显示可以使用JSP标签库,从而大大提高开发效率;通过一个配置文件,既可以把握整个系统各部之间的联系,又可以大大减少后期维护的工作量。但是在服务器端提供了良好而成熟的架构实现的Struts框架,在客户端却没有相应的架构,这使Struts在一些交互性强的页面应用不理想,导致刷新页面频繁,延长用户的等待时间。在上例的系统中,存在很多用户交互频繁的页面,这也导致系统效率低下,造成服务器资源和网络资源的浪费。
2 Ajax的工作原理
Ajax(Asynchronous JavaScript and XML)并不是一门新的语言或技术,实际上它是几项技术按一定方式的组合,在共同的协作中发挥各自的作用。
传统的web应用遵循一种请求/响应的模式,对于每个请求都会重新加载整个页面。Ajax的工作原理相当于在用户和服务器之间加了一个中间层,使用户操作与服务器响应异步化,从而消除了网络交互过程中的“处理―等待―处理”的缺点[1]。每当需要更新时,客户端Web页面的修改是异步的和逐步增加的。并且客户端的浏览器可以分担一部分的业务逻辑,而不再仅仅是显示内容;服务器传送的仅仅是数据,而不是内容。这样,Ajax在提交Web页面内容时大大提高了用户界面响应的速度。在基于Ajax的应用程序中没有必要长时间等待整个页面的刷新。页面中需要更新的那部分才进行更改,如果可能的话,更新是在本地完成的,并且是异步的。所以基于Ajax技术的应用程序可以给用户提供桌面程序般的使用体验。基于Ajax的web模型和Ajax引擎模型见图2。
由于Ajax技术本身的优越性,基于Ajax技术的Web型框架现在已经应用到很多程序中。例如Gmail、Google Map、Google Suggest就是几个经典的Ajax应用。本文中重点要讨论的就是将Ajax技术与现有的MVC开发模式相结合,应用到项目开发中。
3 Ajax技术与MVC模式相结合的web框架
综合上面所分析的,基于MVC模式的Struts是一种框架,虽然它可以很好的将业务逻辑和表示分离,但是大多数的Struts应用都是标准的“如同一个平面文档Web页面”的结构。Ajax是一项技术,它的优势是使得Web页面看起来接近像用户所期望的桌面应用的动态应用程序,而不是一个平面的显示文档。将Ajax技术应用到Struts框架中,可以充分的发挥两者的优点,形成一种高效的web应用框架。
3.1 Ajax技术与MVC相结合的方法
Ajax中实现异步响应的onReadyStateChange事件具有在客户端程序中的事件监听功能。在MVC模式中,视图相当于用户看到的页面,通过内置的Ajax对象一步方式给控制器发送请求,Ajax中的onReadyStateChange则开始监听;控制器接受到页面发送过来的请求(Get或者Post方式),通过请求判断后发送给相应的业务或者数据模型;则业务或者数据模型开始执行业务操作,执行完毕后直接给页面发送数据更新的通知。页面中Ajax对象的onReadyStateChange接收到数据的更新通知后,根据实际的情况用DOM进行页面更新。从上面的结合原理上可以了解,Ajax技术与Struts框架的结合要体现在页面和控制器之间,进行异步的控制。通过分析,在Struts框架中应用Ajax技术,实际上就是加入一个Ajax引擎,这个引擎主要是用来发送Ajax异步请求到服务器和接收服务器的Ajax响应,并动态更新页面,由于采用的是Struts框架,那么无论是发送请求还是接收响应,都应该完成到StrutsForm形式和StrutsAction形式的转换。具体的结合方式可参见图3中所示。
用户的浏览器在执行任务时就装载了Ajax引擎,Ajax引擎用JavaScript语言编写,它负责解释执行用户界面及与服务器之的交互。Ajax引擎允许用户与应用软件之间的交互过程异步进行,独立于用与网络服务器间的交流。用JavaScript调用Ajax引擎来代替产生一个HTTP用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入,整个页面的需求可以交给Ajax来执行。
通过分析Ajax技术与Struts框架结合的原理,可以知道Ajax作为一项技术,能够很方便的融入到基于MVC模式的Struts框架中。它并不需要任何新的库文件或者服务器代码;只需要使用现有的Struts库文件和Action类。关键是在Struts的应用中根据实际业务的需要,以模块为单位加入Ajax的相关设置。首先需要确定哪些部分需要动态显示,然后将她们更新到Ajax的异步通信执行。
以Ajax技术的实现框架DWR为例。它能够把服务器端Java对象的方法公开给JavaScript代码。所以在这个引擎里,它最重要的就是提供了一个Java类到JavaScript对象的映射机制,也即是DWRServlet。DWR是作为Web应用程序中的Servlet部署的。而在Struts的视图、控制和模型三个组件中,ActionServlet就是它的控制器(Controller)。那么要将两个框架结合起来,其实也就是将DWRServlet和Actionservlet结合起来,作为整合框架的核心-MVC模式的新的控制器。
3.2 新型web框架的应用
某大型的水路征稽系统中的开票业务和协议签订业务,对系统的响应速度要求很高,且在运行的过程中,需要对用户的每一步输入的信息进行验证。这样的需求,可以通过应用Ajax技术和Struts架构相结合的新型框架来满足。
以统缴业务为例,该模块帮助用户完成协议的签订和电子协议的生成。首先需要在系统的web.xml文件中配置DWR和Struts这两个Servlet以及其映射。
……
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
……
<!----以上是指定Struts的ActionServlet--->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
……
</servlet>
<!---以上是指定DWR的DWRServlet---->
要调用的JavaBean方法需要在DWR的配置文件dwr.xml中进行声明,建立映射,如:
<create creator="new" javascript="getSnxyxx" scope="page">
<param name="class"
value="edu.whut.cwts.tj.xy.getSnxyxx" />
</create>
在页面中直接调用相关的JavaBean:
function funcresult(result)
{
if(result=="1")//如果公司名称验证通过,获取该公司到目前的协议情况
{var result;
getSnxyxx.getallxxdwmc.value, dwxz.value,funcresult);
}
……}
function funcresult(result)
{//对公司协议信息的显示
……
}
DWR允许用户像调用JavaScript的函数一样调用Java方法,对于Struts框架中的ActionForm类和Action类也可以直接通过DWR调用,只需要在dwr.xml文件根据实际业务需要,对用到的类进行如上的声明即可。程序中,根据实际业务需要有的地方DWR进行实现,有的地方用Struts来实现,有的需要两者结合实现,进行灵活控制,开发高效的水路电子征稽系统。
4 结束语
本文将现在比较流行的Ajax技术与成熟的开发模式MVC相结合,可以充分发挥两者的优点,组成更为合理高效的新型web框架。Ajax技术可以异步响应页面请求,使得页面的展现更加灵活动态;基于MVC模式的Struts框架使得系统的开发,测试和维护更加科学合理。将这种新型web框架应用到应用系统的开发中,有利于改善B/S模式应用系统中普遍存在的问题,充分利用客户端的资源,减轻服务器端压力,给用户提供基于web的功能和桌面级的用户体验。
参考文献:
[1] 游丽珍,郭宇春,李纯喜.Ajax引擎的原理和应用[J].微计算机信息,2006,6(9):205-207.
[2] 佘名高,吴海林,熊童满,等.Ajax在Struts中的应用[J].计算机技术与发展,2007,10(17):69-72.
【关键词】MVC模式;Joomla!;Web系统;专家答疑组件
【中图分类号】G40-057 【文献标识码】A 【论文编号】1009―8097(2009)06―0097―04
软件开发中,通常用耦合度和内聚度作为衡量模块独立程度的机制。传统的Web系统开发,常常围绕着事件驱动的界面表示层来组织开发,此开发模式把数据处理、程序功能和界面层代码完全杂糅在一起,不利于模块间的复用,降低了系统各模块间的独立性,系统模块间具有高耦合度。MVC模式由于把数据处理、程序输入输出控制和数据表示分离开来,并描述了三者之间的通讯方式,提高了系统各模块间的独立性与模块的可复用性,很好的解决了上述传统Web系统开发中所遇到的问题。
在Web系统开发中,对于MVC模式的实现主要有三种技术框架:基于ASP.NET的框架、基于PHP的框架、基于JSP的框架。基于ASP.NET的框架的最大弱点是不具有跨平台性,依赖于Window平台,安全性与稳定性较弱且版权使用费用昂贵;基于JSP的框架的最大弱点是开发周期长,技术实现复杂,只合适大型Web系统项目应用;而实现MVC模式的PHP的框架由于具有跨平台性、安全性与稳定性高、开发周期短、开源(软件免费使用)等特征在中小型Web系统开发中得到了广泛的应用。作者通过文献调研发现,研究ASP.NET的框架与JSP的框架在Web系统开发中应用的文献 较多,而对于实现MVC模式的PHP框架在Web系统开发中的应用研究则很少。
目前,基于MVC模式的PHP技术框架众多,如Symfony、Zend Framework、Joomla!、Drupal等,开发者依据开发需求灵活的选择框架,本文则选取Joomla!框架, 探讨其在Web系统开发中如何进行组件扩展开发。首先,本文分析了基于MVC模式的Joomla!框架在Web系统扩展开发中的应用 设计思想、技术方法;其次,重点分析了Joomla!框架在Web系统扩展开发中的扩展机制;最后,以某外语教育出版社高等英语教学网专家答疑组件扩展开发为案例,剖析了Joomla!框架扩展机制在Web系统扩展开发中的实现。
一 Joomla!框架应用于Web系统的组件扩展设计
由于Joomla!框架具有自带的用户注册管理、新闻、媒体管理等组件,并且拥有优秀的扩展能力等优势,提高了开发的效率和灵活性,因此它在中小Web系统开发中得到了广泛应用。Joomla!框架的组件概念即是完成一定功能的应用程序。下面围绕Joomla!框架的Web组件扩展问题分别对Joomla!框架应用于Web系统组件扩展开发的设计思想、技术方法进行探讨。
1 Joomla!框架组件扩展的MVC模式设计思想
为了克服传统Web开发中将数据处理、程序功能和界面代码完全杂糅在一起的问题,Joomla!框架应用于Web系统组件扩展开发遵循MVC模式设计思想,如图1所示,包含三个部分:模型(Model)视图(View)和控制器(Controller) ,分别对应于内部数据数据表示和输入输出控制。
模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法;视图是模型的外在表示,一个模型可以对应一个或者多个视图,视图是程序系统与外界的接口;控制器起到 沟通模型和视图的作用,用于控制应用程序的流程。它处理来自用户的行为事件和数据模型的改变事件,并对事件进行响应。
如图1所示,Joomla!框架遵循MVC设计思想进行Web系统扩展开发采用如下的数据交换机制:控制器――视图和控制器――模型方法。控制器是视图和模型之间进行数据交换的纽带,在控制器――视图方法中,控制器根据用户输入直接调用不同视图改变响应流程,或与模型交互后获得需要显示的数据,再调用视图改变响应流程;而在控制器――模型方法中,控制器与模型交换,控制器将输入数据传递给模型处理,控制器中也可以从模型中抽取数据。
2 Joomla!框架组件扩展的技术方法
采用Joomla!框架进行Web系统的组件扩展开发,要求开发者编程语言必须使用PHP技术,数据库使用MySQL、 Web服务器通常推荐开源的(免费使用)的Apache。Joomla!官方的最新框架版本采用分层架构机制:框架层、应用层、扩展层,框架层由Joomla!的基本类库和插件组成;应用层由应用程序类构成;扩展层由组件、模块、模板构成,其架构机制如图2所示。
Joomla!框架应用于Web系统扩展开发的方法对于Web系统交互界面设计人员来说是采取模板定制方案,将设计好的Web页面与CSS样式遵循Joomla!模板定制机制,将已经设计好的模板嵌入到Joomla!框架中,依据客户的不同需求进行个性化Web系统外观的设计;对于Web系统编程人员来说,Joomla!框架已经为Web系统中最常用的功能进行了实现 ,如果Web系统开发有另外的功能需求,可以使用Joomla!框架进行Web系统的扩展开发,即遵循Joomla!框架扩展开发的规范与机制编写组件、模块、插件来满足Web系统开发的功能需求。
二 Joomla!框架应用于Web系统的组件扩展机制
对于Web系统编程人员来说,应用Joomla!框架进行Web系统扩展开发需要遵循Joomla!框架扩展开发的规范与机制开发组件、模块、插件来满足Web系统的功能需求。Joomla!框架最重要的扩展机制当属组件扩展机制,图3所示为Joomla!框架的组件扩展机制MVC模式图。
Joomla!框架中JModelJController JView三个类分别对应于图3中的ModelController View部分,其中JController类是JModel类和JView类数据交换的纽带,这三个类与Joomla!框架中的JDispatcher类, JRoute类等互相配合,进行Web组件扩展开发。
JModel类是Joomla!框架组件扩展机制的事务逻辑处理模块,其是最终负责处理客户请求的模块。它能够处理用户的大多数需求,快速的从数据库中获取请求数据,协调事务,保证应用程序各部分间的事务组合;JController类是Joomla!框架组件扩展机制的控制模块。此模块首先接收客户端发送的与网络协议相关的请求,然后解析请求并转换为事物逻辑模块(JModel)的输入参数, 调用相应的事务逻辑模块进行处理,最后根据事物逻辑模块的处理结果调用相应的用户视图模块(JView)生成结果页面,返回至浏览器;JView是Joomla!框架组件扩展机制的用户视图模块。此模块的主要功能是根据事务逻辑模块(JModel)处理结果生成返回至客户端的页面。
开发者应用Joomla!框架进行组件扩展开发,都需要继承JModel类、JView类、JController类,形成如图4所示的Joomla!框架组件扩展开发机制图,开发者借助于图4的流程,运用PHP编程语言对上述三个类分别进行继承,完成Web系统扩展组件的开发。开发者依据此模式进行Web系统开发,提高了代码的可复用程度,节省了开发的时间,提高了开发效率;Joomla!框架通过提供扩展组件的方式来满足Web系统的功能扩展,提高了系统各个部分之间的独立性,降低了Web系统模块间的耦合度。
三 组件扩展案例――高等英语教学网专家答疑组件
本文以某外语教育出版社高等英语教学网专家答疑组件的扩展开发为案例,具体阐述Joomla!框架组件扩展机制在Web系统组件扩展开发中的应用流程和实现方法。
1 专家答疑组件的扩展开发需求
为教师的教学, 和学生的学习提供异步专家指导;专家也可以发表指导英语教学和学习的文章;对于教师和学生的问题应分开显示;对于教师和学生的提问应有归类和按类别显示功能;支持关键字搜索;页面支持图片与附件功能;教师与学生提问审核功能;教师与学生的提问具有优先功能;具有创建管理问题种类功能。
2 专家答疑组件的组成
Joomla!框架的扩展组件由后台管理与前台显示两大部分构成。专家答疑组件的后台管理具有对问题的管理分类审核 优先 与上传附件功能;专家答疑组件的前台显示专家的指导和教师与学生的提问,并显示问题的搜索和分类界面。
3 专家答疑组件的数据库设计
Joomla!框架的组件扩展开发使用MySQL数据库,在已存在的数据库中新建组件开发所需要的表。专家答疑组件,在已存在的数据库中新建专家答疑数据表,它包含主键标识符、问题标题、问题答案、问题分类、疑问主体、关键词、创建时间这些字段。通过继承Joomla!框架中的JTable类,将得到一个专家答疑表类文件存放在Tables文件夹中,它将在组件扩展的Model部分存储数据方法中得到调用。
4 专家答疑组件的后台管理开发
遵循Joomla!框架的组件扩展开发机制和流程,应该包括三个部分:Model、Controller和View,进行组件开发的时候,通常创建Models文件夹存放 组建开发中的Model文件;Controllers文件夹存放 组件开发中的Controller文件;Views文件夹存放 组件开发中的View文件。下面将以专家答疑组件为例具体阐述Model、Controller、View这三个部分的开发。
专家答疑组件的Models文件夹中包含有QuestionanswersModel和QuestionanswerModel文件,它们都继承自Joomla!框架中的Jmodel类,负责对问题管理列表和单个问题进行数据逻辑处理。这两个类除了拥有共同的Jmodel的父类方法,还共同拥有数据保存方法、数据删除方法,代码的可复用程度得到很大提高。对于 处理多个问题列表的QuestionanswersModel类还具有分页方法,方便用户进行浏览。在数据保存方法中通过对专家答疑表类的调用,将信息绑定到相应的数据库的表中,简化了开发者对于 数据保存的处理,提高了开发者的效率。
专家答疑组件的Controllers文件夹中包含QuestionanswerController文件,这个文件包含一个QuestionanswerController类,它继承自Joomla!框架中的Jcontroller类。除了文件夹之外,还有一个默认的QuestionansersController类,Joomla!组件扩展开发,通常把这个默认的类放在Controllers文件夹外,它的作用是默认情况下,调用组件Views文件夹下问题管理列表这个页面。而QuestionanswerController类是通过一系列方法与专家答疑组件中的Model类进行联系,从而调用专家答疑组件中的对应的单个问题页面将结果返回给浏览器。这个类除了拥有父类Jcontroller的方法外,还具有对于 问题进行编辑的方法、对于 问题进行保存的方法、对于 问题进行删除的方法 、取消操作的方法。对于 问题的添加和编辑方法,通过设置调用专家答疑组件中的相关View文件夹下的类,直接将页面返回给浏览器;对于 问题进行保存、删除的方法是通过调用专家答疑组件中的QuestionanswerModel中的数据保存和删除方法来完成;对于 取消操作的方法是通过进行 地址的重新定位来实现。在Joomla!组件开发中,Controllers文件夹下的各个控制类文件都拥有上述的共同方法,在开发的时候,除了调用不同的Model和View外,其他的代码都大致相同,代码在很大程度上可以进行复用。
专家答疑组件中的Views文件夹下有两个子文件夹,它们分别是专家答疑的问题管理显示页面和单个问题显示页面。两个子文件夹下都包含一个模板文件夹和对应的View类,模板文件夹可以存放若干个模板文件,以供View类进行选择调用,将所获得的数据填入到模板文件中形成显示页面。它使数据处理与功能代码与界面表示层代码得以分离,避免了代码的杂糅,提高了各部分间的独立性。专家答疑组件拥有QuestionanswersView类和QuestionanswerView类,它们都继承自Joomla!框架中的Jview类。它们通常运用一个显示方法将数据填入到指定的模板文件中,由于专家答疑组件的显示页面都具有单一的模板文件,所以没有涉及到模板的选择调用。
5 专家答疑组件的前台开发
由于专家答疑组件的前台开发和上述的后台管理开发方法完全一样,所以限于篇幅不再重复叙述。但是需要指出的是前台开发除了多个问题显示和单一具体显示功能外,还具有问题搜索和问题分类显示功 。开发者仅仅需要在其Models文件夹、Controllers文件夹和Views文件夹增加相应的类文件即可,不会影响到其他部分的功能代码,很方便为组件增加 额外的功能,提高了组件各个部分之间的独立性,降低了系统之间的耦合度。
6 专家答疑组件的安装
经过上述五个步骤,就完成了专家答疑组件的开发,开发者最后还需要建立一个XML文件,将专家答疑组件所拥有的文件按照层次顺序添加到XML中,完成安装的XML文件后, 进行压缩成ZIP格式的文件进行安装使用,专家答疑组件的后台问题管理页面效果图如下所示。
四 结束语
本文以某外语教育出版社高等英语教学网的专家答疑组件开发为案例详细阐述了应用Joomla!框架进行Web系统组件扩展开发的机制和流程,限于篇幅,对于Joomla!框架的Module和Plugin开发没有涉及。通过遵循Joomla!框架的MVC组件扩展机制,我们在开发过程中提高了系统各个部分的独立性与代码的可复用程度,降低了系统各部分之间的耦合度。
参考文献
[1] MVC模式研究的综述.任中芳,张华,闫明松等 [J].计算机应用研究,2004,10:1-2.
[2] MVC模型在Web程序中的应用及java实现.张莹,许俊华,张毅, 等[J].计算机工程与应用,2001,17:160-161.
[3] 基于的MVC设计模式的研究.林庆,朱翠苗, 等[J].计算机工程与设计,2008,1:167-168.
[4]Dan Rahmel.Professional Joomla![M].US: Wiley Publishing Inc,2007.
[5]Dan Rahmel.Beginning Joomla! [M].US: press Publishing, 2007.
[6]James Kennard. Mastering Joomla!! 1.5 Extension and Framework Development [M].Birmingham: Packt publishing, 2007.
[7]Joseph LeBlanc. Learning Joomla!!1.5 Extension Development [M].Birmingham: Packt publishing, 2007.
[8] [EB/OL].
[9] [EB/OL].
[10] [EB/OL].
[11] [EB/OL].
A Study on the Application of MVC-Based Joomla! Framework in Extension and Exploration of Web Components
HU Qian-jinCAI Yong-zhou WU Min
(University of Science and Technology of China, Center of Modern Educational Technology, Hefei Hubei, 230026)