從原始碼角度看spring mvc的請求處理過程

2022-10-06 23:39:19 字數 1959 閱讀 3882

在分析spring mvc原始碼之前,先看一張圖:

請求處理的過程:

1.dispatcherservelt作為前端控制器,攔截request物件。

2.dispatcherservlet接收到request物件之後,查詢handlermapping,得到乙個handlerexecutionchain物件。

3.dispatcherse程式設計客棧rvlet將handler物件交由handleradapter(介面卡模式的典型應用),呼叫相應的controller方法。

4.controller方法返回modelandview物件,dispatcherservlet將view交由viewresolver進行解析,得到相應的檢視。用model渲染檢視。

5.返回響應結果。

整個過程的流程其實就是dispatcherservelt中dodispatch()方法的呼叫過程。

//這裡已經獲取到handlerexecutionchain物件,接下來就要獲取handleradapter物件,呼叫handler物件的方法。

handleradapter ha = gethandleradapter(mappedhandler.gethandler());

// process last-modified header, if supported by the handler

//有關瀏覽器快取的設定(304)

string method = request.getmethod();

boolean isget = "get".equals(method);

if (isget || "head".equals(method))

if (new servletwebrequest(request, response).checknotmodified(lastmodified) && isget)

}//pan'du

if (!mappedhandler.applyprehandle(processedrequest, response))

// actually invoke the handler.

mv = ha.handle(processedrequest, response, mappedhandler.gethandler());

if (asyncmanager.isconcurrenthandlingstarted())

//解析檢視,資料渲染

handlerexecutionchain h程式設計客棧andler = hm.gethandler(request);

if (handler != null)

}return null;

}本文標題: 從原始碼角度看spring mvc的請求處理過程

本文位址:

從原始碼角度來看UVM phase

說到uvm phase我們就知道是uvm乙個很重要的特性,從使用者角度來講,其實就是一些很簡單的應用規則,能夠極大地提公升編碼的效率,簡化 複雜度,提高debug的效率。至於應用可以參看zhangqiang大佬的第五章,這裡就不再贅述。本文就從原始碼的角度來看,uvm的phase是怎麼工作的?之前學...

nginx原始碼分析 從原始碼看nginx框架總結

nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...

從原始碼的角度理解Volley

今天從原始碼的角度來理解一下volley中部分功能的實現。新增請求到請求佇列 將請求新增到請求佇列中 public requestadd requestrequest 為請求設定順序編號.request.setsequence getsequencenumber 新增標記 request.addma...