问答题 如何使用JSP与Servlet实现MVC模型
【正确答案】
【答案解析】MVC是Model(模型)、View(视图)和Controller(控制器)3个单词的首字母组合。MVC是一种目前广泛流行的应用模型,其目的是实现Web系统的职能分工。下图为MVC模型关系图,其中模型层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现;视图层则用于与用户的交互,通常用JSP来实现;控制层则是模型与视图之间沟通的桥梁,它可以把用户的请求分派并选择恰当的视图来显示它们,同时它也可以解释用户的输入并将其映射为模型层能够执行的操作。

MVC模型关系图

MVC强制性地分离Web应用的输入、处理和输出,使得MVC应用程序被分成3个核心部件:模型、视图和控制器。它们各自处理自己的任务。
(1)模型(业务逻辑层)
模型表示企业数据和业务逻辑,它是应用程序的主体部分。业务流程的处理过程对其他层来说是黑箱操作,模型接收视图请求数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉设计人员按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难,可以使设计人员专注于业务模型的设计。
MVC把应用的模型按一定的规则抽象出来。抽象的层次很重要,这也是判断设计人员是否优秀的主要依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉设计人员应该如何组织管理这些模型,以便于模型的重构和提高重用性。
业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据持续化,比如将一张订单保存到数据库,从数据库获取订单,将这个模型单独列出,所有相关数据库的操作只限制在该模型中。
(2)视图(表示层)
视图是用户看到的并与之交互的界面。对早期的Web应用来说,视图就是由HTML元素组成的界面,在新式的Web应用中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash以及诸如XHTML、XML/XSL等一些标识语言和Web服务等。
随着Web应用开发技术的发展,用户要求的日益提高,如何处理应用程序的界面已经变得越来越有挑战性。MVC架构一个大的好处是它能为Web应用处理很多不同的视图。在视图中其实没有真正的业务处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
视图功能强大,主要表现在以下两个方面:
1)根据客户类型显示信息。
2)显示商业逻辑(模型)的结构,而不关心信息如何获得何时获得。
(3)控制器
控制器接收用户的输入并调用模型和视图去完成用户的需求。所以当用户单击Web页面中的超链接和发送HTML表单时,控制器(例如Servlet)本身不输出任何东西,也不执行任何处理,它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。
MVC的处理过程是这样的:对于每一个用户输入的请求,先被控制器接收,并决定由哪个模型来进行处理,然后模型通过业务逻辑层处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过显示页面呈现给用户。
MVC这种特殊的设计结构,给应用开发带来了很多便利,通过使用MVC架构,大大提高了Web应用的开发效率,具体来说,MVC设计结构主要有以下几个方面的优点:
1)低耦合性。由于视图层和业务层分离,这样就使得修改视图层代码时不需要重新编译模型和控制器的代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2)高重用性和可适用性。由于技术的不断进步,现在访问应用程序可以有越来越多的方式。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何Web(HTTP)浏览器或者无线浏览器(WAP),例如,用户可以通过计算机或手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,因此同样的构件能被不同的界面使用,例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令仅是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3)较低的生命周期成本。MVC使得开发和维护用户接口的技术难度降低。
4)部署快速。使用MVC模式可以大大缩减开发时间,这使得后台开发人员集中精力于业务逻辑上,使界面开发人员(包括HTML和JSP开发人员)集中精力于表现形式上。
5)可维护性。分离视图层和业务逻辑层也使得Web应用更易于维护和修改。
6)有利于软件工程化管理。由于采用了分层思想,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。
用JSP与Servlet实现的MVC模型如图所示。