MVC思想概叙
随着应用系统的逐渐增大,系统的业务逻辑复杂度是以几何的方式增长,在这种情况下,如果依然把所有的业务逻辑都放在JSP页面中,那将成为一场恶梦。
MVC思想将应用中各个组件按照功能来进行分类,不同的组将使用不同的技术来担当,甚至推荐了严格分层,不同的组件被严格的分层在所在的层内,各层之间是以松耦合的方法来组织在一起,从而提供了良好的封装。
1.传统的Model 1和Model 2
JavaWeb经历了Model 1和Model 2两个阶段:
Model 1模式下,整个Web应用几乎全部是由JSP页面来组成的,JSP页面除了接受用户端的请求,还要对请求处理后直接做出相应,用少量的JavaBean来处理数据库的连接,和数据库的访问。该模式的局限性非常明显:JSP页面身兼View和Controller两种角色,将控制逻辑和视图逻辑杂在一起,从而导致了代码的复用率非常低,增加了应用的扩展性和维护的难度。
Model 2已经是基于MVC架构的设计模式,在Model 2中,Servlet作为前端控制器,负责接受客户端的请求,在Servlet中只包含了逻辑控制和简单的前端控制;然后,调用JavaBean来完成实际的逻辑处理;最后,转发到相应的JSP页面显示逻辑

Model2的流程
在Model2的模式下,JSP不再承担控制器的责任,它仅仅是表现层的角色,仅仅用于将结果呈现给用户,JSP页面的请求与Servlet(控制器)交互,而Servlet是负责与后台的JavaBean通信。在Model2的模式下,模型(model)由JavaBean来充当,视图(view)由JSP来充当,而控制器(Controller)是由Servlet来充当。
对于非常小型的Web站点,如果后期的更新,维护工作不是特别的大,可以使用model1的模式来开发应用,而不是使用Model2的模式,虽然Model2提供了更好的可展性及可维护性,但是增加了前期的开发成本,从某种程度上来讲,Model2 为了降低后期的维护的复杂度,却导致了前期开发的更高的复杂度。
2.MVC思想及其优势
MVC的思想不是Java语言特有的思想,也并不是Web应用所特有的思想,而是所有面向对象程序设计语言都应该遵循的规范。
MVC思想将一个应用分为三个基本部分:Model,View,Controller,这三个部分以最少的耦合协同工作,从而提高应用的扩展性及可维护性。
在经典的MVC模式中,事件是由控制器来处理,控制器根据事件的类型改变模式或者视图,反之亦然,具体的说,每个模型对应一系列的视图列表,这种对应关系通常是由注册来完成,既:把多个视图注册到同一个模型,当模型发生改变时,模型向所有注册的视图发起通知,接下来,视图从对相应的模型中获取信息,然后完成视图的更新。
经典的MVC模式和Web的MVC思想也存在一定的差别,引起差别的原因是因为Web应用是一种请求/响应模式下的应用,对于请求/响应的应用,如果用户不对应用发出请求,视图无法主动更新自己。
MVC思想概叙的更多相关文章
- java web mvc思想介绍
1.首先简介一下什么是MVC思想. 在百度百科里面对MVC的说明,MVC全名是Model View Controller.是模型(model)-视图(view)-控制器(controller)的缩写. ...
- MVC思想架构的简单自定义UITableViewCell
在iOS的开发过程中,架构思想是很重要的一部分,目前的主流应该分为MVC与MVVM两种,在这里不做过多的区分,有兴趣的同学可以看看唐巧大神的一篇文章<被误解的MVC和被神化的MVVM& ...
- MVC思想概述
一. 传统Model1和Model2 Model1:整个web应用几乎全部用JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应.用少量的javaBean来处理数据库链接,数据库访问 ...
- iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)
一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...
- angularJS中的MVC思想?
mvc 思想: 将应用程序的组成,划分为三个部分:model , controller 和 view ; - 控制器的作用是用来初始化模型用的: - 模型就是用于存储数据的: - 视图是展示数据的: ...
- javaBean和mvc思想
JavaBean, 咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提供无参数的构造方法 ...
- 全局变量变为局部变量 & MVC思想
1 函数中的全局变量如何变成局部变量? 全局变量之间会相互骚扰.所以在代码中不要用全局变量.ES6之前只有函数里面有全局变量. 全局变成局部变量怎么变? 把代-放在一个函数如中,再.call()执行一 ...
- 简洁的MVC思想框架——Nancy(环境配置与Get操作)
Nancy官网——https://github.com/NancyFx/Nancy 概述:Nancy是一个开源的Web轻型框架内核符合MVC思想,有开发方便,路由简单的特点,而且功能齐全 起步:Hel ...
- MVC思想
MVC英文即Model-View-Controller,即把一个应用的输入.处理.输出流程按照Model.View.Controller的方式进行分离,这样一个应用被分成三个层--模型层.视图层.控制 ...
随机推荐
- 161-PHP 文本替换函数str_replace(二)
<?php $str='Hello world!'; //定义源字符串 $search='o'; //定义将被替换的字符 $replace='O'; //定义替换的字符串 $res=str_re ...
- 067-PHP使用匿名函数
<?php $func=function ($x,$y){ //匿名函数与变量绑定 return $x+$y; }; echo '5+6='.$func(5,6); //使用匿名函数 echo ...
- jquery特效 - 网站水波纹
1,index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Session.Abandon与Session.Clear之间的区别
Session.Clear()就是把Session对象中的所有项目都删除了,Session对象里面什么都没有.但是Session对象还保留. Session.Abandon()就是把当前Session ...
- Upgrade to 17.1 from 17.0 problem:UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 50: ordinal not in range(128)
最近 gentoo 从 17.0 更新到 17.1, 需要手动进行升级配置,使用 unsymlink-lib -p --finish 这一步的时候报错,报错如下: /usr/lib/python-ex ...
- [题解] Luogu P4721 【模板】分治 FFT
分治FFT的板子为什么要求逆呢 传送门 这个想法有点\(cdq\)啊,就是考虑分治,在算一段区间的时候,我们把他分成两个一样的区间,然后先做左区间的,算完过后把左区间和\(g\)卷积一下,这样就可以算 ...
- 给指定的div增加滚动条
这次的需求是给一个指定的div(里面有个table表格)增加上下.左右的滚动条 通过查找资料后找到了一个可用的方法,代码如下: <!--div比table大小要小才会显示--> <d ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 变量作用域
作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量. 在函数参数的定义中声明的变量,称为形式参数. 在所有函数外部声明的变量,称为全局变量. 局部 ...
- ArchLinux安装KDE桌面
ArchLinux安装KDE桌面 一.链接网络 1.有线 # dhcpcd 2.无线 # wifi-menu 3.检查 # ping www.baidu.com 二.安装X服务 # pacman -S ...
- POJ 1416:Shredding Company
Shredding Company Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4713 Accepted: 2714 ...