首頁>技術>

本圖是很久以前學習SpringMVC時的,本次學習拿出來對照收穫頗多。

帶著問題學習:我們寫的介面,是如何被處理的。

在SpringBoot中,所有的請求都是會來到DispatcherServlet中,而這也就是SpringMVC中的東西。

從此圖可以看出繼承樹,最終是來到HttpServlet的,也就是說必然會有doGetPost方法。而HttpServlet並沒有,於是順著關係找下去。

在FrameworkServlet中,我們發現了重寫的方法:

而兩個方法都是呼叫processRequest的,進入進去:

除了各種初始化過程,最終做的是呼叫doService方法。而FrameworkServlet中doService是抽象的,來到DispatcherServlet中找到此方法:

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = null; boolean multipartRequestParsed = false; WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); try { ModelAndView mv = null; Exception dispatchException = null; try { processedRequest = checkMultipart(request); multipartRequestParsed = (processedRequest != request); // 找到當前請求使用哪個Handler(Controller的方法)處理 mappedHandler = getHandler(processedRequest); //HandlerMapping:處理器對映。/xxx->>xxxx

略過一些與本次學習無關的,直接看倒數兩行,將會透過getHandler方法,找到合適的Handler(Controller的方法)處理(流程2、3):

而handlerMapping中會有五個值:

RequestMappingHandlerMapping:儲存了所有@RequestMapping 和handler的對映規則:

如果你啥也沒傳,也就是"/",那麼在RequestMappingHandlerMapping中將不會找到合適的,然後他就會迴圈到下一個控制器:WelcomePageHandlerMapping:

而不管是哪個控制器,找到後都會對應的操作邏輯,也就是流程5後面的事情了。

本文連結:https://blog.csdn.net/weixin_42313246/article/details/112311353

26
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 第5天|Java入門有道,變數和常量