【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照
本文以图形化的方式,从‘执行机制’方面对照传统WebForm站点和MVC站点。
请參看下面图形:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpamluZzIwMTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" style="font-family:FangSong_GB2312; font-size:18px">
一、执行机制
当我们訪问一个站点的时候,浏览器和server都是做了哪些动作呢?
(本文仅仅是提供一个简单的执行过程,有兴趣的找资料研究一下复杂的网络过程。)
(一)WebForm站点执行机制
如果为:www.baidu.com/index.aspx
1、Http请求(物理地址:index.aspx)
①发送请求
浏览器向server发送请求报文。此时由IIS虚拟文件夹接受。(通过配置过IIS,把站点挂载在server上。通过訪问虚拟文件夹的方式訪问站点的。)
②转交请求
server端的IIS软件接收到请求后。把请求交给.NET FrameWork进行处理
③创建页面类对象
.NET FrameWork依据请求的地址index.aspx,会创建相应的index_aspx类的对象(页面对象)。
IIS的内部机制:
- 实现一个IHttphandler的接口
- 该接口实现一个ProcessRequest方法
- 该方法会调用相应页面的Page_load方法
- 处理的业务逻辑或者是訪问数据库的代码
- 要输出的Html或者其他内容
2、返回给浏览器
①转交回复
通过IIS传输出给浏览器,要输出的html元素或其它内容(html+js+css等)
②解析为图形界面
浏览器解析html代码。并翻译为图形化界面
(二)MVC站点的执行机制
如果为:www.baidu.com/news/index
1、Http请求(逻辑地址:news/index)
①发送请求(news/index)
②转交请求(同上)
③创建类对象+方法
.NET FrameWork依据路由配置。解析URL,并创建news类的对象,并调用对象的index方法。通过View方法载入视图。然后訪问视图目录下的index.cshtml
2、返回给浏览器(同上)
二、差别
1、请求方式
①WebForm:index.aspx页面
www.baidu.com/index.aspx
在用户看来请求的是index.aspx页面,实际上server端执行的是index.aspx相应的类(前台页面类的对象)。先调用ProcessRequest方法。然后调Page_Load方法
②MVC:类名+方法名
www.baidu.com/news/index
2、server端创建对象
①webForm:页面类对象
server端创建index.asp的前台页面类的对象‘index.aspx’
②MVC:类对象
MVC:创建news类对象,并调用Index方法。
.NET FrameWork依据路由配置。解析URL。并创建news类的对象。并调用对象的index方法。通过View方法载入视图,然后訪问视图目录下的index.cshtml
3、传值方式
①WebForm:CodeBehand
前台-->后台
前台页面继承于后台页面,能够通过<%...%>方式,訪问 台页面公开的属性(强耦合)
后台-->前台
包括runat=Server控件的前台页面,都会以变量的方式存在于后台类中。供后台调用
②MVC: ViewData
把ViewData当作一个中间类在Controller和View之间数据传输。优点:强类型视图(将在兴许文章中进行论述)。
三、总结
本文分别从下面方面,对照了传统WebForm站点和MVC站点的差别:请求方式、创制方式、server创建对象。
尽管如此。但WebForm和MVC都是基于ASP.NET管道模型上的两种不同的开发方式。
(文中粗粒度的知识点,将在兴许文中陆续展开)
【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照的更多相关文章
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照(颠覆性理论)
在[.NET特供-第三季]系列博客中的第一篇<ASP.NET MVC系列:MVC与三层图形对照>发表之后,引起了领导的注意.同一时候,开发小组内部在交流MVC和三层之间关系的 ...
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
近期在开发小组在研究:BS项目中是利用'MVC框架'还是继续沿用'三层'的问题. 由于曾经的.NET项目大多数都是利用三层开发的,所以大多数人都可以对三层进行熟练地运用.而项目的開始我们也曾听说过MV ...
- MVC系列1-MVC基础 (ASP.NET)
终于决定写一个系列的文章了,最开始其实是准备写一下WPF的,因为我这两年一直在做WPF,对WPF的喜爱自然是无以言表.但是由于我所在的地区对WPF的普及不是很广泛,所以,被迫又开始做起来web,但是我 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则
目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...
- 《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
接着上一篇:<ASP.NET SignalR系列>第四课 SignalR自托管(不用IIS) 一.概述 本教程主要阐释了如何在MVC下使用ASP.NET SignalR. 添加Signal ...
- ASP.NET MVC系列:从Controller访问Model数据
在项目解决方案中,添加一个MoviesController控制器,选择对应的模板,和模型类以及数据上下文:关于如何添加模型类和数据上下文,我们在ASP.NET MVC系列:添加模型中已经介绍过
随机推荐
- 读书笔记_Effective_C++_条款三十二:确定你的public继承继承塑模出is-a关系
这一条款是说的是公有继承的逻辑,如果使用继承,而且继承是公有继承的话,一定要确保子类是一种父类(is-a关系).这种逻辑可能与生活中的常理不相符,比如企鹅是生蛋的,所有企鹅是鸟类的一种,直观来看,我们 ...
- 指针式压力表自动读数:Auto Read the Value of Manometer
指针式压力表的自动读数,用摄像头对准压力计,然后实时自动地读取压力计的读数.视频效果如下视频所示,红色数字为识别到的指针读数.
- Git_忽略特殊文件
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里 ...
- Mysql 5.6 慢日志配制
一.配制my.cnf(/etc/my.cnf) slow_query_log=onlong_query_time=1slow_query_log_file=/var/log/slow_query.lo ...
- andriod 文本居中: android:gravity="center"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- 使用Dictionary泛型集合封装业务逻辑判断 z
C#2.0 提供了Dictionary 泛型类,它提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及其相关联的键组成.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictio ...
- windowsmobile 开发环境
Windows Mobile 6开发环境的配置过程 需要的文件列表:1.Visual Studio 2005 Professional及更高的版本(Visual Studio 2005 Express ...
- Selenium2+python自动化33-文件上传(send_keys)
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种 ...
- Spring Quartz 持久化解决方案
Quartz是实现了序列化接口的,包括接口,所以可以使用标准方式序列化到数据库. 而Spring2.5.6在集成Quartz时却未能考虑持久化问题. Spring对JobDetail进行了封装,却未实 ...
- 利用UIWebView获取userAgent需要注意的地方
网络通信有时候需要传递参数userAgent,iOS中获取userAgent很简单. UIWebView* webView = [[UIWebView alloc] initWithFrame:CGR ...