Spring MVC能響應HTTP請求的原因?
很多Java面試官喜歡問這個問題:
一個Spring MVC的專案檔案裡,開發人員沒有開發自己的Servlet,只通過註解@RequestMapping定義了方法home能響應發向 /mvc/test1的請求。
使用url http://localhost:9098/MavenSandbox/mvc/test1 測試,能觀察到home方法返回的字串,這背後的工作原理是什麼?
我們通過自己的研究來回答。在上述程式碼第53行設定斷點。再次訪問url http://localhost:9098/MavenSandbox/mvc/test1 ,斷點觸發。我們觀察呼叫棧,發現有一個棧幀DispatcherServlet.doService(HttpServletRequest, HttpServletResponse)。這個Servlet會負責將我們加了@RequestMapping註解的方法裡return的字串加到HttpServletResponse裡,這就是為什麼我們在瀏覽器裡能看到return字串的原因。
我們看下DispatcherServlet.doService裡的HttpServletResponse裡是否包含了我們期望的輸出字串。在偵錯程式裡展開response變數:
response->outputBuffer->bb->buff, 在buff裡能看到這個字串陣列緩衝:
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
這個Servlet正是我們在WEB-INF資料夾的web.xml檔案裡的Servlet。
因此給面試官的答案為:Spring MVC框架仍然需要Servlet,但這個Servlet是由Spring框架提供,無需應用開發人員重複實現。
要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2213090/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP的請求與響應HTTP
- HTTP 請求與響應HTTP
- Http請求與響應HTTP
- Go如何響應http請求?GoHTTP
- HTTP請求格式和HTTP響應格式HTTP
- HTTP請求頭與響應頭HTTP
- HTTP請求與響應簡析HTTP
- http請求頭與響應頭的應用HTTP
- Qt - http網路請求與響應QTHTTP
- 死磕Spring原始碼-MVC處理HTTP分發請求Spring原始碼MVCHTTP
- Wireshark的HTTP請求包和響應包如何對應HTTP
- 指令碼化HTTP 取得響應 指定請求指令碼HTTP
- HTTP請求頭和響應頭詳解HTTP
- Spring系列 SpringMVC的請求與資料響應SpringMVC
- Spring MVC的請求處理邏輯SpringMVC
- 完整的一次 HTTP 請求響應過程(二)HTTP
- 完整的一次 HTTP 請求響應過程(一)HTTP
- spring mvc中獲取請求URLSpringMVC
- HTTP的請求與響應以及使用Chrome的檢視方式HTTPChrome
- HTTP請求方法及響應狀態碼詳解HTTP
- 關於常用的http請求頭以及響應頭詳解HTTP
- 【Go】優雅的讀取 http 請求或響應的資料GoHTTP
- 【Go】優雅的讀取http請求或響應的資料GoHTTP
- Spring MVC框架處理Web請求的基本流程SpringMVC框架Web
- Spring MVC 處理一個請求的流程分析SpringMVC
- 從HTTP請求響應迴圈探索Flask的基本工作方式HTTPFlask
- HTTP 請求響應頭部欄位裡 ETAG 的用法舉例HTTP
- 【Go】優雅的讀取http請求或響應的資料-續GoHTTP
- 【Go】優雅的讀取 http 請求或響應的資料-續GoHTTP
- ThinkPHP 請求與響應PHP
- 深度解析Spring AI:請求與響應機制的核心邏輯SpringAI
- DRF之請求與響應
- SpringMVC 入門、請求、響應SpringMVC
- Spring MVC檔案請求處理詳解:MultipartResolverSpringMVC
- Django REST framework的請求與響應DjangoRESTFramework
- Spring Boot使用AOP在控制檯列印請求、響應資訊Spring Boot
- 十、Spring Boot整合Spring Security之HTTP請求授權Spring BootHTTP
- 關於兩次http請求,後一次請求影響前一次請求的問題HTTP