1. 程式人生 > >整合SSM框架必備基礎—SpringMVC(上)

整合SSM框架必備基礎—SpringMVC(上)

01 MVC概述

在Web系統開發中一般按照檢視(View)、模型(Model)、控制(Controller)三層設計模式進行構建,檢視層負責模型資料的渲染,將資料用一定的形式展現給使用者;模型層負責監聽實體的變化並對實體進行解析和封裝;控制層負責提供前後端互動的請求邏輯處理入口,處理使用者請求,並建立適當的模型傳遞給檢視進行渲染。層級關係一般如下圖所示:

在Web開發的早期,JSP + Servlet + JavaBean的組合非常流行,那個時候JSP擔任著檢視層渲染工作,Servlet作為控制器負責使用者的請求和響應,而JavaBean則負責一些更加複雜的業務邏輯,例如跟資料庫打交道。

後來出現了一個新的MVC框架Struts2,它將action作為框架的控制器負責使用者請求響應,同時為前端頁面提供了標籤庫和有力的渲染工具-OGNL,使用者請求action返回資料到JSP後,在JSP中可以採用OGNL表示式對資料進行動態的渲染,它還增加了請求過濾器以及進行請求前後處理的攔截器,方便系統過濾、攔截一些不符合規則的請求並做出及時的響應操作,不得不說它的出現降低了系統的耦合性,讓MVC模式的分層更加明顯,也大大的簡化了開發者的程式碼量。

02 SpringMVC簡介

由於Struts2框架帶來的便利,它和Spring在過去很長一段時間被結合在一起用來構建系統,但是隨著技術的發展,二者的結合出現了很多問題例如類臃腫、相容性以及Struts2漏洞等問題,而就在這時候,Spring家族誕生了一個新的MVC框架來與Spring實現無縫結合,它就是SpringMVC。

SpringMVC是採用Java開發,一種基於Web MVC設計模式,以請求驅動為型別的輕量級Web框架。由於使用了MVC架構模式的思想,將Web層進行了職責解耦,讓分層更加的明顯。

03 SpringMVC優勢

談到SpringMVC的優勢,首先想到的就是它依賴Spring的包才能執行,也就是說它其實是Spring的一個MVC子框架,這樣的話就可以跟Spring實現無縫的結合,從而繼承它的眾多特性,這一點比起Struct2框架就有了很大的先天優勢,另外還有其他的幾個優點如下:

1、實現方法級別的請求攔截
上面提及的Struts2採用的是類級別的請求攔截,即一個類對應一個請求上下文,而SpringMVC採用方法級別的攔截,一個方法對應一個請求URL,也就是一個請求上下文。所以從架構本身上SpringMVC容易實現Restful介面,而Struts2的架構實現起來要麻煩很多,因為Struts2 action的一個方法可以對應一個URL,但是它的類屬性卻被所有的方法共享,這也就無法用註解或其他方式標識其所屬的方法了。

2、SpringMVC提供強大的註解
SpringMVC引入了註解的功能,通過在類、方法上標記相應的註解,可以實現實體的對映、配置的載入等,使用起來非常便利,可以大大簡化配置和程式碼量,比如說同樣是接收請求,Servlet作為控制器需要在doPost或者doGet中做一些處理後才能呼叫業務程式碼,而SpringMVC通過幾個註解就可以實現,例如@requestMapping可以幫助定義當前類為一個Spring管理的bean,同時指定該類是一個控制器,可以用來接受請求,標識當前類是控制層的一個具體的實現;@Controller放在方法上面用來指定某個方法的路徑,當它放在類上的時候相當於名稱空間需要組合方法上的requestMapping來訪問。

3、清晰的角色劃分
控制器(Controller)、驗證器(Validator)、命令物件(Command-obect)、表單物件(form-object)、模型物件(model-object)、Servlet分發器(DispatcherServlet)、處理器對映(handler-mapping)、檢視解析器(view-resolver)等等。每一個角色都可以由一個專門的物件來實現。

04 SpringMVC流程步驟


SpringMVC的具體執行流程步驟如下:

1.首先使用者在前臺頁面向某一個後臺指定的URL發起了請求,SpringMVC收到這個請求後會首先交給中央控制器(DispatcherServlet)

2.中央控制器請求HandlerMapping查詢 Handler處理器 (可以根據xml配置、註解進行查詢)

3.處理器對映器HandlerMapping向中央控制器返回Handler,HandlerMapping會把請求對映為HandlerExecutionChain物件(包含一個Handler處理器(頁面控制器)物件,多個HandlerInterceptor攔截器物件),通過這種策略模式,很容易新增新的對映策略

4.中央控制器呼叫處理器介面卡去執行Handler

5.處理器介面卡HandlerAdapter將會根據適配的結果去執行Handler

6.Handler執行完成給介面卡返回ModelAndView

7.處理器介面卡向中央控制器返回ModelAndView (ModelAndView其實是SpringMVC框架的一個底層物件,包括模型Model和檢視View)

8.中央控制器請求檢視解析器去進行檢視解析 (根據邏輯檢視名解析成真正的檢視(jsp),通過這種策略很容易更換其他檢視技術,只需要更改檢視解析器即可

9.檢視解析器向中央控制器返回View

10.中央控制器進行檢視渲染 (檢視渲染將模型資料(在ModelAndView物件中)填充到request域)

11.前端控制器向用戶響應結