本文以圖形化的方式,從‘執行機制’方面對照傳統WebForm站點和MVC站點。
請參看下面圖形:
一、執行機制
當我們訪問一個站點的時候,瀏覽器和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管道模型上的兩種不同的開發方式。
? ? (文中粗粒度的知識點,將在興許文中陸續展開)
? ??