Spring Web MVC 處理Http請求的大體過程:前端
一旦Http請求到來,DispatcherSevlet將負責將請求分發。DispatcherServlet能夠認爲是Spring提供的前端控制器,全部的請求都有通過它來統一分發。web
在DispatcherServlet將請求分發給Spring Controller以前,須要藉助於Spring提供的HandlerMapping定位到具體的Controller。HandlerMapping是這樣一種對象,它可以完成客戶請求到Controller之間的映射。在Struts中,這種映射是經過struts-config.xml文件完成的。其中,Spring爲Controller接口提供了若干實現,例如Spring默認使用的BeanNameUrlHandlerMapping。還有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。spring
Spring Controller將處理來自DispatcherServlet的請求。Spring的Controller相似於struts的Action,可以接受HttpServletRequest和HttpServletResponse。Spring爲Controller接口提供了若干實現類,位於org.springframework.web.servlet.mvc包中。因爲Controller須要爲併發用戶處理上述請求,所以實現Controller接口時,必須保證線程安全而且可重用。Controller將處理客戶請求,這和Struts Action 扮演的角色是一致的。
一旦Controller處理完客戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和視圖(View)。安全
從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀角度考慮,Controller是單個Http請求處理過程當中的控制器,而ModelAndView是Http請求過程當中返回的模型和視圖。併發
前端控制器返回的視圖能夠是視圖的邏輯名,或者實現了View接口的對象。View對象可以渲染客戶響應結果。其中,ModelAndView中的模型可以供渲染View時使用。藉助於Map對象可以存儲模型。mvc
若是ModelAndView返回的視圖只是邏輯名,則須要藉助Spring提供的視圖解析器(ViewResoler)在Web應用中查找View對象,從而將響應結果渲染給客戶。
DispatcherServlet將View對象渲染出的結果返回個客戶。app