【.NET特供-第三季】ASP.NET MVC系列:傳統WebForm站點和MVC站點執行機制對照

本文以圖形化的方式,從‘執行機制’方面對照傳統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的內部機制:

  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頁面,實際上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管道模型上的兩種不同的開發方式。

? ? (文中粗粒度的知識點,將在興許文中陸續展開)

? ??



轉載于:https://www.cnblogs.com/yfceshi/p/6756255.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283778.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hdoj1045 Fire Net(二分圖最大匹配)

題意&#xff1a;給出一個圖&#xff0c;其中有 . 和 X 兩種&#xff0c;. 為通路&#xff0c;X表示墻&#xff0c;在其中放炸彈&#xff0c;然后炸彈不能穿過墻&#xff0c;問你最多在圖中可以放多少個炸彈&#xff1f; 這個題建圖有點復雜orz。 建圖&#xff0c;首先把每一行…

c++的命名空間

一.C的命名原則namespace是指標識符的各種可見范圍&#xff0c;c的所有標識符都被定義在一個名為std的namespace中。1.<iostream>和<iostream.h>是兩個不同的文件&#xff0c;后綴為.h的頭文件c標準已經明確提出不支持了&#xff0c;早些的實現將標準庫功能定義在全…

投阿里被拒,說跳槽太頻繁!三年兩個工作,問題真的那么大嗎?

什么樣的跳槽頻率才不算頻繁&#xff1f;一位網友發問&#xff1a;投阿里被拒&#xff0c;理由是跳槽太頻繁&#xff0c;不合適。三年兩個工作&#xff0c;問題真的那么大嗎&#xff1f;網友說&#xff0c;阿里對穩定性要求非常高&#xff0c;三年兩跳和五年三跳都是紅線&#…

Linux下防御DDOS攻擊的操作梳理

DDOS的全稱是Distributed Denial of Service&#xff0c;即"分布式拒絕服務攻擊"&#xff0c;是指擊者利用大量“肉雞”對攻擊目標發動大量的正常或非正常請求、耗盡目標主機資源或網絡資源&#xff0c;從而使被攻擊的主機不能為合法用戶提供服務。 DDOS攻擊的本質是…

為什么信息化 ≠ 數字化?終于有人講明白了

作者&#xff1a;石秀峰 來源&#xff1a;談數據&#xff08;ID&#xff1a;learning-bigdata&#xff09; 近期&#xff0c;我一做數字化咨詢的朋友&#xff08;化名老王&#xff09;遇到了一個頭痛的問題&#xff1a;話說老王的團隊近期接了一個大單——一大型制造業的數字化…

JAVA代碼—算法基礎:數獨問題(Sodoku Puzzles)

JAVA代碼—算法基礎&#xff1a;數獨問題&#xff08;Sodoku Puzzles&#xff09; 數獨問題&#xff08;Sodoku Puzzles&#xff09; 數獨游戲&#xff08;日語&#xff1a;數獨 すうどく&#xff09;是一種源自18世紀末的瑞士的游戲&#xff0c;后在美國發展、并在日本得以發揚…

Linux系統恢復

實驗目的&#xff1a;熟悉了前面的啟動流程&#xff0c;系統的一個大致的啟動流程是怎樣的&#xff0c;而其中牽扯到了些許文件&#xff0c;這些文件在系統啟動時用于銜接各個步驟&#xff0c;如果這些文件損壞或缺失&#xff0c;系統將不能正常啟動&#xff0c;這次寫的內容就…

PerfView專題 (第二篇):如何尋找 C# 中的 Heap堆內存泄漏

一&#xff1a;背景 上一篇我們聊到了如何去找 熱點函數&#xff0c;這一篇我們來看下當你的程序出現了 非托管內存泄漏 時如何去尋找可疑的代碼源頭&#xff0c;其實思路很簡單&#xff0c;就是在 HeapAlloc 或者 VirtualAlloc 時做 Hook 攔截&#xff0c;記錄它的調用棧以及分…

關于 extern C的說明

在用C的項目源碼中&#xff0c;經常會不可避免的會看到下面的代碼 1 #ifdef __cplusplus 2 extern "C" { 3 #endif 4 5 /*...*/ 6 7 #ifdef __cplusplus 8 } 9 #endif 它到底有什么用呢&#xff0c;你知道嗎&#xff1f;而且這樣的問題經常會出現在面試or筆試…

Nginx 面試 40 問

