1.1.2 Model1和Model2
对于Java阵营的动态Web编程技术而言,经历了所谓的Model 1和Model 2时代。
所谓Model 1就是JSP大行其道的时代,在Model 1模式下;整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应;用少量的JavaBean来处理数据库连接、数据库访问等操作。图1.3显示了Model 1的程序流程。
图1.3 Model 1的程序流程
Model 1模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度来看,它的局限性非常明显:JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。
早期有大量使用ASP和JSP技术开发出来的Web应用,这些Web应用都采用了Model 1架构。
Model 2已经采用了MVC的设计:在Model 2架构中,Servlet作为前端控制器,负责接收客户端发送的请求,在 Servlet 中只包含控制逻辑和简单的前端处理;Servlet 调用后端JavaBean来完成实际的逻辑处理;最后转发到相应的JSP页面负责显示。Model 2的程序流程如图1.4所示。
图1.4 Model 2的程序流程
正如图1.4中看到的,Model 2下JSP不再承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户,JSP页面的请求与Servlet(控制器)交互,而Servlet负责与后台的JavaBean通信。在Model 2模式下,模型(Model)由JavaBean 充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。
由于引入了MVC模式,使Model 2具有组件化的特点,更适用于大规模应用的开发,但也增加了应用开发的复杂程度。原本需要一个简单的JSP页面就能实现的应用,在Model 2中被分解成多个协同工作的部分,需要花更多时间才能真正掌握其设计和实现过程。
注意
对于非常小型的 Web 站点,如果后期的更新、维护工作不是特别大,则应该使用Model 1模式进行开发。虽然Model 2提供了更好的可扩展性及可维护性,但会增加前期的开发成本。从某种程度上讲,Model 2为了降低系统后期维护的复杂度,却导致前期开发的更高复杂度。