二瓦戚、簡介
目錄:簡述、中心控制器丛塌、SpringMVC執(zhí)行原理
1.簡述
Spring MVC是Spring Framework的一部分较解,是基于Java實(shí)現(xiàn)MVC的輕量級Web框架。
SpringMVC官方文檔:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web
Spring MVC的特點(diǎn):
①輕量級赴邻,簡單易學(xué)印衔。
②高效,基于請求響應(yīng)的MVC框架姥敛。
③與Spring兼容性好奸焙,無縫結(jié)合。
④約定優(yōu)于配置彤敛。
⑤功能強(qiáng)大:RESTful与帆、數(shù)據(jù)驗(yàn)證、格式化墨榄、本地化鲤桥、主題等。
⑥簡潔靈活渠概。
Spring的web框架圍繞DispatcherServlet(調(diào)度Servlet)設(shè)計茶凳。
DispatcherServlet的作用是將請求分發(fā)到不同的處理器。從Spring 2.5開始播揪,使用Java 5或者以上版本的用戶可以采用基于注解形式進(jìn)行開發(fā)贮喧,十分簡潔。
正因?yàn)镾pringMVC猪狈、簡單箱沦、便捷、易學(xué)雇庙,天生和Spring無縫集成(使用SpringIoC和AOP)谓形,使用約定優(yōu)于配置。能夠進(jìn)行簡單的junit測試疆前,支持Restful風(fēng)格寒跳,異常處理、本地化竹椒、國際化童太、數(shù)據(jù)驗(yàn)證 , 類型轉(zhuǎn)換、攔截器等等。
2.中心控制器
Spring的web框架圍繞DispatcherServlet設(shè)計书释。DispatcherServlet的作用是將請求分發(fā)到不同的處理器翘贮。從Spring 2.5開始,使用Java 5或者以上版本的用戶可以采用基于注解的controller聲明方式爆惧。
Spring MVC框架像許多其他MVC框架一樣狸页,以請求為驅(qū)動,圍繞一個中心Servlet分派請求及提供其它功能扯再,DispatcherServlet是一個實(shí)際的Servlet(它繼承自HttpServlet基類)肴捉。
SpringMVC的原理如下圖所示:
當(dāng)發(fā)起請求時被前置的控制器攔截到請求,根據(jù)請求參數(shù)生成代理請求叔收,找到請求對應(yīng)的實(shí)際控制器,控制器處理請求傲隶,創(chuàng)建數(shù)據(jù)模型饺律,訪問數(shù)據(jù)庫,將模型響應(yīng)給中心控制器跺株,控制器使用模型與視圖渲染視圖結(jié)果复濒,將結(jié)果返回給中心控制器,再將結(jié)果返回給請求者乒省。
3.SpringMVC執(zhí)行原理
圖為SpringMVC的一個較完整的流程圖巧颈,實(shí)線表示SpringMVC框架提供的技術(shù),不需要開發(fā)者實(shí)現(xiàn)袖扛,虛線表示需要開發(fā)者實(shí)現(xiàn)砸泛。
簡要分析執(zhí)行流程:
①DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心蛆封。用戶發(fā)出請求唇礁,DispatcherServlet接收請求并攔截請求。
假設(shè)請求的url為:http://localhost:8080/SpringMVC/hello惨篱,將url拆分成三部分:http://localhost:8080為服務(wù)器域名盏筐,SpringMVC部署在服務(wù)器上的Web站點(diǎn),hello表示控制器砸讳。通過分析琢融,如上url表示為:請求位于服務(wù)器localhost:8080上的SpringMVC站點(diǎn)的hello控制器。
②HandlerMapping為處理器映射簿寂。DispatcherServlet調(diào)用HandlerMapping漾抬,HandlerMapping根據(jù)請求url查找Handler。
③HandlerExecution表示具體的Handler常遂,其主要作用是根據(jù)url查找控制器奋蔚。
④HandlerExecution將解析后的信息傳遞給DispatcherServlet,如解析控制器映射等。
⑤HandlerAdapter表示處理器適配器泊碑,其按照特定的規(guī)則去執(zhí)行Handler坤按。
⑥Handler讓具體的Controller執(zhí)行。
⑦Controller將具體的執(zhí)行信息返回給HandlerAdapter馒过,如ModelAndView臭脓。
⑧HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet。
⑨DispatcherServlet調(diào)用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名腹忽。
⑩視圖解析器將解析的邏輯視圖名傳給DispatcherServlet来累。
?DispatcherServlet根據(jù)視圖解析器解析的視圖結(jié)果,調(diào)用具體的視圖窘奏。
?最終視圖呈現(xiàn)給用戶嘹锁。