Nginx是一款輕量級的Web服務器、反向代理服務器&#xff0c;由于它的內存占用少&#xff0c;啟動極快&#xff0c;高并發能力強&#xff0c;在互聯網項目中廣泛應用。 那么關于 Nginx 的核心技術點有哪些呢&#xff1f; 什么是Nginx&#xff1f; Nginx是一個 輕量級/高性能的…

用Cocos2dx開發棋牌游戲的觀點解析

眾所周知&#xff0c;目前棋牌游戲特別的火。很多游戲公司都想在這一塊賺錢&#xff0c;可是卻不知用什么軟件比較好的去開發棋牌游戲&#xff0c;對此&#xff0c;我列出了兩款比較靠譜的軟件去開發棋牌游戲&#xff0c;希望對大家有幫助&#xff01; 第一款軟件是cocos2dx,它…

JavaWEB中讀取配置信息

第一種方法是使用java.io和java.util包&#xff0c;缺點是路徑的概念要清晰&#xff0c;例子&#xff1a; Properties prop new Properties();InputStream in getClass().getResourceAsStream("/common.properties");try {prop.load(in);pool new JedisPool(config…

我把《系統設計》系列整理成了 PDF

大家好&#xff0c;我是等天黑。相信很多朋友應該注意到了&#xff0c;我最近發了很多系統設計的文章。是的&#xff0c;到目前為止&#xff0c;已經發了有 7 篇文章。這些內容主要翻譯自 Alex Xu 的 《System Design Interview》&#xff0c;有卷一和卷二兩本。System Design …

高性能IO模型淺析

服務器端編程經常需要構造高性能的IO模型&#xff0c;常見的IO模型有四種&#xff1a; &#xff08;1&#xff09;同步阻塞IO&#xff08;Blocking IO&#xff09;&#xff1a;即傳統的IO模型。 &#xff08;2&#xff09;同步非阻塞IO&#xff08;Non-blocking IO&#xff09;…

Java線程通信的幾種方式

一、問題 有兩個線程&#xff0c;A 線程向一個集合里面依次添加元素“abc”字符串&#xff0c;一共添加十次&#xff0c;當添加到第五次的時候&#xff0c;希望 B 線程能夠收到 A 線程的通知&#xff0c;然后 B 線程執行相關的業務操作。線程間通信的模型有兩種&#xff1a;共享…

PHP個人博客項目------切切歆語博客

2019獨角獸企業重金招聘Python工程師標準>>> phpmysqlapache, ThinkPHP3.2框架開發 我的個人博客項目 適合新手練習 源碼地址下載&#xff1a;https://github.com/DickyQie/php-myblog 轉載于:https://my.oschina.net/zhangqie/blog/1785867

收發郵件之 MAILKIT

背景利用代碼發送郵件在工作中還是比較常見的&#xff0c;相信大家都用過SmtpClient來處理發送郵件的操作&#xff0c;不過這個類以及被標記已過時&#xff0c;所以介紹一個微軟推薦的庫MailKit來處理。MailKit開源地址&#xff1a;https://github.com/jstedfast/MailKit需要郵…

IOS_SearchBar搜索欄及關鍵字高亮

搜索框的效果演示: 這個就是所謂的搜索框了,那么接下來我們看看如何使用代碼來實現這個功能. 我所使用的數據是英雄聯盟的英雄名單,是一個JSON數據的txt文件, JSON數據的處理代碼如下所示: ?123456//獲取文件的路徑pathNSString *path [[NSBundle mainBundle] pathForResourc…

Java設計模式之(工廠模式)--簡單工廠模式--工廠方法模式--抽象工廠模式

工廠模式&#xff1a; 工廠模式可以分為三類&#xff1a; 1&#xff09;簡單工廠模式&#xff08;Simple Factory&#xff09; 2&#xff09;工廠方法模式&#xff08;Factory Method&#xff09; 3&#xff09;抽象工廠模式&#xff08;Abstract Factory&#xff09; 簡單工…

今天很多 CTO 都是被干掉的,因為他沒有成就業務

作者&#xff5c;喬新亮 編輯&#xff5c;鄧艷琴 我可以絲毫不開玩笑地說&#xff0c;今天&#xff0c;很多傳統企業里的研發都只是“工人”&#xff0c;哪怕是 CTO&#xff0c;充其量也只是“高級工人”&#xff0c;如果不轉換思維去成就業務&#xff0c;就只能停留在工人級…