【原創】遨遊springmvc之原理篇

1.Springmvc是什麼

spring web mvc是一種基於java實現的請求驅動(請求-響應模型)的web層輕量級框架,spring web mvc採用了MVC(模型-視圖-控制器)框架設計,將web層進行職責解耦,圍繞核心處理器DispatcherServlet分派請求處理程序,可配置的處理程序映射,標籤,地區,時區和主題解析以及對上傳文件的支持,springmvc默認是基於@RequestMapping和@Controller註解,提供了豐富的參數、數據模型、視圖、異常的處理器,解析器,適配器,過濾器來處理各類類型的請求,而且返回對應的數據結果。前端

 

2.Springmvc能幫咱們處理什麼

>讓咱們能很是簡單的設計出乾淨的Web層和薄薄的Web層;前端控制器(DispatcherServlet)、請求處處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器(   Validator)、命令對象(Command  請求參數綁定到的對象就叫命令對象)、表單對象(Form Object 提供給表單展現和提交到的對象就叫表單對象)。 java

>進行更簡潔的Web層的開發; web

>天生與Spring框架集成(如IoC容器、AOP等); spring

>提供強大的約定大於配置的契約式編程支持; 編程

>能簡單的進行Web層的單元測試; 數據結構

>支持靈活的URL到頁面控制器的映射; mvc

>很是容易與其餘視圖技術集成,如Velocity、FreeMarker等等,由於模型數據不放在特定的API裏,而是放在一個Model裏(Map數據結構實現,所以很容易被其餘框架使用); app

>很是靈活的數據驗證、格式化和數據綁定機制,能使用任何對象進行數據綁定,沒必要實現特定框架的API; 框架

>提供一套強大的JSP標籤庫,簡化JSP開發; jsp

>支持靈活的本地化、主題等解析; 

>更加簡單的異常處理; 

>對靜態資源的支持; 

>支持Restful風格。

 

3.Springmvc原理圖

原理圖3.1

時序圖3.2

3.3視圖解析

 

根據原理圖3.一、時序圖3.二、視圖解析圖3.3(【圖畫的很差,不要咬我😳,還有圖片是svg,看不清能夠盡情放大不影響清晰度!】,Dispatcher 視圖解析部分在3.2中畫不開了😖,在圖3.3補充),咱們能夠來簡單描述下springmvc處理用戶請求並返回響應的過程:

1.首先,用戶發起一個請求,springmvc將用戶請求統一轉發到核心Servlet:DispatcherServlet

2.DispatcherServlet根據用戶的請求,去找HandlerMapping(經常使用的有映射處理器RequestMappingHandlerMapping),咱們理解爲映射處理器,HandlerMapping會根據請求返回一個HandlerMethod,HandlerMethod包含了請求對應控制器、方法、參數等信息

3.Dispatcher將HandlerMethod包裝,造成一個處理器執行鏈HandlerExecutionChain,它包含了HandlerMethod和Interceptor(攔截器),當請求對應的攔截器不是空的時候Dispatcher會先處理攔截器裏面的東西

4.此時Dispatcher根據HandlerMethod,去找對應的Adapter(適配器),適配器用來最終處理請求,適配器中包含HandlerMethodArgumentResolver(參數解析器)和HandlerMethodReturnValueHandler(返回值處理程序)

5.適配器中處理了各類類型的請求參數,固然咱們也能夠有本身的參數解析器,springmvc將處理好的參數傳入最終的控制器執行程序(invoke(args)),返回對應的值,適配器再根據自帶的HandlerMethodReturnValueHandler處理程序將返回值包裝,而且返回一個ModelAndView

6.ModelAndView包含了Model(模型【LinkedHashMap】)對象和View(視圖)對象

7.DispatcherServlet根據ModelAndView處理派遣的最終結果,並根據提供的視圖解析器,將model對象暴露到request請求中,返回對應的視圖,渲染(如jsp用JstlView)

 

4.個性導航

以上咱們已經簡單介紹了springmvc工做的原理,接下來就讓咱們介紹以上springmvc所用到的一些核心類與接口

本系列博客主要介紹如下幾個部分:

  1. 遨遊springmvc之Dispatcher
  2. 遨遊springmvc之HandlerMapping和HandlerMethod
  3. 遨遊springmvc之HandlerAdapter
  4. 遨遊springmvc之WebDataBinder
  5. 遨遊springmvc之Converter
  6. 遨遊springmvc之HandlerMethodArgumentResolver
  7. 遨遊springmvc之HandlerMethodReturnValueHandler
  8. 遨遊springmvc之HandlerInterceptor
  9. 遨遊springmvc之HandlerExceptionResolver
  10. 遨遊springmvc之ViewResolver(未開始)

本人寒腹短識,乘工做之餘瀏覽了下springmvc寫了此篇博客,有寫錯之處還望springmvc大牛指點糾正,😋

相關文章
相關標籤/搜索