Web应用中的MVC设计模式

Published: by Creative Commons Licence (Last updated: )

Web应用中的MVC设计模式

《Tomcat与Java Web开发技术详解(第2版)》.(孙卫琴).pdf

MVC: Model-View-Controller,模型-视图-控制器。它是Xerox PARC为编程语言Smalltalk-80发明的一种软件设计模式。

Struts实现了MVC。

Struts是Apache开源组织提供的一项开放源码工程,它为JavaWeb提供了现成的通用的MVC框架结构。 如果没有Struts,开发人员将不得不花大量的时间和精力设计和开发自己的框架。

MVC设计模式简介

MVC是一种设计模式,它强制性的把应用程序的数据展示、数据处理和流程控制分开。 MVC把应用程序分成3个核心模块:模型、视图和控制器。

图片:MVC设计模式

MVC设计模式.png

视图

视图:是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接收模型发出的数据更新事件,从而对用户界面进行同步更新。

对于基于请求/响应方式的Web应用,模型位于Web服务器端,视图位于用户浏览器端。目前(2009)还无法做到模型向视图主动发出数据更新事件,以使用户界面能自动刷新。

模型

模型是应用程序的主体部分。模型表示业务数据业务逻辑,一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了模型的可重用性。

控制器

控制器负责应用的流程控制。所谓流程控制,这里是指接受用户的输入并调用相应的模型和视图去完成用户的需求。 当Web用户单击Web页面中的“提交”按钮来发送HTML表单时,控制器会接收请求并调用相应的模型组件去处理请求,然后再调用相应的视图来显示模型返回的数据。

MVC处理过程

首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后模型根据客户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。

MVC的优点

在一般的JSP网页中,尝试将数据库数据库访问代码和表示层代码分离,需要精心设计和不断尝试。MVC从根本上强制性的将他们分开。

  • 首先:多个视图能共享一个模型。比如Web网站同时提供Web界面和Wap界面(用于手机),但可以共享一个模型。
  • 其次:模型是自包含的,与控制器和视图保持相对独立,所以可以方便地改变应用程序的业务数据和业务规则。比如可以方便的从MySQL移植到Oracle,视图都会正确显示。
  • 此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,还可为构造应用程序提供强有力的组合手段。

MVC的适用范围

MVC不适合小型应用程序。

JSP Model 1和JSP Model 2

为了解决Web应用的一系列问题(引入MVC),SUN公司先后制定了两种设计模式,分别为JSP Model1和JSP Model2。直到JSP Model2问题才得到了改观。

JSP Model 1 中JSP既要负责流程控制,还要复制生产用户界面,因此它要同时充当视图和控制器的功能。它适合简单应用的开发。

JSP Model 1.png

JSP Model 2 用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能。

  • Servlet:充当控制器的角色,负责处理客户请求,创建JSP页面需要使用的JavaBean对象,并根据客户请求选择合适的JSP页面返回给用户。
  • JSP:仅负责检索原先由Servlet创建的JavaBean对象,并把JavaBean对象包含的数据作为动态内容插入到静态模板中。
  • JavaBean技术实现模型的功能。

JSP Model 2.png

Struts概述

Struts是基于MVC的Web应用框架。

Struts实现MVC的机制

Struts实质上就是在JSP Model 2的基础上实现的一个MVC框架。

  • 模型:由实现业务逻辑的JavaBean或EJB组件构成
  • 控制器:由FilterDispatcher和Action来实现
  • 视图:由一组JSP文件构成

Struts实现的MVC框架.png