最近在學(xué)習(xí)Spring MVC,記錄一下自己對處理請求的流程的理解:
1. 瀏覽器發(fā)出請求,攜帶著描述用戶請求內(nèi)容的信息。
2. 請求的第一站是Spring的DispatcherServlet(Spring MVC的請求都會通過一個前端控制器Servlet,前端控制器是常用的Web應(yīng)用程序模式,而DispatcherServlet就是這個前端控制器),它的作用是把請求發(fā)送給視圖控制器。
3. 在應(yīng)用程序中通常都有多個控制器,DispatcherServlet需要知道將請求發(fā)往哪個控制器,具體的方法就是查詢處理器映射(handler mapping),這個處理器映射是通過@RequestMapping方法來建立的:在控制器中通過@RequestMapping(value=”訪問路徑”,method=GET,POST)規(guī)定相應(yīng)的URL由什么方法來響應(yīng),然后DispatcherServlet就將請求發(fā)給選中的控制器。
4. 控制器在完成處理以后,會返回一個字符串,這個字符串就是需要響應(yīng)的頁面。處理的過程可能會產(chǎn)生一些信息(model),將這些model添加到request的屬性里面,然后發(fā)往用戶瀏覽器。
5. 控制器返回的視圖名并不能定位視圖文件,還需要設(shè)置視圖解析器(ViewResolver),才能完成定位。在視圖解析器中設(shè)置視圖的路徑、前綴、后綴等參數(shù),組合起來就是類似“/WEB-INF/views/*.jsp”的字符串,再結(jié)合視圖控制器傳過來的視圖名,就明確了視圖文件的物理路徑,此時才得到真正的視圖。
6. 視圖文件jsp頁面解析request傳回的信息,例如其中的model,再格式化為html顯示,這樣,整個MVC流程就完成了。