spring mvc 原理深度解析

2021-10-10 17:23:45 字數 4314 閱讀 6289

概要

spring mvc 設計思想與體系結構組成

mvc 執行流程解析

註解配置

jsp 執行過程回顧

spring mvc執行流程解析

mvc 體系結構

流程說明:

請求servlet

處理業務邏輯

設定業務model

forward jsp servlet

jsp servlet 解析封裝html 返回

提問:這個是乙個mvc應用場景嗎?

spring mvc本質上還是在使用servlet處理,並在其基礎上進行了封裝簡化了開發流程,提高易用性、並使用程式邏輯結構變得更清晰

基於註解的url映謝

http表單引數轉換

全域性統一異常處理

***的實現

整個過程是如何實現的?

dispatchservlet 如何找到對應的control?

如何執行呼叫control 當中的業務方法?

回答這些問題之前我們先來認識一下spring mvc 體系結構

**handleradapter **** **'hændlə ə』dæptə

**viewresolver **vjuː riː』zɒlvə

view

**handlerexceptionresolver **'hændlə ɪk』sepʃ(ə)n riː』zɒlvə

handlerinterceptor'hændlə ɪntə』septə

體系結構uml

mvc 具體執行流程

handleradapter 詳解

viewresolver與view詳解

handlerexceptionresolver詳解

handlerinterceptor 詳解

mvc 各元件執行流程

編寫mvc 檔案

// beanname control 控制器

}

當ioc 中例項化這些類之後 dispatcherservlet 就會通過org.springframework.web.servlet.dispatcherservlet#gethandler() 方法基於request查詢對應handler。 但找到對應的handler之後我們發現他是乙個object型別,並沒有實現特定介面。如何呼叫handler呢?

這裡spring mvc 採用介面卡模式來適配呼叫指定handler,根據handler的不同種類採用不同的adapter,其handler與 handleradapter 對應關係如下:

handler類別

對應介面卡

描述controller

******controllerhandleradapter

標準控制器,返回modelandview

業務自行處理 請求,不需要通過modelandview 轉到檢視

servlet

******servlethandleradapter

基於標準的servlet 處理

handlermethod

handleradapter 介面方法

handleradapter 介面結構圖

// 標準servlet

}

上述例子中當ioc 中例項化這些類之後 dispatcherservlet 就會通過

org.springframework.web.servlet.dispatcherservlet#gethandleradapter() 方法查詢對應handler的介面卡 ,如果找不到就會報 no adapter for handler 。

找到應的adapter 之後就會基於介面卡呼叫業務處理,處理完之後業務方會返回乙個modelandview ,在去查詢對應的檢視進行處理。其在org.springframework.web.servlet.dispatcherservlet#resolveviewname() 中遍歷 viewresolvers 列表查詢,如果找不到就會報乙個 could not resolve view with name 異常。

在下一步就是基於viewresolver**.**resolveviewname() 獲取對應view來解析生成html並返回 。對應view結構如下:

至此整個正向流程就已經走完了,如果此時程式處理異常 mvc 該如何處理呢?

該元件用於指示 當出現異常時 mvc 該如何處理。 dispatcherservlet 會呼叫org.springframework.web.servlet.dispatcherservlet#processhandlerexception() 方法,遍歷 handlerexceptionresolvers 處理異常,處理完成之後返回errorview 跳轉到異常檢視。

- [ ] 演示自定義異常捕捉

public class ******exceptionhandle implements handlerexceptionresolver 

}

handlerexceptionresolver 結構

除了上述元件之外 spring 中還引入了 我interceptor *** 機制,類似於filter。

其實現機制是基於 handlerexecutionchain 分別在 dodispatch 方法中執行以下方法:

具體邏輯原始碼參見:org.springframework.web.servlet.dispatcherservlet#dodispatch 方法。

// 註解方法

public modelandview hello()

spring mvc工作原理解析

springmvc各個元件間工作路線圖 springmvc實現controller的三種方式 實現controller介面 實現httprequesthandler介面 使用 controller註解 各個元件解析 1.前端控制器 dispacterservlet 由spring提供,不需要程式設計...

springmvc框架原理解析

框架執行流程 step1 使用者發起請求到前端控制器 step3 處理器對映器向前端控制器返回handler step4 前端控制器呼叫處理器介面卡去執行handler step5 處理器介面卡去執行handler step6 handler執行完給介面卡返回modelandview step7 處...

SpringMVC的原理解析

springmvc是當前最為優秀的一款mvc的框架,自從springmvc 2.5版本發布之後,由於支援了註解配置,大大的提公升了易用性。springmvc3.0也逐漸優化完善,在市場佔比超越了struts2。成為一款主流的web層框架。1.springmvc使用簡單,學習成本低。面向方法。學習難度...