【MarketAnalysis總結】2.0搭建Spirng框架、SpringMVC框架以及對SSH框架的整合
首先我先來介紹一下Spring框架,SpringMVC框架以及它們在本專案中的使用,再對搭建SSH框架的詳細過程進行說明。
1) 介紹Spring框架以及在本專案的使用
Spring是一個輕量級的應用開發框架,它幫我們管理物件及其依賴關係,還提供像通用日誌記錄、效能統計、安全控制、異常處理等面向切面的能力。它提供了與第三方資料訪問框架(如Hibernate)無縫整合以及一套Spring MVC框架,來方便web搭建 。在此,本專案採用的是SSH(SpringMVC、Spring、Hibernate)整合框架。
Spring框架的組成如下圖2.1,
圖2.1 Spring框架組成
Spring的關鍵模組主要是Ioc容器的依賴注入,以及Aop的面向切面模組。
- Ioc容器負責例項化、定位、配置應用程式中的物件及建立這些物件間的依賴,把依賴關係、邏輯關係、配置等等,和類的具體實現分隔開來,前者對應xml檔案,後者對應Java檔案。
- AOP 模組能夠將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任,例如事務處理、日誌管理、許可權控制等,封裝起來,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
在本專案中,主要應用了Spring的Ioc容器、DAO、以及MVC。Ioc容器是Spring的核心,該容器裡存放著一個個Bean,本專案通過該容器把DAO、Hibernate以及Service層的依賴關係都集成於此。此外Hibernate是指對資料庫訪問控制進行整合的一個框架,由於不是我主負責這部分,在此不贅述。
2) 介紹SpringMVC框架以及在本專案中的使用
A. SpringMVC框架是Spring提供的一個強大而靈活的web框架,它對應著本專案中的controller層。SpringMVC主要由DispatcherServlet、處理器對映、處理器(控制器)、檢視解析器、攔截器。它的三個核心是:
- 處理器對映:選擇使用哪個控制器來處理請求,分發請求到某一個方法中去。
- 檢視解析器:選擇結果應該如何渲染,可控制頁面跳轉。
- 攔截器:對前端請求進行許可權校驗、身份校驗、合法性檢查、避免過量請求湧入等操作。
B. 此外,Spring的執行原理如下圖2.10
圖2.10 SpringMVC執行原理示意圖
A. 在本專案中的執行步驟如下:
a) 首先使用者傳送請求url,web容器根據“/”路徑對映到DispatcherServlet(因為url-pattern為/)進行處理;
b) 對springMVC-servlet.xml進行初始化,檢查會不會被攔截器攔截下來;若被攔截,對請求進行預處理,處理完過後決定對該請求是否放行,即是否讓該請求到達controller;
c) 通過component-scan來對controller的包進行註解掃描,以及DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter進行啟動註解功能,對controller進行掃描,找到url對應的控制器;
d) 根據url對映到controller對應的方法進行處理;
e) 處理完畢後,通過檢視解析器,根據路徑找到要返回的檢視,渲染並返回。
B. 對SpringMVC配置xml檔案後面會有論述,這裡介紹一下前端的請求url怎麼配置才能對映到對應處理該請求的控制器。這裡有兩種配置方法,分為註解法和非註解法:
- 註解法
配置如圖2.11,@Controller寫在控制器對應的類的上方,即可表明該類為控制器,@RequestMapping的value屬性用來配置某url要對映的方法,如下圖,處理“/login”這個url請求對應的方法即為login();
圖2.11 註解法配置
每一個註解實則是一個bean,使用註解的優點是可以自動實現bean的依賴注入,無需手動配置bean,使用方便。缺點是不利於程式碼解耦,耦合度較高,而且會降低程式碼與依賴關係的可讀性。
- 非註解法
配置如圖2.12,這種方法其實更接近本質,它其實是對上一種更深一步解析,因為每一個註解都對應著一個bean。而在這種方法中,就還原了這個bean,每一個url通過bean name來對映到class類中的方法。
圖2.12 非註解法配置
這種方法的優點是有利於程式碼解耦,降低耦合度,主張配置與程式碼分離,增加了依賴關係的可讀性,便於理解專案整體架構。缺點顯而易見,就是配置可能會比較繁瑣,使用起來沒有上一種方法方便。
在本專案中使用了第一種方法,即註解法。
3) 搭建SSH(SpringMVC+Spring+Hibernate)框架過程
搭建此SSH框架最關鍵是對三個配置檔案進行配置,如下圖2.2的web.xml、applicationContext.xml、springMVC-servlet.xml。
圖2.2 SSH框架配置圖
a) web.xml
在此配置檔案中,主要是對spring框架配置監聽器以及Controller層的集中統一分發的分發器對每一個url請求都進行統一的分發。它的配置如圖2.3,
圖2.3 web.xml配置
監聽器、分發器分別對應這上圖的1、2+3。
b) applicationContext.xml
該配置檔案是spring框架的核心配置檔案,主要用來配置Ioc容器的bean之間的依賴關係,進行依賴注入,每一個bean都對應這上面所陳述的一個類。
- 整合hibernate
使用了兩個bean,如下圖2.4,
圖2.4 Ioc容器中的hibernate配置
主要使用了dataSource與sessionFactory兩個bean,把對資料庫連線等操作的依賴關係都集成於此。
- 整合DAO
配置如下圖2.5,
圖2.5 DAO層的bean配置
這四個bean分別對應著DAO層的增刪改查的依賴。
- 整合Service服務
這裡主要對所有Service層提供的服務進行整合,以便Controller使用Service層的服務時,可以從該容器中拿到對應的bean來獲取對應的服務。部分Service的bean配置如下圖2.6:
圖2.6 部分Service層的bean配置
c) springMVC-servlet.xml
該配置檔案主要是對SpringMVC框架進行配置的核心檔案,對應著Controller層,主要是對controller和interceptor進行配置;
- 配置註解掃描器
該配置主要是讓controller層接收來自前端的url請求,對映到對應的處理函式中,配置如圖2.7所示。
圖2.7 註解掃描器配置
- 配置檢視解析器
檢視解析器主要是為了controller層能控制頁面跳轉而使用的,只要為其配置所需跳轉頁面的路徑即可,如圖2.8。
圖2.8 檢視解析器配置
配置攔截器
攔截器主要對應controller的interceptor層,這裡的配置所起作用是配置攔截器所要攔截的url,以及對攔截的這些url配置對應的類來處理,部分攔截器配置如圖2.9。
圖2.9 攔截器部分配置