基于JAVA WEB中MVC模式的研究与应用

2014-11-04 15:26杨静
电脑知识与技术 2014年28期
关键词:设计模式

杨静

摘要:MVC(Model-View-Controller)设计模式是现代软件设计中一种非常重要的设计模式,也是WEB系统中常用的一种经典模式,它实现了界面显示与业务逻辑的分离。为了提高基于WEB系统中代码的可重復性、可维护性、可移植性和系统性能的稳定性,从数据库访问技术、XML技术和DAO设计模式的角度,提出一种MVC改进模式,并阐述了基于此模式进行开发的技术和原理。

关键词:MVC;Model;设计模式;Java Web

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)28-6668-04

1 MVC设计模式

MVC是一种经典的程序设计概念,此模式将应用程序分成3个部分,分别是模型层(Model)、视图层(View)、控制层(Controller),其关系如图1所示:

1.1 模型层(Model)

模型层是应用程序的核心部分,主要由JavaBean组件来充当,可以是一个实体对象或一种业务逻辑。负责表达和访问数据,执行商业逻辑和操作,维护应用程序状态。在MVC 模型中,它控制视图的表现结果。它采用面向对象的方法, 将问题领域中的对象抽象为应用程序对象。在这些抽象的对象中封装了对象的属性和这些对象所隐含的逻辑。模型可以接收来自视图的查询并做出响应,在模型的数据变化的时候,它将通知视图并提供后者访问自身状态的能力,视图将根据模型的变化来更新自己,同时控制器也可以访问模型的功能函数以完成相关的任务[1] 。

1.2 视图层(View)

视图层提供应用程序与用户之间的交互界面。它从模型中得到数据并按要求显示出来,当模型中的数据发生变化时,视图从模型中得到通知自动更新视图;它也可以将用户输入的信息传送给控制器。在MVC模式中,这一层并不包含任何的业务逻辑,仅仅提供一种与用户交互的视图,在Web应用中有JSP、HTML界面充当。

1.3 控制层(Controller)

控制层用于对程序中的请求进行控制,起到一种宏观调控的作用,它可以通知容器选择什么样的视图、什么样的模型组件,在Web应用中由Servlet充当。

2 基于JSP的MVC设计模式

JSP(Java Server Pages)是由Sun公司倡导、许多公司参与建立的动态网页技术标准。它在HTML代码中嵌入Java代码片段(Scriptlet)和JSP标签,构成JSP网页。在接收到用户请求时,服务器会处理Java代码片段,然后生成处理结果的HTML页面返回给客户端,客户端的浏览器将呈现最终的页面效果。JSP页面负责数据显示、业务逻辑、页面控制等所有的工作,这给Web设计带来了强耦合,维护困难,开发人员分工不明确,程序处理逻辑发杂等一系列问题。为了解决这种问题,Sun公司制定了两种设计模式,模式一(Model1)和模式二(Model2)。Model1设计模式中,主要分两层,视图层和模型层。图2称之为模式一,虽然模式一实现了页面显示和业务逻辑的分离,但是在JSP页面中不仅需要编写显示,而且很多业务逻辑、流程控制和调用JavaBean的程序代码都出现在JSP页面中,当业务逻辑非常复杂时,大量的内嵌代码会使得整个页面程序变得异常复杂,使整个项目再维护的时候显得非常困难。采用Model1模式开发小型项目非常的方便,每组页面实现一个功能,当需要对某个功能进行修改时,需要修改很多地方,这样不利用功能的扩展和更新。

为了解决模式一种的紧耦合、复用性差、维护成本高的缺点,此时提出了Model2模式,如图3所示。该图表示的是一种把JSP与Servlets联合使用来实现动态内容服务的方法,即 MVC 模式。它可以很好地表达用户与系统的交互模式以及整个系统的程序架构模式。在该模式中,JSP充当视图层,主要负责视图的显示servlet充当控制层,控制分发用户的请求,根据用户的请求,调用相应的业务Bean,并将结果返回给适当的页面进行显示,JavaBean充当模型层,主要负责业务逻辑的实现,因此在构建 Web 应用,采用Model2模式具有显著的优势。

