`

《研磨struts2》 第一章 Struts2概述 之 MVC模式

阅读更多

1.1  MVC模式

1.1.1  MVC模式简介

MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而得到更好的开发和维护效率。

       在MVC模式中,应用程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。其中,模型部分包含了应用程序的业务逻辑和业务数据;视图部分封装了应用程序的输出形式,也就是通常所说的页面或者是界面;而控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。

MVC模式的这三个部分的职责非常明确,而且相互分离,因此每个部分都可以独立的改变而不影响其他部分,从而大大提高了应用的灵活性和重用性。

1.1.2  MVC模式基础

在MVC模式中,一个应用被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分,接下来认识一下这三个部分。

1:首先看一下模型、视图、控制器各部分的作用

  • 模型(Model):负责封装应用的状态,并实现应用的功能。通常又分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息、用户信息等;而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等。
  • 视图(View):用来将模型的内容展现给用户,用户可以通过视图来请求模型进行更新。视图从模型获得要展示的数据,然后用自己的方式展现给用户,相当于提供界面来与用户进行人机交互;用户在界面上操作或者填写完成后,会点击提交按钮或是以其它触发事件的方式,来向控制器发出请求。
  • 控制器(Controller):用来控制应用程序的流程和处理视图所发出的请求。当控制器接收到用户的请求后,会将用户的数据和模型的更新相映射,也就是调用模型来实现用户请求的功能;然后控制器会选择用于响应的视图,把模型更新后的数据展示给用户。

2:模型和视图的关系

在MVC中,模型和视图是分离的,通常视图里面不会有任何逻辑实现;而模型也是不依赖于视图的,同一个模型可能会有很多种不同的展示方式,也就是同一个模型可以对应多种不同的视图。

这种例子比比皆是,例如,在windows操作系统上浏览文件夹时,文件夹就那些,数据并没有变化,但是展示方式就有多种,比如大图标、小图标、详细信息等等多种展示方式。以tomcat7文件夹下的文件为例,按照不同的展示方式,如图1.1所示:

 

图1.1一个模型对应多个视图

模型负责输出的内容,而视图负责输出的形式,模型不依赖于视图,模型与视图是解耦的。因此在修改视图,也就是显示方式的时候,不必关心模型,而只需要直接修改视图的展示方式即可。

3:MVC的组件关系图

MVC的组件关系如图1.2所示:

 

图1.2 MVC组件关系图

MVC的组件关系图描述了模型、视图、控制器这三个部分的交互关系,下面按照交互顺序来详细描述一下它们的交互关系:

(1)首先是展示视图给用户,用户在这个视图上进行操作,并填写一些业务数据

(2)然后用户会点击提交按钮,来发出请求

(3)视图发出的用户请求会到达控制器,在请求中包含了想要完成什么样的业务功能以及相关的数据。

(4)控制器会来处理用户请求,会把请求中的数据进行封装,然后选择并调用合适的模型,请求模型进行状态更新,然后选择接下来要展示给用户的视图。

(5)模型会去处理用户请求的业务功能,同时进行模型状态的维护和更新

(6)当模型状态发生改变的时候,模型会通知相应的视图,告诉视图它的状态发生了改变。

(7)视图接到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照视图本身的展示方式,把这些数据展示出来。

接下来就是等待用户下一次操作,再次从头轮回了。

1.1.3  MVC模式作用

在早期开发中,有一些程序员没有认识到MVC模式带来的好处,在开发的时候不遵守MVC模式。这样做的结果就是程序结构划分不明确,各个部分功能混乱,在业务功能发生变更时,无论是业务逻辑修改还是显示形式修改,都要修改很多的类,“牵一发而动全身”,导致软件的开发和维护效率低下,错误百出。

而遵循MVC模式来开发系统,就会极大的避免上述问题的出现。MVC模式的核心手段是解耦,MVC模式通过仔细的划分功能,把整个应用程序划分成模型、视图、控制器三个部分,然后严密控制三个部分之间的通信,从而得到一个结构清晰、功能分布合理、可重用、可扩展、可维护的应用程序。

因此,使用MVC模式,可以获得以下好处:

  • 低耦合性:在MVC模式中,模型和视图是解耦的,模型不会依赖于视图,而视图也仅仅是从模型中获取需要展示的数据,并不会与模型的逻辑处理相关联。
  • 更低的开发成本:由于MVC模式帮我们清楚的划分了各部分的职责,就可以让程序员各司其职,Java程序员只关心业务逻辑的实现,也就是模型部分;而界面程序员只关心页面展示,也就是视图部分即可。
  • 更好的可维护性:MVC模式划分出明晰的模型和视图部分,并使其解耦,在软件需求发生变更的时候,就可以各自独立的改变而不会相互影响,使得程序更容易维护和扩展。

1.1.4  Model2模型中的MVC

在Java的Web开发中,通常把Servlet+JSP+JavaBean的模型称为Model2模型,这是一个完全遵循MVC模式的模型,基本划分如下:

  • JavaBean作为模型,既可以作为数据模型来封装业务数据,又可以作为业务逻辑模型来包含应用的业务操作。其中,数据模型用来存储或传递业务数据,而业务逻辑模型接收到控制器传过来的模型更新请求后,执行特定的业务逻辑处理,然后返回相应的执行结果。
  • JSP作为表现层,负责提供页面来为用户展示数据,提供相应的表单(Form)来用于用户的请求,并在适当的时候(比如用户点击提交的按钮),向控制器发出用户请求来请求模型进行更新。
  • Serlvet作为控制器,用来接收用户提交的请求,然后获取请求中的数据,将之转换为业务模型需要的数据模型,然后调用业务模型相应的业务方法,请求模型进行更新,同时根据业务执行结果来选择要返回的视图,也就是选择下一个页面。

Model2实现MVC的基本结构图如下图所示:

 

图1.3 Model2中的MVC

那么,在用户发出一个请求后,Servlet+JSP+JavaBean模型基本的响应顺序是怎样的呢?

当用户发出一个请求后,这个请求会被控制器Servlet接收到;Servlet将请求的数据转换成数据模型JavaBean,然后调用业务逻辑模型JavaBean的方法,并将业务逻辑模型返回的结果放到合适的地方,比如请求的属性里;最后,根据业务逻辑模型的返回结果,由控制器来选择合适的视图(JSP),由视图把数据展现给用户。

 

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/3984.html

欢迎访问http://sishuok.com获取更多内容

16
5
分享到:
评论
9 楼 yunzhu 2012-09-20  
yulaoda12 写道
图在哪里啊啊啊啊啊啊啊啊啊 

咋不有图片啊
8 楼 yulaoda12 2012-08-14  
图在哪里啊啊啊啊啊啊啊啊啊 
7 楼 ccc17638 2012-08-09  
不是很能理解。。。是不是bean只能封装数据,不能对数据进行处理。貌似所有涉及到的操作都是C层来做。是不是可以理解v就是jsp页面,bean就是对应数据库表.
6 楼 hml988 2012-07-20  
讲得挺详细的。基本能看懂。
5 楼 liguocai2009 2012-07-19  
可能由于我对WEB MVC的理解和对WIN32 UI MVC的理解有矛盾导致的。
WEB的MVC绝对不是楼主所说的那样。
4 楼 liguocai2009 2012-07-19  
MVC最关键的还是理解VIEW。

VIEW只是个模板,没有数据。必须有其他组件赋予它数据。

这个组件其实就是controller!只是大部分情况下,由于MVC三者存在于容器,各个组件都可以通过容器获取数据,导致VIEW无需要controller,直接和MODEL通讯就生成最终展现界面的错觉。
3 楼 liguocai2009 2012-07-19  
将Model再细分为DataModel和BusinessLogicModel的话,那么视图层读取DataModel是合理的,直接调用BusinessLogicModel的话,总感觉怪怪的。

控制器的作用,只是剩下两个:
1 VIEW请求的时候,通知对应的BusinessLogicModel业务方法,BusinessLogicModel方法则更新DataModel;
2 BusinessLogicModel业务方法执行完毕的时候,通知对应的VIEW展示,VIEW会读取到最新的DATAMODEL。

但是实际上VIEW可以同MODEL相互通信!!!
VIEW直接调用BUSINESS_MODEL的方法,更新DATA_MODEL;
DATA_MODEL一旦变化,马上通知VIEW改变。
控制器的作用何在???
2 楼 liguocai2009 2012-07-19  
Model能够通知View变化,View能直接查询model,我认为这都是耦合。
Model应该要和VIEW没有直接关系才对。

1 楼 baogaolion 2012-06-27  
 

相关推荐

    研磨Struts2配书视频对应的演示源代码

    这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中理论知识而提供的实际示例代码。 首先,让我们深入理解Struts2的核心概念和技术特性: 1. **...

    研磨Struts2

    ### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。

    研磨struts2 高清版

    由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。

    《研磨Struts 2》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...

    研磨Struts2配书视频对应的PPT

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建高效、可扩展且易于维护的Web应用的工具和组件。《研磨Struts2》这本书是专门针对Struts2框架的学习...

    研磨struts

    书中详细介绍了如何创建一个简单的Struts2应用,从Servlet+JSP+JavaBean实现MVC模式,然后逐步过渡到使用Struts2框架来简化这一过程。 5. **Struts2架构**:Struts2的系统架构包含ActionServlet、FilterDispatcher...

    java电子读物

    5. **《研磨Struts2的博客文章》**:Struts2是Java企业级应用中常用的MVC框架。这本书可能是由一系列博客文章整理而成,详细讲解了Struts2的架构、配置、控制器、视图和模型的使用,以及如何进行实际项目开发。对于...

    关于Java的三本书籍

    这三本书籍——《JVM深入理解java虚拟机》、《Spring揭秘》和《研磨Struct2》分别涵盖了Java技术栈中的核心组件、企业级应用开发框架以及一个流行的Web框架,对于深化Java知识体系具有极大的帮助。 首先,《JVM深入...

Global site tag (gtag.js) - Google Analytics