学习模型-视图-控制器MVC模式

时间:2023-03-08 18:19:19
学习模型-视图-控制器MVC模式

1、MVC简介

  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

  模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。

  Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

  View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

  Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

  MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。

  简单说一下,三层架构与MVC区别。

  三层架构是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。

  MVC和三层架构相同的地方是都有一个表现层,即界面。而其他两个地方是不同的。在三层架构中没有定义Controller的概念。这是最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

2、Java Web应用程序的主要组件

(1)JSP组件:

  JSP是一种动态网页技术。它把HTML页面中加入Java脚本,以及JSP标签构成JSP文件。当浏览器请求某个JSP页面时,Tomcat会把JSP页面翻译为Java文件。然后将它编译为class文件,接着执行它,把生成的HTML页面返回到客户端显示。

(2)Servlet组件:

  Servlet运行于Web容器中。它可以被Web容器动态加载,接收浏览器请求,调用其他组件处理请求,然后把处理结果返回。当浏览器访问某个Servlet时,Web容器将会创建一个ServletRequest对象和ServletResponse对象,并且把用户的请求信息封装在ServletRequest对象中。然后把这两个对象作为参数传输给Servlet的特定方法中。在该方法中处理请求,把处理结果封装在ServletResponse对象中,返回给Web容器。最后Web容器把结果返回到浏览器去解析、显示。

(3)JavaBean组件:

  JavaBean组件是一种符合特定规范的Java对象。在JavaBean组件中定义一系列的属性,并且每个属性都提供setter和getter方法,这样就可以使用该组件存储一些中间数据。例如ServletRequest的请求信息、从数据库中查询出来的信息等。

(4)Web服务器

  Web服务器用来处理HTTP请求,并返回HTTP数据。它主要用来和浏览器进行交互,给用户提供服务。比如Tomcat服务器。

3、Java Web解决方案(开发方法)

(1)JSP开发

(2)JSP+JavaBean开发

(3)JSP+Servlet+JavaBean开发

(4)其他的一些开发方法。

4、常用的Java Web的MVC框架

(1)JSP+Servlet+JavaBean

  这是最基本的Java Web基于MVC的开发框架,JSP主要用于界面显示,相当于View;JavaBean用于和数据库进行交互,存取数据,相当于Model;Servlet用于获取界面输入的信息,通过得到JavaBean和数据库交互获取的数据,传到JSP进行显示。

(2)Struts2

  通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。Model部分还是使用JavaBean,View部分使用JSP实现,Controller部分使用Struts提供的ActionServlet来实现。

(3)Spring MVC

  Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。模型(Model )封装了应用程序的数据和一般他们会组成的POJO。视图(View)是负责呈现模型数据和一般它生成的HTML输出,客户端的浏览器能够解释。控制器(Controller )负责处理用户的请求,并建立适当的模型,并把它传递给视图渲染。

(4)SSH

  上网查了很多资料,下面是个人理解。

  使用SSH进行Java Web开发,获取页面数据并处理流程:JSP → Action → Service → Dao,Dao → Service → Action → JSP。其中JSP →Action是获取页面数据,Action→ Service→Dao是把Action得到的数据交由Service层进行逻辑处理,进行逻辑处理需要与数据库交互,便调用Dao进行数据访问。处理完成,返回结果,Action根据结果转到不同的JSP页面。所以,个人觉得SSH既涵盖了MVC,也涵盖了三层架构。三层架构:Dao是数据访问层,Service是业务逻辑层,JSP是表示层。MVC:Service和Dao组成Model,Action是Controller,JSP是View。