系統原始碼 http://download.csdn.net/detail/yu422560654/4536270
系統有嚴格的分層,主要分為表現層、MVC控制層、商務邏輯層、DAO層和資料持久層。不同的層封裝不同的應用組件,各層的組建以松耦合的方式組織在一起,提供更好的可擴充性。
表現層主要是JSP頁面充當,負責收集使用者的請求資料並提交到指定的控制器。當系統處理完使用者的請求後,JSP頁面還負責將處理結果呈現給使用者。(禁用JSP頁面的Java指令碼可以保證JSP頁面作為表現層的純潔性)
JSP的所有請求都想Struts的ActionServlet發送,通過這種方式,Struts成為系統的前端控制器,所有的請求都將由Struts來處理。ActionServlet攔截到使用者請求後,將請求轉寄到使用者定義的商務邏輯控制器。
將所有請求都使用ActionServlet攔截還有一個好處,將所有的JSP頁面都放在WEB-INF/路徑下,可以避免使用者直接存取JSP頁面,提供了系統安全性。
當ActionServlet轉寄使用者請求時,並沒有轉寄實際的Action處理類,而是轉寄給Spring提供的DelegatingActionProxy類,這個類負責將所有的請求轉入Spring容器內,而Struts原有的商務邏輯控制器則由Spring容器負責管理。通過這種方式,可以實現Struts與Spring的整合。給出了從Struts轉入Spring容器中的Bean順序圖。
一旦進入了Spring IoC容器的內部,IoC容器負責建立系統所需的控制器,每次使用者請求到達時,IoC容器都會重新建立一個新的控制器組件。
控制器組件依賴系統的商務邏輯組件,這種依賴也無須控制器組件主動去尋找,由Spring容器將商務邏輯組件注入到控制器組件。商務邏輯組件包含了系統的全部商務邏輯方法,本系統的商務邏輯方法放在商務邏輯中實現,而不是在Domain Object中實現。
事務採用Spring的聲明式事務架構。通過聲明式事務,無須將事務策略以硬式編碼方式與代碼耦合在一起,而是放在設定檔中聲明。商務邏輯組件可以更專註業務的實現,從而簡化了開發。同時,聲明事務降低了不同事務策略的切換代價。
註:聲明式事務是基於Spring的AOP實現,實際上,AOP並不是僅僅提供聲明式交易管理,還可以管理基於AOP的許可權管理等功能。
DAO層主要包含了系列的DAO組件,將系統中的給中資料庫訪問都封裝在DAO方法裡,為上一層商務邏輯方法的實現提供支援。DAO對象基於Spring的HibernateDaoSupport類實現,繼承HibernateDaoSupport的DAO對象很簡單,程式員無須管理Hibernate的SessionFactory、Session等對象。程式開發人員通過Spring提供的HibernateTemplate完成資料庫操作。