Web开发两种模式 Model1和model2
1.model1简介
在web早期的开发中,通常采用的都是model1模式。就是使用JSP+javaBean技术,将页面显示和业务逻辑处理分开,使用JSP实现页面的显示,javaBean对象用来保存数据和实现业务逻辑,大概可以用下图来反映:
Model1设计模式中,主要分为两层,视图层和模型层。那么,项目中的业务流程该如何处理呢?
实际上,model1模式中jsp就充当了这个角色,也就是说一切的业务逻辑都是由jsp来处理的,通常是通过jsp直接调用模型来处理相关的业务,model1是以jsp为中心的。举个例子,比如我们用model1模式开发了一个网站,该网站可以注册会员,那么当我们在注册页面中点击提交时,我们在页面中输入的数据就直接提交给一个jsp对象了,然后由该jsp对象直接调用dao类对象,往数据库中插入一条注册记录,实际上,该jsp对象可以直接就是展示注册页面给我们的jsp。
优点:Model1 执行效率高,开发效率高。适合小型项目
缺点:逻辑混乱,页面混乱,代码重复,维护困难,扩展项目比较难
2.Model2的简介
Model2设计模式,实际上就是mvc模式的开发,把一个web软件项目分成三层,包括视图层、控制层、模型层。这样的分层思想,不仅提高的代码的重用率、项目的扩展性,而且大大降低了项目的维护成本。此外,model2设计模式的这种分层思想,在逻辑上相当的清晰,易被人们接受,而且便于开发人员的分工合作,因此,大大提升了开发效率。
现在,具体谈一下model2的三层结构是如何完成一个业务流层的吧。
首先,要先介绍一下,model2中的三层结构都包含了那些内容:视图层包括jsp、html、css、javascript、图片等,控制层由servlet构成,模型层由javaBean构成(包括dao、vo、action等)。
其次,对于一个具体的业务请求,这三层结构到底是如何配合完成的呢?举个例子,为了跟model1模式做比较,我们还是引用注册会员的例子。当我们点击注册页面上的提交按钮时,客户端的注册请求不再是传给一个jsp对象了,而是传给了一个servlet对象(控制层,我们定义该servlet对象做为主控servlet,由它来接收所有的业务请求,然后决定交给哪个action对象来处理,
最后由它来接收action对象返回的数据并跳转到指定的url),然后由该servlet对象决定将业务请求交给哪个具体的action对象来处理,然后当action对象处理完请求后,便返回一个url给该servlet对象,由该servlet对象根据返回的url决定跳转到哪个页面(即决定将哪个页面展示给客户端)。
另外,需要提到的一点就是,刚刚提到的action对象实际上是model2模型中最关键的部分,因为它是model2中真正干活的组件,它解决的是做什么的问题,然后由它通过调用相关的业务组件(模型)来完成相应的业务,业务组件解决的是如何做的问题。对于action对象该划分到控制层还是模型层的问题,其实这是有所争议的。个人比较赞成把它归到控制层中去,因为它实际上并不执行具体的业务,只是调用相关的业务模型对象来处理罢了,换句话说,它不应该包含过多的业务逻辑,而应该只是简单地收集客户端传过来的数据,并将这些数据传给具体的业务处理对象来处理,最后,由它决定跳转到那个url,并由主控servlet执行跳转。确切的来说,我认为它可以理解为是控制层与具体model对象的适配器。
优点:解耦,分类。将视图和业务代码分离。结构清晰,分工明确,适合中大型
确定:执行效率相对较低,代码量大,重复代码多