首頁  >  文章  >  Java  >  為什麼Spring MVC能回應HTTP請求? (原因詳解)

為什麼Spring MVC能回應HTTP請求? (原因詳解)

不言
不言轉載
2018-10-22 15:14:521979瀏覽

本篇文章帶給大家的內容是關於為什麼Spring MVC能回應HTTP請求? (原因詳解),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

很多Java面試官喜歡問這個問題:

一個Spring MVC的專案文件裡,開發人員沒有開發自己的Servlet,只透過註解@RequestMapping定義了方法home能回應發送給/mvc/test1的請求。

為什麼Spring MVC能回應HTTP請求? (原因詳解)

使用url http://localhost:9098/MavenSandbox/mvc/test1 測試,能觀察到home方法傳回的字串,背後的工作原理是什麼?

為什麼Spring MVC能回應HTTP請求? (原因詳解)

我們透過自己的研究來回答。在上述程式碼第53行設定斷點。再次造訪url http://localhost:9098/MavenSandbox/mvc/test1,斷點觸發。我們觀察呼叫棧,發現有一個堆疊幀DispatcherServlet.doService(HttpServletRequest, HttpServletResponse)。這個Servlet會負責將我們加了@RequestMapping註解的方法裡return的字串加到HttpServletResponse裡,這就是為什麼我們在瀏覽器裡能看到return字串的原因。

為什麼Spring MVC能回應HTTP請求? (原因詳解)

我們看下DispatcherServlet.doService裡的HttpServletResponse裡是否包含了我們期望的輸出字串。在偵錯器裡展開response變數:

為什麼Spring MVC能回應HTTP請求? (原因詳解)

response->outputBuffer->bb->buff, 在buff裡能看到這個字串陣列緩衝:

為什麼Spring MVC能回應HTTP請求? (原因詳解)

104是H的ASCII碼,101是e的ASCII碼,108是l的ASCII碼,所以證明了response確實包含了開發人員在home方法裡傳回的字串:hello this is a most simple example

最後,DispatcherServlet從哪裡來的?

在Eclipse偵錯器裡發現,它是Spring框架的標準Servlet:

org.springframework.web.servlet.DispatcherServlet

為什麼Spring MVC能回應HTTP請求? (原因詳解)

#這個Servlet正是我們在WEB-INF資料夾的web.xml檔案裡的Servlet。

因此給面試官的答案是:Spring MVC框架仍然需要Servlet,但這個Servlet是由Spring框架提供,無需應用開發人員重複實作。

為什麼Spring MVC能回應HTTP請求? (原因詳解)

#

以上是為什麼Spring MVC能回應HTTP請求? (原因詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除