今天就由本大佬(請原諒我使用了略微夸張的修辭手法)親自帶隊,來為大家導游,帶領大家探秘神奇的SpringMVC世界,重走一次HTTP請求處理之路,本次行程共計7站,約用時10分鐘。

來來來,上車的請把票買一下(點個贊、交個朋友嘛),說你呢!對!說的就是你,長這么帥,不點贊想啥呢?(別打我……保護猿類,人人有責)
OK,現在我們每個人都有一張門票(想象成每個人都是一個HTTP請求),每張票上都有一串神秘代碼(不是你們想的那種神秘代碼,就想象成請求鏈接url),車票都保存好,一會進大門可要檢查的。
坐穩了,老司機這就帶你起飛……
景區大門
OK,現在我們首先來到DispatcherServlet,它是作為SpringMVC的大門而存在,只有先穿過它,才能到達真正的入口。
我先來給大家科普(八卦)一下DispatcherServlet的來歷:

這DispatcherServlet雖然整了個高大上洋文名,但我們千萬不要被它唬住,它本質上還是我們熟悉的那個翠花(普通Servlet類),在這給我裝啥呢?
來來來,咱們繼續往前走,前面即將到達doDispatch,大家都跟上!
有人問doDispatch是個啥地方呀?
它呀,相當于景區的檢票口,通過之后各位就可以自由活動了,最后出來時我們再到這里集合。
來來來,這是本次的線路圖,大家都來看一下!(ps:看一次5元,養家糊口不容易啊):

檢票口
大家排好隊,把門票都拿出來,準備檢票啦~大包小包,過機安檢(有沒有一種來到車站的感覺)。
什么?把票弄丟了?別鬧,腰不好。
到底檢查啥呢?
這個問題問的好,一看就是個文化人。

這一步主要是檢查你有沒有攜帶物品(是不是一個上傳文件請求),如果你攜帶了物品,那么工作人員就會把你的物品取出來包裝一下、變成MultipartFile再還給你,再給你身上貼上一個此人攜帶貴重物品的標志,也就是multipartRequestParsed標志位(這是深怕別人不知道你有錢啊),把你和沒帶物品的人區分開。
確定路線
OK,檢查完畢以后,接下來就是各自確定游玩路線。
各位攜帶貴重物品的大佬們,等會交個朋友唄!(你們還缺一位可愛真誠的小老弟嗎?)
怎么確定路線?
這個問題提的太好了!怎么又是你?這位機智的朋友,我已經記住你了。

我們每個人不是都有一張門票嘛,門票上都有一串神秘代碼(請求鏈接url),這里我們就是通過這個神秘代碼來找到各自對應的路線(根據請求url找到對應的Controller、以及方法)。
前期準備工作
在每個人確定各自的路線后,大家有5分鐘時間準備一下,現在有事還能回去,過了這村可就回不去啦。
在這期間可以做些什么事呢?
這個問題同樣的非常好,首先我們來看一下:

HandlerInterceptor?是不是有點熟悉?對,你沒有看錯!就是攔截器。在這里SpringMVC會首先調用我們攔截器里的preHandle方法。
Tip:在preHandle方法里我們可以提前進行一些登錄校驗、權限校驗、日志記錄等的工作,可以將一些非法的請求拒之門外。
正式暢玩
都準備好了吧?那么大家就按照的路線去玩耍吧(執行Controller業務邏輯),最后還會有拼圖大禮包再向你們招手呢(返回模型視圖ModelAndView)
本寶寶就在這瞇一會等你們!(反正你們最后會發現還會回到這兒的)
一路都有啥好玩的?
這我可得給你好好說道說道。來,坐下,小筆記記好:
首先參數解析器會對它進行一個參數解析、校驗、參數綁定的操作過程,然后才會到達我們的Controller方法進行具體的業務處理,最終都會返回一個ModelAndView。
結束前的準備工作
大家都回來了沒有?沒回來的吱個聲!(吱聲我也聽不到)
準備返回之前,我們還有一點時間可以搞點事情。
可以搞哪些事情?
HandlerInterceptor!恭喜這位朋友,都學會搶答了!

對,又是HandlerInterceptor攔截器,在這里會調用后置處理方法postHandle。
Tip:在postHandle方法里我們有機會對返回的模型數據和試圖數據進行最后的修改。
返程
歡樂的時光總是這么短暫,我們愉快的HTTP請求之旅到這里就接近尾聲了。
返程途中可以干什么?
返程途中大家可以拿出拼圖大禮包(ModelAndView),拼出一幅美麗的圖畫(View渲染)。
在這一步,DispatcherServlet會將模型數據(Model)渲染到View模版上生成一個新的視圖,也就是我們看到的頁面了,當然了也有可能只有數據沒有視圖,就像我們寫接口一樣。