天天看點

SpringMVC03:什麼是SpringMVC

什麼是SpringMVC

1、概述

SpringMVC03:什麼是SpringMVC

Spring MVC是Spring Framework的一部分,是基于Java實作MVC的輕量級Web架構。

檢視官方文檔:https://docs.spring.io/spring-framework/docs

我們為什麼要學習SpringMVC呢?

Spring MVC的特點:

  1. 輕量級,簡單易學
  2. 高效,基于請求響應的MVC架構
  3. 與Spring相容性好,無縫結合
  4. 約定優于配置
  5. 功能強大:RESTful、資料驗證、格式化、本地化、主題等
  6. 簡潔靈活

Spring的web架構圍繞DispatcherServlet[排程Servlet]設計。

DispatcherServlet的作用是将請求分發到不同的處理器。從Spring 2.5開始,使用Java 5或者以上版本的使用者可以采用基于注解形式進行開發,十分簡潔。

正因為SpringMVC好,簡單、便捷、易學,天生與Spring無縫結合(使用SpringIoC和Aop),使用約定優于配置。能夠進行簡單的junit測試。支援Restful風格。異常處理,本地化,國際化,資料驗證,類型轉換,攔截器 等等......是以我們要學習。

最重要的一點還是用的人多,使用的公司多。

2、中心控制器

​ Spring的web架構圍繞DispatcherServlet設計。DispatcherServlet的作用是将請求分發到不同的處理器。從Spring 2.5開始,使用Java 5或以上版本的使用者可以采用基于注解的controller聲明方式。

​ Spring MVC架構像許多其它MVC架構一樣,以請求為驅動,圍繞一個中心Servlet分派請求及提供其它功能,DispatcherServlet是一個實際的Servlet(它繼承自HttpServlet基類)。

SpringMVC的原理如下圖所示:

前端控制器:DispatcherServlet

頁面控制器:Controller接口實作類,或注釋@Controller的類

3、SpringMVC執行原理

SpringMVC03:什麼是SpringMVC

圖為SpringMVC的一個較完整的流程圖,實線表示SpringMVC架構提供的技術,不需要開發者實作,虛線表示需要開發者實作。

簡要分析執行流程

  1. DispatcherServlet表示前置控制器,是整個SpringMVC的控制中心。使用者送出請求,DispatcherServlet接收請求并攔截請求。

    我們假設請求的url為:

    http://loaclhost:8080/SpringMVC/hello

    如上url拆分成三部分:

    http://localhost:8080

    伺服器域名

    SpringMVC

    部署在伺服器上的web站點

    hello

    表示控制器
  2. HandlerMapping為處理器映射器(兩種類型、三種實作)。根據url的

    /hello

    去尋找具體的handler(handler就是Controller對象)。

    兩種類型:

    org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
    rg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
               
    三種實作:
    • 實作Controller接口
    • 實作HttpRequestHandler接口
    • @Controller注解
  3. HandlerExecution(JDK1.8是HandlerExecutionChain)表示具體的handler
  4. 把handler傳回給DispatcherServlet
  5. HandlerAdapter(接口)表示處理器擴充卡,根據handler找到具體的HandlerAdapter的實作類
    org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
               
  6. 用HandlerAdapter去執行Controller中的方法
  7. Controller将具體的執行資訊傳回給HandlerAdapter,如ModelAndView。
  8. HandlerAdapter将ModelAndView傳遞給DispatcherServlet。
  9. DispatcherServlet調用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的ModelAndView。
  10. 視圖解析器将解析後的ModelAndView傳給DispatcherServlet。
  11. spatcherServlet根據視圖解析器解析的視圖結果,調用具體的視圖。
  12. 最終視圖呈現給使用者。