SpringMVC執行原理解析(超級詳細通俗易懂)

學習了mvc的執行原理,這裏想寫一篇博客,來加深理解
首先在早期的javaweb中,都是有數據庫層–>dao層–>service層–>servlet層,數據庫中的每一張表,都會去對應到一個servlet,然後用戶在前端操作是,在不同的表之間切換就會調用到很多的servlet.
在這裏插入圖片描述這個時候spring就幫我們做了一件事,就是在servlet中添加了一層,專門爲了處理用戶調用servlet過多的問題
在這裏插入圖片描述上圖小人右邊的那一層就是Spring的web框架圍繞DispatcherServlet [ 調度Servlet ] 設計。我們先記住這個詞DispatcherServlet
DispatcherServlet的作用是將請求分發到不同的處理器
這也是這篇博客要深挖的springMVC執行的原理,先放上一張官方文檔中的圖
在這裏插入圖片描述這個圖看起來比較晦澀,那我們放一張中文版的
在這裏插入圖片描述
下面我們來深度解釋一下這張圖.首先用戶發起請求(可以理解點擊相應的按鈕的一瞬間)然後由前端控制器(理解成DispatcherServlet)操作,在代碼中會經過web.xml文件中的
在這裏插入圖片描述然後委託請求給處理器.
也就是我們在代碼中
在這裏插入圖片描述然後調用業務對象,並返回模型數據,然後在頁面控制處理器下返回了一個ModelAndView(模型中裝着數據,view就指的是視圖)對應代碼部分:
在這裏插入圖片描述然後由model傳給視圖,視圖在將數據渲染一下返回給前端控制器,最後通過前端控制器,再由前端控制器返回給用戶.

如果還沒搞懂的童鞋呢,我再更深層的講解一下.借用B戰狂神說JAVA的圖
在這裏插入圖片描述圖中標註框的地方就是開發者做的,其他的就是springMVC幫我們做的
  DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心。用戶發出請求,DispatcherServlet接收請求並攔截請求。
數字1:用戶提交請求
數字2,3,4:根據用戶請求找到相應的處理器,然後執行操作返回給DispatcherServle.
數字5,6,7,8:拿到了對應的處理器之後,找到對應的適配器,然後按照特定的規則去執行Handler.(就是尋找實現了Controller接口的類)在Cobtroller處調用業務層.返回時攜帶了數據和需要跳轉的視圖,
數字9,10,11:調用視圖解析器:對應代碼:
在這裏插入圖片描述最後將視圖結果返回給DispatcherServlet,在呈現給用戶
狂神說JAVA中具體步驟爲:
1.DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心。用戶發出請求,DispatcherServlet接收請求並攔截請求。

我們假設請求的url爲 : http://localhost:8080/SpringMVC/hello

如上url拆分成三部分:

http://localhost:8080服務器域名

SpringMVC部署在服務器上的web站點

hello表示控制器

通過分析,如上url表示爲:請求位於服務器localhost:8080上的SpringMVC站點的hello控制器。

2.HandlerMapping爲處理器映射。DispatcherServlet調用HandlerMapping,HandlerMapping根據請求url查找Handler。

3.HandlerExecution表示具體的Handler,其主要作用是根據url查找控制器,如上url被查找控制器爲:hello。

4.HandlerExecution將解析後的信息傳遞給DispatcherServlet,如解析控制器映射等。

5.HandlerAdapter表示處理器適配器,其按照特定的規則去執行Handler。

6.Handler讓具體的Controller執行。

7.Controller將具體的執行信息返回給HandlerAdapter,如ModelAndView。

8.HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet。

9.DispatcherServlet調用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名。

10.視圖解析器將解析的邏輯視圖名傳給DispatcherServlet。

11.DispatcherServlet根據視圖解析器解析的視圖結果,調用具體的視圖。

12.最終視圖呈現給用戶。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章