用簡單的語言解釋 MVC 頁面生命週期
已發表: 2021-11-26本文將關注 MVC 應用程序的生命週期,以及應用程序如何通過應用程序組件處理請求。 MVC 生命週期中存在兩個生命週期。 這兩個生命週期是:
- 應用程序生命週期
- 請求生命週期。
目錄
應用程序生命週期
應用程序生命週期一般是指應用程序的進程開始運行的時間。 為了表示MVC 應用程序生命週期,標記了應用程序的開始和結束。
請求生命週期
請求生命週期是指應用程序處理 HTTP 請求時發生的一系列事件。 路由是開始任何 MVC 應用程序的入口點。 當向 ASP.NET 平台發出請求時,將決定如何通過路由模塊處理請求。 術語模塊是指 .NET 的組件,用於在代碼中添加功能。 路由模塊負責將傳入的 URL 與應用程序中定義的相應路由相匹配。 路由處理程序與每個路由相關聯,它標誌著進入 MVC 框架的點。
MVC 的框架負責處理將路由數據轉換為將進一步處理請求的控制器。 控制器創建完成後,下一步就是採取行動。 這是通過動作調用器組件完成的,該組件選擇一個動作方法來調用控制器。
一旦對動作結果的準備工作完成,下一步就是結果執行。 為結果執行的結果創建一個分離步驟。 對於視圖類型的結果,應用程序將調用視圖引擎,它會查找並幫助呈現視圖。 如果結果不是視圖,則操作將自行執行。 對原始 HTTP 請求生成實際響應的是結果執行。
開發人員知道大多數組件用於處理請求。 在大多數情況下,正在處理與操作相關的方法和控制器。 此外,正在研究不同的行動結果和觀點。 但在 MVC 框架內也有其他組件。 關於在處理請求時如何通過不同的組件或 HTTP 模塊角色和處理程序執行請求流,可能會有很多問題。 MVC 框架是 Web 開發的框架,框架的 MVC 管道中必須有 HHTP 和 HTTP 處理程序的模塊。
MVC 頁面生命週期中存在許多組件,除了控制器和操作方法。
網址路由模塊
這是一種 HTTP 模塊。 每當第一次發出請求時,都會通過 UrlRoutingModule 進行攔截。 在此模塊中,將決定 MVC 應用程序是否應處理請求。 UrlRoutingModule 選擇匹配的第一個路由。
請求如何通過 UrlRoutingModule 與 MVC 應用程序中存在的那些路由匹配?
查看從 global.asax 調用的 RegisterRoutes 方法,可以看到添加到路由的 RouteCollection 中的路由。 該方法的調用是從 global.asax 的 application_start 處的事件處理程序完成的。
資源
RouteHandler 中的路由是如何定義的?
路由被定義為擴展方法,這可以在 maproute 的方法中看到。 路由處理程序與所有路由相關聯。
UrlRoutingModule 的方法定義如下。
資源
通過上面的解釋可以知道,UrlRoutingModule 知道應用程序中定義的所有路由。 因此,正確的路由可以與應用程序中的請求匹配。
需要注意的重要一點是模塊 UrlRoutingModule 參與選擇第一個匹配路由。 因此,只要檢測到匹配,掃描過程就會停止。 如果我們總結在這個階段發生的事情,路由處理程序通過 U RLRRoutingModule 附加到路由。
路由處理程序
通過 maproute 的方法,路由被附加到 MvcRouteHandler 的實例上。 IRouteHandler 接口是通過 MvcRouteHandler 實現的。
因此,MvcRouteHandler 的對像用於獲取應用程序的HTTPHandler 的MvcRouteHandler 的事物的引用。
MvcRouteHandler 的創建需要調用 PostResolveRequestCache() 方法。 這個方法 PostResolveRequestCache() 可以通過以下方式定義:
資源
因此,在 PostResolveRequestCache() 方法中會發生以下事件。
- GetRouteData() 方法存在於 RouteCollection 屬性中。 該方法被調用並通過 HttpContext 傳遞。
- RouteData 對象通過GetRouteData() 方法返回。
- RouteHandler 屬性包含在為請求返回處理程序 IRouteHandler 的 routeData 中,該處理程序是當前的,即 MvcRouteHandler。
- 方法G etHttpHandler() 與 返回MvcHandler引用的 MvcRouteHandler 。
- 然後將控件委託給 MvcHandler 的實例。
MvcHandler
MvcHandler 是 HTTP 的普通處理程序。 由於它是 HTTP 的處理程序,因此執行 ProcessRequest() 方法。 這個方法 ProcessRequest() 可以定義為:
資源
方法 ProcessRequest() 用於調用 ProcessRequestInit() 方法,如下圖所示:
資源
以下事件發生在 ProcessRequest() 方法中。
- ControllerFactory 是通過調用 ProcessRequestInit() 方法創建的。
- ControllerFactory 創建控制器。
- 調用控制器的 Execute() 方法。
控制器工廠
可以觀察到ControllerFactory是通過ProcessRequest()方法獲得的。 然後使用 ControllerFactory 來創建 Controller 對象的對象。 接口 IControllerFactory 由 Controller 工廠實現。
默認情況下,當 ControllerBuilder 用於創建 ControllerFactory 時,MVC 框架會創建類型 DefaultControllerFactory 類型。
以下代碼行在 ProcessRequestInit() 方法中創建 ControllerFactory。
資源
控制器
觀察到Controller對像是在MvcHandler的ProcessRequest()方法中的ControllerFactory中創建的。 創建的控制器包含框架要執行的操作的方法。 每當在瀏覽器中發出 URL 請求時,都會調用該操作的方法。 創建控制器以便沒有顯式實現 IControlle 的接口。 Controller類用於創建提供多種功能的控制器。 Controller 類可以繼承另一個 Controller 類,稱為“ControllerBase”,如下所示的代碼中定義:
資源
ActionInvoker 用於調用Controller 中動作的方法。
通過控制器工廠創建Controller後會發生以下事件:
- 調用controllerbase的Execute()方法。
- ExecuteCore() 方法由聲明為抽象的 Execute() 方法調用,然後通過類 Controller 定義。
- 動作名稱由控制器類通過 ExecuteCore() 方法從 RouteData 中檢索。
- ActionInvoker 的 InvokeAction() 方法由 ExecuteCore() 方法調用。
動作調用者
它用於選擇動作。
ActionInvoker 類有一些重要的職責,包括找到一個動作方法,然後在控制器中調用動作方法。
調用方法 ActionInvoker 的 InvokeAction() 時發生的事件有:
- 有關控制器的信息必須由 ActionInvoker 和需要執行的操作來獲取。
- 描述符對象提供此信息。
- 控制器名稱和動作名稱由動作和控制器的描述符類提供。
- 有調用 ActionMethod 。
動作結果
ActionResult 是抽像類的一種。 作為一種抽象方法,不同子類提供的方法 ExecuteResult() 有不同的實現。
ActionResult 中發生以下事件
- 調用了 ActionFilters 的 OnActionExecuting 方法。
- 調用方法操作。
- 調用 ActionFilters 的 OnActionExecuted 方法。
- ActionMethod 有一個 ActionResult 的返回
- 調用 ActionResult 的方法 ExecuteResult()。
視圖引擎
大多數應用程序使用 ViewResult 作為它們的返回類型。 視圖通過 ViewEngine 呈現給客戶端。 從這個視圖中,可以生成 HTML。 HTML 是通過 ViewEngine 從視圖生成的。
結論
了解應用程序中每個組件的作用是至關重要的一步。 這樣,可以理解組件之間的連接及其工作方式。 如果您想成為一名經驗豐富的開發人員,那麼掌握您的技能是一種方法。 您可以查看upGrad的在線軟件工程課程,該課程將為您提供開發應用程序和軟件領域的認證和專家培訓。 該課程專為男性和女性工作專業人士設計,並獲得 IIIT-B 認證,您將獲得他們的校友身份。
應用 MVC 時,應用程序分為三層:數據層或模型、UI 或視圖和控制器。 MVC 的每一層都有不同的功能。 首先,UI 或視圖層是用戶界面。 它是用戶和應用程序之間的主要界面。 它負責接收用戶輸入並呈現結果。 然後控制器連接到視圖層中的所有組件,它處理用戶輸入,將數據發送到模型層,並將結果發送回用戶。 模型層是存儲數據的地方。 它負責控制數據。 此外,模型層還負責讀取和寫入數據到存儲。 ASP.NET MVC 框架利用了 ASP.NET 會話狀態的力量。 會話狀態是一種內置於 ASP.NET 平台的 Web 服務。 它負責維護與給定會話關聯的所有對象、數據和其他信息。 SessionState 對象維護會話狀態的值。 它還負責填充和維護 Session 對象的值。 Session 對象充當會話狀態的網關。 它是 SessionState 對象的屬性,用於存儲和檢索會話狀態的值。 MVC 中的過濾器位於控制器和模型之間,可用於驗證用戶輸入或修改模型的輸出。 以下是 MVC 中的一些過濾器。 1. 驗證過濾器 - 驗證過濾器有助於驗證用戶輸入。 2. 動作過濾器——動作過濾器有助於修改模型的輸出。 3. 模型過濾器——模型過濾器有助於修改模型的輸出。 4. 輸出過濾器 - 輸出過濾器用於修改模型的輸出。能解釋一下MVC的頁面生命週期嗎?
我們如何在 MVC 中維護會話?
MVC 中有多少種過濾器?