聊完了Spring,咱們來看看Spring在web方面的應用Spring MVC。
首先咱們來看什麼是mvc?前端
你們知道在jsp裏面也是能夠寫java代碼的,可是若是咱們這樣作就會有一個問題,就是代碼所有都雜糅在一塊兒,不管是閱讀仍是修改都將變得十分的困難。java
MVC是模型(model)-視圖(view)-控制器(controller)的縮寫,他將咱們的程序分爲個三部分,頁面、控制層、模型層。這樣使咱們的程序的邏輯更清晰,更容易維護。
它以將咱們的業務邏輯、數據與界面顯示分離,將衆多的業務邏輯彙集到一個部件裏面,在須要改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯,提升編碼效率。web
Spring MVC 是MVC結構在Spring框架中的一種表現形式。下面咱們來看一下Spring MVC的結構:spring
由圖可知,Spring MVC的具體流程以下:
1. 首先用戶發送請求————>前端控制器(DispatcherServlet),前端控制器根據請求信息(如URL)來決定選擇哪個頁面控制器進行處理並把請求委託給它,即之前的控制器的控制邏輯部分;mvc
2. 頁面控制器接收到請求後,進行功能處理,首先須要收集和綁定請求參數到一個對象,並進行驗證。而後將命令對象委託給業務對象進行處理;處理完畢後返回一個ModelAndView(模型數據和邏輯視圖名);框架
3. 前端控制器收回控制權,而後根據返回的邏輯視圖名,選擇相應的視圖進行渲染(ViewResolver),並把模型數據傳入以便視圖渲染。jsp
4. 前端控制器再次收回控制權,將響應返回給用戶;編碼
你們能夠把這想象成本身去醫院看病的流程,前端控制器(DispatcherServlet)在這裏就至關於一個醫院前臺的做用,咱們看病時首先須要先到前臺掛號,而後根據病情被分配到不一樣的科室,看完病以後還要再到前臺去付錢拿藥。spa
咱們理解了Spring和Spring MVC,這裏咱們討論一下Spring容器和Spring MVC容器之間的關係?
首先要說明的是:一個項目中,容器不必定只有一個。
Spring容器用於管理Spring中的Bean,而Spring MVC容器用於管理Spring MVC中的Bean。Spring是父容器,Spring MVC是其子容器。而且在Spring MVC子容器中註冊的Bean能夠引用Spring父容器中註冊的Bean,但在Spring容器中註冊的Bean卻不能引用Spring MVC容器中註冊的Bean。對象
這句話聽起來有點繞,咱們能夠看一下下面這張圖,你們能夠吧spring容器中的bean理解爲全局變量,吧spring MVC容器中的bean理解爲局部變量。在方法體中能夠訪問局部變量和全局變量,可是在方法外,就只能訪問全局變量,是不能訪問局部變量的。
這裏咱們要區分一下哪些bean是須要被SpringMVC管理的,最主要就是控制器(Controller),由於它須要與前端控制器交互。其餘的能夠都交給spring的容器管理。
下一節咱們來聊聊,Spring的進階版Spring Boot。