springmvc全名是spring web mvc,springmvc是spring的一個模塊,而且看名字便可知道,springmvc是一個基於mvc設計模式的前端web框架。mvc:m(model模型)、v(view視圖)、c(control控制)前端
SpringMVC的工做原理圖:web
一、發起請求到前端控制器(DispatcherServlet),該控制器中就會過濾出你哪些請求能夠訪問該servlet哪些不能夠,就是url-pattern的做用,而且會加載springmvc.xml配置文件spring
二、前端控制器會找到HandlerMapping(處理器映射器),經過HandlerMapping完成url到controller映射的組件,通俗點講,就是將在springmvc.xml中配置的或者註解的url與對應的處理類找到並進行存儲,其實是用一個map集合來保存這種映射關係,map<url,handler>; 這樣,就將全部的這種映射關係都記錄保存了下來設計模式
三、經過HandlerMapping有了這些映射關係,而且找到了url對應的處理器,HandlerMapping就會將其處理器(圖中紅色標明的handler)返回,在其返回以前,在加上不少的攔截器,其做用後面進行講解,這裏知道在返回的處理器前會有不少的攔截器便可。mvc
四、DispatcherServlet拿到了handler以後,找到HandlerAdapter(處理器適配器),經過它來訪問處理器,而且執行處理器。app
這裏會有人會有疑惑,爲何須要處理器適配器,咱們都得到了處理類了,直接調用不就好了嗎?框架
不行,由於咱們只知道處理類在哪裏,並不知道執行處理類中的哪一個方法,其實也就是不知道處理類是經過哪一種方式建立出來的,實現HttpRequestHandler?仍是註解方式,或者是其餘方式,咱們不知道,因此須要HandlerAdapter來幫咱們確認調用哪一個方法。jsp
五、執行處理器url
六、處理器會返回一個ModelAndView對象給HandlerAdapterspa
七、經過HandlerAdapter將ModelAndView對象返回給前端控制器(DispatcherServlet)
八、前端控制器請求視圖解析器(ViewResolver)去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp),其實就是將ModelAndView對象中存放視圖的名稱進行查找,找到對應的頁面造成視圖對象
九、返回視圖對象到前端控制器。
十、視圖渲染,就是將ModelAndView對象中的數據放到request域中,用來讓頁面加載數據的。
十一、經過第8步,經過名稱找到了對應的頁面,經過第10步,request域中有了所須要的數據,那麼就可以進行視圖渲染了。最後將其返回
組件說明:
DispatcherServlet:做爲前端控制器,整個流程控制的中心,控制其它組件執行,統一調度,下降組件之間的耦合性,提升每一個組件的擴展性。
HandlerMapping:經過擴展處理器映射器實現不一樣的映射方式,例如:配置文件方式,實現接口方式,註解方式等。
HandlAdapter:經過擴展處理器適配器,支持更多類型的處理器。
ViewResolver:經過擴展視圖解析器,支持更多類型的視圖解析,例如:jsp、freemarker、pdf、excel等。