1、第八讲第八讲 MVC设计模式设计模式一、一、MVC设计模式与设计模式与J2EE架构架构MVCMVC设计模式的思想设计模式的思想 MVCMVC的英文全称为的英文全称为Model-View-ControllerModel-View-Controller,即 把 一 个 信 息 系 统 的 应 用 按 照 模 型即 把 一 个 信 息 系 统 的 应 用 按 照 模 型( M o d e lM o d e l ) 、 视 图 () 、 视 图 ( V i e wV i e w ) 、 控 制 器) 、 控 制 器(ControllerController)的方式进行分离,这样一个)的方式进行分离,这
2、样一个应用就被分成三层:模型层、视图层和控制应用就被分成三层:模型层、视图层和控制层。层。MVCMVC组件类型的关系和功能组件类型的关系和功能J2EEJ2EE设计的思想设计的思想 J2EEJ2EE(Java 2 Enterprise Java 2 Enterprise EditionEdition)是)是SUNSUN公司综合了许多大型公司如公司综合了许多大型公司如IBMIBM、HPHP等所定等所定义出来的企业级应用信息系统的规范义出来的企业级应用信息系统的规范。 J2EEJ2EE设计的目的是将企业计算应用领域中不设计的目的是将企业计算应用领域中不变的东西先定义好,比如整体结构和一些主变的东西先
3、定义好,比如整体结构和一些主要职责(如数据库操作、事务跟踪和安全要职责(如数据库操作、事务跟踪和安全等),而剩余的变化的东西,即针对这个领等),而剩余的变化的东西,即针对这个领域中具体应用所产生的不同的变化需求,就域中具体应用所产生的不同的变化需求,就是是J2EEJ2EE程序员所要做的。程序员所要做的。二、二、MVC的两种模型的两种模型MVC Model 1体系结构体系结构MVC Model 2体系结构体系结构MVC MVC 设计模式的优缺点设计模式的优缺点 具有多个视图对应一个模型的能力。具有多个视图对应一个模型的能力。 由于模型返回的数据不带任何显示格式,因而这些由于模型返回的数据不带任何
4、显示格式,因而这些模型也可直接应用于接口的使用。模型也可直接应用于接口的使用。 有时改变其中的一层就能满足应用的改变。有时改变其中的一层就能满足应用的改变。 还有利于软件工程化管理。还有利于软件工程化管理。 设计实现并不十分容易,而且对开发人员的要求比设计实现并不十分容易,而且对开发人员的要求比较高。较高。 MVCMVC是构建信息系统非常好的基本设计模式,至少是构建信息系统非常好的基本设计模式,至少将业务处理与显示分离,强迫将应用分为模型、视将业务处理与显示分离,强迫将应用分为模型、视图以及控制层图以及控制层, , 使得设计者和开发者会认真考虑应使得设计者和开发者会认真考虑应用的额外复杂性,把
5、这些想法融进到架构中,增加用的额外复杂性,把这些想法融进到架构中,增加了应用的可拓展性。了应用的可拓展性。三、三、Apache StrutsStruts框架的组件结构图框架的组件结构图StrutsStruts框架框架 ModelModel就是在对用户请求的整个控制过程当中,真就是在对用户请求的整个控制过程当中,真正处理用户请求并保存处理结果的对象,在整个过正处理用户请求并保存处理结果的对象,在整个过程中,我们一般利用程中,我们一般利用JavaBeanJavaBean来把一些信息保存起来把一些信息保存起来以便在各个对象之间传递。来以便在各个对象之间传递。 许多的许多的J2EE WebJ2EE W
6、eb应用程序都是依靠应用程序都是依靠JSPJSP技术来创建技术来创建显示层的。显示层的。StrutsStruts除了运用除了运用JSPJSP来创建视图之外,来创建视图之外,它还包含有非常丰富的它还包含有非常丰富的JSPJSP标签库,可以用来创建标签库,可以用来创建国际化的应用程序。国际化的应用程序。 ControllerControllerActionServletActionServlet在这个框架中扮演在这个框架中扮演“交通警察交通警察”的角色,当客户端与服务器有交互动的角色,当客户端与服务器有交互动作时,都由它来控制。作时,都由它来控制。StrutsStruts的的MVCMVC工作机制工
7、作机制控制组件控制组件视图组件视图组件模型组件模型组件ActionServletActionActionFormJSP文件文件JavaBeanEJB1. HTTP请求请求3.调用(调用(Action作参数)作参数)2.创建创建4.调用模型调用模型5.续传到视图续传到视图StrutsStruts的优缺点的优缺点 StrutsStruts跟跟TomcatTomcat、TurbineTurbine等诸多等诸多ApacheApache项目一样,项目一样,是开源软件是开源软件。 TaglibTaglib是是StrutsStruts的标记库,灵活运用,能大大提高的标记库,灵活运用,能大大提高开发效率;页面导航将是未来的一个发展方向。开发效率;页面导航将是未来的一个发展方向。 StrutsStruts将将MVCMVC的的ControllerController一分为三,在获得结构一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。更加清晰的同时,也增加了系统的复杂度。 StrutsStruts适合于各种大小的项目,当然,对于大型项适合于各种大小的项目,当然,对于大型项目,它所体现出来的优势更加明显。目,它所体现出来的优势更加明显。