对于Java的动态Web编程技术而言,则经历了所谓的Model1和Model2时代。
Model1模式
在Web早期的开发中,通常采用的都是Model1。Model1设计模式中,主要分为两层,视图层和模型层。那
么,项目中的业务流程该如何处理呢?实际上,Model1模式中就充当了这个角色,也就是说一切的业务逻辑都是由
JSP来处理的,通常是通过JSP直接调用模型来处理相关的业务,Model1是以JSP为中心的。
举个例子,比如我们用Model1模式开发了一个网站,该网站可以注册会员,那么当我们在注册页面中点击提交
时,我们在页面中输入的数据就直接提交给一个JSP对象了,然后由该JSP对象直接调用DAO类对象,往数据库中插
入一条注册记录,实际上,该JSP对象可以直接就是展示注册页面给我们的JSP。
好了,看完例子,我们是否会觉得Model1的设计模式在逻辑上比较混乱呢?我想答案是肯定的,要不然也不会引
出现在正流行的MVC设计模式了。然而,Model1也还是有其自己的优点的。那就是,对于一个小项目而言,采用M
odel1模式来开发,开发效率往往会更高。但是,Model1开发模式所带来的问题是,使用该模式开发的项目难以扩
展,难以维护,代码重用率也相当低。
(1)传统的Model1模型
Jsp是独立的,自主完成所有的任务。
(2)改进的Model1模型
Jsp页面与JavaBean共同协作完成任务。
Model1模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度看,它的局限性非常明显:JSP页
面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用
的扩展性和维护的难度。早期有大量ASP和JSP技术开发出来的Web应用,这些Web应用都采用了Model1架构。
Model1就是使用JSP+JavaBean技术,将页面显示和业务逻辑处理分开,使用JSP实现页面的显示,JavaBean对
象用来保存数据和实现业务逻辑,大概可以用下图来反映:
Model1开发模式在JSP页面中嵌入了流程控制以及调用了JavaBean的方法,随着业务逻辑复杂度的增加,使用
Model1模式在开发及维护上都是非常复杂的,而一个软件的维护成本是非常高的,所以Model不能满足大型的应用
需求,这是就应该使用Model2的开发模式。
Model1优点:
简单,快速开发,适用小规模开发。
Model1缺点:
业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离,JSP负载太大。所以非常不利于应用系统业务的重用
和改动,不便于维护。
Model2模式
由于现在人对软件质量的要求越来越高,软件项目的规模也越来越大,所以Model1设计模式绝对不再适用于现
在的软件开发。现在的软件开发是以工程的思想进行的,因此,Model2,也就是MVC模式,自然而然就受到了人们
的追捧了。Model2设计模式,把一个Web软件项目分成三层,包括视图层、控制层、模型层。这样的分层思想,不
仅提高的代码的重用率、项目的扩展性,而且大大降低了项目的维护成本。此外,Model2设计模式的这种分层思
想,在逻辑上相当的清晰,易被人们接受,而且便于开发人员的分工合作,因此,大大提升了开发效率。现在,具体
谈一下Model2的三层结构是如何完成一个业务流层的吧。
首先,要先介绍一下,Model2中的三层结构都包含了那些内容:
视图层:包括JSP、HTML、CSS、Javascript、图片等;
控制层:由Servlet构成;
模型层:由JavaBean构成(包括DAO等)。
其次,对于一个具体的业务请求,这三层结构到底是如何配合完成的呢?举个例子,为了跟Model1模式做比
较,我们还是引用注册会员的例子。当我们点击注册页面上的提交按钮时,客户端的注册请求不再是传给一个JSP对
象了,而是传给了一个Servlet对象(控制层,我们定义该Servlet对象做为主控Servlet,由它来接收所有的业务请求,
然后决定交给哪个action对象来处理,最后由它来接收action对象返回的数据并跳转到指定的url),然后由该Servlet
对象决定将业务请求交给哪个具体的action对象来处理,然后当action对象处理完请求后,便返回一个url给该Servlet
对象,由该Servlet对象根据返回的url决定跳转到哪个页面(即决定将哪个页面展示给客户端)。另外,需要提到的
一点就是,刚刚提到的action对象实际上是Model2模型中最关键的部分,因为它是model2中真正干活的组件,它解
决的是做什么的问题,然后由它通过调用相关的业务组件(模型)来完成相应的业务,业务组件解决的是如何做的问
题。对于action对象该划分到控制层还是模型层的问题,其实这是有所争议的。个人比较赞成把它归到控制层中去,
因为它实际上并不执行具体的业务,只是调用相关的业务模型对象来处理罢了,换句话说,它不应该包含过多的业务
逻辑,而应该只是简单地收集客户端传过来的数据,并将这些数据传给具体的业务处理对象来处理,最后,由它决定
跳转到那个url,并由主控Servlet执行跳转。确切的来说,我认为它可以理解为是控制层与具体Model对象的适配
器。
Model2开发模式是在Model1开发模式的基础上改进而来,具体就是我们将Model1开发模式中JSP中嵌入的调
用JavaBean代码及部分流程控制程序抽取出来,放到单独的组件处理,这个组件就是控制器,这样就从Model1模式
升级到了Model2模式了,Model2模式符合MVC模型。
MVC模型是指的模型-视图-控制(Model-View-Controller),MVC模型可以将应用程序分割为三个组件,使得
程序设计更容易,并且使各个组件之间的耦合度降低,具体来说:
模型(Model):模型代表应用程序的数据以及用于访问控制和修改这些数据的业务规则。
视图(View):视图用来组织模型的内容,视图对象使用对象模型的查询方法以获得数据,并将数据显示给用户,
具体一点就是与用户交互的界面,对于Web应用来说,可以简单的理解为HTML。
控制器(Controller):就是一个分发器,控制器并不做任何的数据处理,控制器定义了应用程序的行为,他负责对
来自视图的用户请求进行解析,并把请求映射成相应的行为,这些行为由模型负责实现。
Model2的架构图如下图所示:
在Model2模式中,JSP作为视图仅负责页面呈现,JavaBean作为模型负责业务逻辑,持久化操作,servlet作为
控制器负责流程控制,Model2模式的优点一是彻底分离了业务逻辑于表现逻辑,进一步简化了JSP页面。二是servlet
统一控制了页面的跳转于业务调用流程,极大地方便了维护!
Model2中使用了三种技术:
Jsp负责生成动态网页,只用做显示页面。
Servlet负责流程控制,用来处理各种请求的分派。
JavaBean负责业务逻辑,对数据库的操作。
Model2的交互过程:
用户通过浏览器向Web应用中的Servlet发送请求,Servlet接受到请求后实例化JavaBean对象,调用JavaBean
对象的方法,JavaBean对象返回从数据库中读取的数据。Servlet选择合适JSP,并且把从数据库中读取的数据通过这
个JSP进行显示,最后JSP页面把最终的结果返回给浏览器。
Model2已经是MVC设计思想下的架构,由于引入了MVC模式,使Model2具有组件化的特点,更适用于大规模
应用的开发,但也增加了应用开发的复杂程度。
Model2优点:
1)消除了Model1的缺点
2)该模式适合多人合作开发大型的Web项目
3)各司其职,互不干涉
4)有利于开发中的分工
5)有利于组件的重用
Model2缺点:
Web项目的开发难度加大,同时对开发人员的技术要求也提高了。