【.NET特供-第三季】ASP.NET MVC系列:传统WebForm网站和MVC网站运行机制对比

来源:互联网 发布:数据采集器作用 编辑:程序博客网 时间:2024/05/21 11:34

本文以图形化的方式,从‘运行机制’方面对比传统WebForm网站和MVC网站。

请参看以下图形:


一、运行机制

当我们访问一个网站的时候,浏览器和服务器都是做了哪些动作呢?

(本文只是提供一个简单的运行过程,有兴趣的找资料研究一下复杂的网络过程。)

 

(一)WebForm网站运行机制

假设为:www.baidu.com/index.aspx

1、Http请求(物理地址:index.aspx)

①发送请求

    浏览器向服务器发送请求报文,此时由IIS虚拟目录接受。(通过配置过IIS,把网站挂载在服务器上,通过访问虚拟目录的方式访问网站的。)

②转交请求

    服务器端的IIS软件接收到请求后,把请求交给.NET FrameWork进行处理

③创建页面类对象

    .NET FrameWork根据请求的地址index.aspx,会创建对应的index_aspx类的对象(页面对象)。

IIS的内部机制:

  1. 实现一个IHttphandler的接口
  2. 该接口实现一个ProcessRequest方法
  3. 该方法会调用对应页面的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页面,实际上服务器端运行的是index.aspx对应的类(前台页面类的对象),先调用ProcessRequest方法,然后调Page_Load方法

②MVC:类名+方法名

www.baidu.com/news/index

2、服务器端创建对象

①webForm:页面类对象

服务器端创建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网站的区别:请求方式、创制方式、服务器创建对象。

虽然如此,但WebForm和MVC都是基于ASP.NET管道模型上的两种不同的开发方式。

    (文中粗粒度的知识点,将在后续文中陆续展开)

    



2 0