SpringBoot對比SpringMVC,SpringMVC 處理請求過程


(問較多:1.SpringBoot對比SpringMVC。2.SpringMVC 處理請求過程。問:springboot的理解

Spring,Spring MVC,Spring Boot 三者比較


Spring 框架就像一個家族,有眾多衍生產品例如 boot、security、jpa等等。但他們的基礎都是Spring 的 ioc和 aop ioc 提供了依賴注入的容器 aop ,解決了面向橫切面的編程,然后在此兩者的基礎上實現了其他延伸產品的高級功能。Spring MVC是基於 Servlet 的一個 MVC 框架 主要解決 WEB 開發的問題,因為 Spring 的配置非常復雜,各種XML、 JavaConfig、hin處理起來比較繁瑣。於是為了簡化開發者的使用,從而創造性地推出了Spring boot,約定優於配置,簡化了spring的配置流程。

說得更簡便一些:Spring 最初利用“工廠模式”(DI)和“代理模式”(AOP)解耦應用組件。大家覺得挺好用,於是按照這種模式搞了一個 MVC框架(一些用Spring 解耦的組件),用開發 web 應用( SpringMVC )。然后有發現每次開發都寫很多樣板代碼,為了簡化工作流程,於是開發出了一些“懶人整合包”(starter),這套就是 Spring Boot。

Spring MVC的功能

Spring MVC提供了一種輕度耦合的方式來開發web應用

Spring MVC是Spring的一個模塊,是一個web框架。通過Dispatcher Servlet, ModelAndView 和 View Resolver,開發web應用變得很容易。解決的問題領域是網站應用程序或者服務開發——URL路由、Session、模板引擎、靜態Web資源等等。

Spring Boot的功能

Spring Boot實現了自動配置,降低了項目搭建的復雜度。(遵循約定大於配置

眾所周知Spring框架需要進行大量的配置,Spring Boot引入自動配置的概念,讓項目設置變得很容易。Spring Boot本身並不提供Spring框架的核心特性以及擴展功能,只是用於快速、敏捷地開發新一代基於Spring框架的應用程序。也就是說,它並不是用來替代Spring的解決方案,而是和Spring框架緊密結合用於提升Spring開發者體驗的工具。同時它集成了大量常用的第三方庫配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot應用中這些第三方庫幾乎可以零配置的開箱即用(out-of-the-box),大部分的Spring Boot應用都只需要非常少量的配置代碼,開發者能夠更加專注於業務邏輯。

Spring Boot只是承載者,輔助你簡化項目搭建過程的。如果承載的是WEB項目,使用Spring MVC作為MVC框架,那么工作流程和你上面描述的是完全一樣的,因為這部分工作是Spring MVC做的而不是Spring Boot。

對使用者來說,換用Spring Boot以后,項目初始化方法變了,配置文件變了,另外就是不需要單獨安裝Tomcat這類容器服務器了,maven打出jar包直接跑起來就是個網站,但你最核心的業務邏輯實現與業務流程實現沒有任何變化。

所以,用最簡練的語言概括就是:

Spring 是一個“引擎”;

Spring MVC 是基於Spring的一個 MVC 框架 ;

Spring Boot 是基於Spring4的條件注冊的一套快速開發整合包。

因為 Spring 的配置非常復雜,各種xml,properties處理起來比較繁瑣。於是為了簡化開發者的使用,Spring社區創造性地推出了Spring Boot,它遵循約定優於配置,極大降低了Spring使用門檻,但又不失Spring原本靈活強大的功能,下面用一張圖來描述三者的關系:


 


總結:
Spring 最初利用“工廠模式”( DI )和“代理模式”( AOP )解耦應用組件。按照這種模式搞了一個 MVC 框架(一些用 Spring 解耦的組件),用開發 web 應用( SpringMVC )。后來發現每次開發都要搞很多依賴,寫很多樣板代碼,使代碼臃腫而麻煩,於是聰明的前人整理了一些懶人整合包( starter ),這套就是 Spring Boot 。

https://www.zhihu.com/question/64671972

SpringMVC 處理請求過程

 SpringMVC框架是一個基於請求驅動的Web框架,並且使用了‘前端控制器’模型來進行設計,再根據‘請求映射規則’分發給相應的頁面控制器進行處理。

(一)整體流程

 

 

具體步驟:

        1、  首先用戶發送請求————>前端控制器,前端控制器根據請求信息(如 URL)來決定選擇哪一個頁面控制器進行處理並把請求委托給它,即以前的控制器的控制邏輯部分;圖 2-1 中的 1、2 步驟;

        2、  頁面控制器接收到請求后,進行功能處理,首先需要收集和綁定請求參數到一個對象,這個對象在 Spring Web MVC 中叫命令對象,並進行驗證,然后將命令對象委托給業務對象進行處理;處理完畢后返回一個 ModelAndView(模型數據和邏輯視圖名);圖 2-1 中的 3、4、5 步驟;

        3、  前端控制器收回控制權,然后根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染;圖 2-1 中的步驟 6、7;

        4、  前端控制器再次收回控制權,將響應返回給用戶,圖 2-1 中的步驟 8;至此整個結束。

 

(二)核心流程

 

 

大圖:注意編號順序:

 

具體步驟:

        1、  首先用戶發送請求——>DispatcherServlet,前端控制器收到請求后自己不進行處理,而是委托給其他的解析器進行處理,作為統一訪問點,進行全局的流程控制;

       2、  DispatcherServlet——>HandlerMapping,HandlerMapping 將會把請求映射為 HandlerExecutionChain 對象(包含一個 Handler 處理器(頁面控制器)對象、多個 HandlerInterceptor 攔截器)對象,通過這種策略模式,很容易添加新的映射策略;

       3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter 將會把處理器包裝為適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器;

       4、  HandlerAdapter——>處理器功能處理方法的調用,HandlerAdapter 將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;並返回一個 ModelAndView 對象(包含模型數據、邏輯視圖名);

       5、  ModelAndView 的邏輯視圖名——> ViewResolver, ViewResolver 將把邏輯視圖名解析為具體的 View,通過這種策略模式,很容易更換其他視圖技術;

       6、  View——>渲染,View 會根據傳進來的 Model 模型數據進行渲染,此處的 Model 實際是一個 Map 數據結構,因此很容易支持其他視圖技術;

       7、  返回控制權給 DispatcherServlet,由 DispatcherServlet 返回響應給用戶,到此一個流程結束。

 (三)總結核心開發步驟

1、  DispatcherServlet 在 web.xml 中的部署描述,從而攔截請求到 Spring Web MVC

2、  HandlerMapping 的配置,從而將請求映射到處理器

3、  HandlerAdapter 的配置,從而支持多種類型的處理器

4、  ViewResolver 的配置,從而將邏輯視圖名解析為具體視圖技術

5、  處理器(頁面控制器)的配置,從而進行功能處理 

原文:https://blog.csdn.net/zhaolijing2012/article/details/41596803


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM