Spring MVC 處理乙個請求的流程分析

2022-01-09 20:53:45 字數 2610 閱讀 9104

spring mvc是spring系列框架中使用頻率最高的部分。不管是spring boot還是傳統的spring專案,只要是web專案都會使用到spring mvc部分。因此程式設計師一定要熟練掌握mvc部分。本篇部落格簡要分析spring mvc處理乙個請求的流程。

乙個請求從客戶端發出到達伺服器,然後被處理的整個過程其實是非常複雜的。本部落格主要介紹請求到達伺服器被核心元件dispatcherservlet處理的整理流程(不包括filter的處理流程)。

servlet處理乙個請求時會呼叫service()方法,所以dispatcherservlet處理請求的方式也是從service()方法開始(debug的話建議從dispatcherservlet的service方法開始debug)。frameworkservlet重寫了httpservlet的service方法,這個service方法後面又呼叫了frameworkservlet的processrequest()方法,processrequest()呼叫了dispatcherservlet的doservice()方法,最後呼叫到dispatcherservlet的dodispatcher()方法。整合處理請求的方法呼叫流程如上,下面看下**:

}再看看frameworkservlet的processrequest()方法。

doservice()方法的具體內容會在後面講到,這邊描述下dodispatcher()的內容,參考了部落格:

總結下spring mvc處理乙個請求的過程:

將地區(locale)解析器繫結到請求上,以便其他元件在處理請求(渲染檢視、準備資料等)時可以獲取區域相關的資訊。如果你的應用不需要解析區域相關的資訊;

將主題(theme)解析器繫結到請求上,以便其他元件(比如檢視等)能夠了解要渲染哪個主題檔案。同樣,如果你不需要使用主題相關的特性,忽略它即可如果你配置了multipart檔案處理器,那麼框架將查詢該檔案是不是multipart(分為多個部分連續上傳)的。若是,則將該請求包裝成乙個 multiparthttpservletrequest 物件,以便處理鏈中的其他元件對它做進一步的處理。關於spring對multipart檔案傳輸處理的支援;

為該請求查詢乙個合適的處理器。如果可以找到對應的處理器,則與該處理器關聯的整條執行鏈(預處理器、後處理器、控制器等)都會被執行,以完成相應模型的準備或檢視的渲染如果處理器返回的是乙個模型(model),那麼框架將渲染相應的檢視。若沒有返回任何模型(可能是因為前後的處理器出於某些原因攔截了請求等,比如,安全問題),則框架不會渲染任何檢視,此時認為對請求的處理可能已經由處理鏈完成了(這個過程就是doservice()和dodispatcher()做的事情)

1、 首先使用者傳送請求——>dispatcherservlet,前端控制器收到請求後自己不進行處理,而是委託給其他的解析器進行處理,作為統一訪問點,進行全域性的流程控制;

3、 dispatcherservlet——>handleradapter,handleradapter將會把處理器包裝為介面卡,從而支援多種型別的處理器,即介面卡設計模式的應用,從而很容易支援很多態別的處理器;

4、 handleradapter——>處理器功能處理方法的呼叫,handleradapter將會根據適配的結果呼叫真正的處理器的功能處理方法,完成功能處理;並返回乙個modelandview物件(包含模型資料、邏輯檢視名);

5、 modelandview的邏輯檢視名——> viewresolver,viewresolver將把邏輯檢視名解析為具體的view,通過這種策略模式,很容易更換其他檢視技術;

6、 view——>渲染,view會根據傳進來的model模型資料進行渲染,此處的model實際是乙個map資料結構,因此很容易支援其他檢視技術;

7、返回控制權給dispatcherservlet,由dispatcherservlet返回響應給使用者,到此乙個流程結束。

還是這個圖比較清楚。發現根據**不太能把這個流程說清楚。而且整個流程很長,**很多,我就不貼**了。這裡根據這個圖再把整個流程中元件的功能總結下:

Spring MVC 處理乙個請求的流程

乙個請求從客戶端發出到達伺服器,然後被處理的整個過程其實是非常複雜的。本部落格主要介紹請求到達伺服器被核心元件dispatcherservlet處理的整理流程 不包括filter的處理流程 1.處理流程分析 servlet處理乙個請求時會呼叫service 方法,所以dispatcherservle...

spring mvc請求處理流程

從web.xml中 servlet的配置開始,根據servlet攔截的url parttern,來進行請求 spring mvc工作流程圖 圖一 圖二 spring工作流程描述 1.使用者向伺服器傳送請求,請求被spring 前端控制servelt dispatcherservlet捕獲 3.dis...

SpringMVC處理請求流程

springmvc核心處理流程 3 handleradapter處理器介面卡,處理一些功能請求,返回乙個modelandview物件 包括模型資料 邏輯檢視名 4 viewresolver視 析器,先根據modelandview中設定的view解析具體檢視 5 然後再將model模型中的資料渲染到v...