3 改进的MVC模式

采用Model2模式开发项目时,在业务层中主要封装了实体Bean和业务Bean,实体Bean主要用来封装实体对象,而业务Bean主要是一些关于对数据库的操作。此时在业务Bean就会涉及到数据库的连接和关闭,当在使用的过程中,如果频繁的打开和关闭数据库是非常耗时和浪费系统资源的,此时我们可以在业务层中加入一个数据库连接池,避免了数据库频繁的打开和关闭,提高了系统性能。当一个项目的业务比较复杂时,此时在Servlet中不仅有一些流程控制代码和业务代码,还有大量的数据处理代码,此时应该尽量减少在Servlet中的代码,只让Servlet做接收数据,转发数据功能,其它的事情放到外面去做,为了实现该功能,将在Servlet中对数据的一些处理操作代码单独封装到Service层中,Servlet接收到用户请求后,根据请求的目标,直接跳转到对应的Service中,在Service中负责对数据的处理和调用相应的业务层。其实现流程图如图4所示。

4 基于MVC模式登陆模块的实现

现在结合登陆模块的开发,介绍MVC的在Java Web中的具体实现步骤,从而加深对MVC设计的理解。用户填写登陆信息的界面和通过验证并返回信息的界面都为视图(View);当用户填写的信息通过Form表单提交后,此时需要根据action跳转到指定的控制器(Controller),而此控制器主要是通过Servlet完成,Servlet需要在web.xml中进行配置;通过控制器调用模型层(Model),连接数据库,验证输入信息是否在数据库中存在。在此整个模块所涉及到的程序清单如下表一各模块的表述:

在数据库连接时,通常采用JDBC技术,此技术作为一种数据库访问技术,具有简单易用的优点。但使用這种模式进行Web应用程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接,而建立连接是一个费时并且耗费内存资源;其次,对于每一次数据库连接,使用完后都得断开,否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。因此,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。此时我们采用数据库连接池进行数据库的打开和关闭。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。在配置数据库连接池时需要修改Tomcat中的server.xml和项目中WEB-INF下的web.xml文件,再在程序中获得已有连接。

在整个MVC设计中Model是其核心部分, 对于用户登陆模块,需要将输入的数据或从数据库中读取的数据封装到User类,从而各个模块都能方便的使用该JavaBean对象了,而JavaBean在封装的时候只需要书写它的getXxx和setXxx方法就可以了,作为Model最重要的就是如何设计一个好的DAO模式来对数据库进行操作,为了以后能够更好的进行功能的扩充,在DAO组件中先定义一个UserDAO接口,然后定义接口的UserDAOImpl实现类,在接口的实现类中定义的各种方法来实现对数据的操作,但不负责数据库的连接和关闭操作,而要完成这一操作主要是通过代理来完成,并调用真实主题,通过一个DAOFactory工厂实现DAO的实例。部分代码如下:

接口的实现类:

陆流程图

5 结束语

采用MVC模式清晰将表达和内容进行了分离,开发人员负责Servlet和JavaBean,网页设计人员负责JSP页面的开发,分工明确,非常适合大项目的开发,同时采用该模式开发设计清晰,独立性强,易扩充,易维护等优点,使各类人员都可以更加专注完成自己的工作,在Web开发中有显著的优势。

参考文献:

[1] 雷钧.MVC 设计模式在J2EE平台上的应用[J]. 微计算机信息,2006,22(7):45-48.

[2] 万健,刘建华.基于MVC模式的JSP技术开发WebGIS[J].工程地球物理学报,2009,6(2):241-243.

[3] 范芸,范慧霞. JSP动态网站开发基础与上机指导[M].北京:清华大学出版社, 2010:245.

猜你喜欢
设计模式
仿生设计模式的创新应用探索
“1+1”作业设计模式的实践探索
交通机电工程设计模式创新探讨
互动式设计模式研究