說在前面
本學期我們有一門課叫做Java EE,由陳老師所授,主要講的就是Java EE 中的SSH框架。 由於陳老師授課風格以及自己的原因導致學了整整一學期不知道在講什么,所以才有了自己重新學習總結的博客,其中可能會有一些錯誤和描述解釋不恰當的地方,望讀者能及時提出。
什么是SSH框架
官方的說法:SSH是 struts+spring+hibernate的一個集成框架,是目前較流行的一種web應用程序開源框架。
SSH不是一個框架,而是把多個框架(Struts、Spring以及Hibernate)緊密的結合在一起,用於構建靈活、易於擴展的多層Web應用程序。
Java EE架構大致分為以下幾個層次:
- 實體層(POJO層)
- 數據訪問層(DAO層)
- 業務邏輯層(Service層)
- 控制器層(Controller層)
- 表現層(View層)
其中SSH框架的系統從職能上分大致可以分為四層:表示層、業務邏輯層、數據持久層和域模塊層(實體層)。
由SSH構建系統的基本業務流程是:
1、在表示層中,首先通過JSP頁面實現交互界面,負責傳送請求(Request)和接收響應(Response),然后Struts根據配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理。
2、在業務層中,管理服務組件的Spring IoC容器負責向Action提供業務模型(Model)組件和該組件的協作對象數據處理(DAO)組件完成業務邏輯,並提供事務處理、緩沖池等容器組件以提升系統性能和保證數據的完整性。
3、在持久層中,則依賴於Hibernate的對象化映射和數據庫交互,處理DAO組件請求的數據,並返回處理結果。
采用上述開發模型,不僅實現了視圖、控制器與模型的徹底分離,而且還實現了業務邏輯層與持久層的分離。這樣無論前端如何變化,模型層只需很少的改動,並且數據庫的變化也不會對前端有所影響,大大提高了系統的可復用性。而且由於不同層之間耦合度小,有利於團隊成員並行工作,大大提高了開發效率。
淺談Struts
什么是Struts
從簡單性來看,Struts是這三個框架中最簡單的一個,它是基於MVC的框架。它通過采用JavaServlet/JSP技術,實現了基於Java EEWeb應用的MVC設計模式的應用框架,是MVC的一個具體實現或着說是MVC的一個具體產品。
Struts的核心構成
Struts的核心同樣也是MVC的核心,Struts是MVC的一個具體產品。
(1)Model
由Action、ActionForm以及JavaBean組成,其中ActionForm用於將用戶請求的參數,封裝成為ActionForm對象,我們可以理解為實體,由ActionServlet轉發給Action,Action處理用戶請求,將處理結果返回到界面。
(2)View
該部分采用JSP+大量的taglib,實現頁面的渲染。
(3)Controller
Controller是Struts的核心控制器,負責攔截用戶請求,通過調用Model來實現處理用戶請求的功能。
為什么使用Struts
首先,Struts 是MVC的一種實現,它將 Servlet和 JSP 標記(屬於 J2EE 規范)用作實現的一部分。Struts繼承了MVC的各項特性,並根據J2EE的特點,做了相應的變化與擴展,減弱了業務邏輯接口和數據接口之間的耦合,以及讓視圖層更富於變化
另外, struts具有頁面導航功能,使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統各部分之間的聯系,這對於后期的維護有着莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。
淺談Hibernate
什么是Hibernate
Hibernate是一種Java語言下的ORM(Object-Relation Mapping)的解決方案的一種框架,實現了數據持久化功能。Hibernate能將對象模型所表示的JOPO實體映射到基於SQL的關系模型結構中,對JDBC進行了最大限度地對象封裝,使得程序員可以通過面向對象地編程思維來操作數據庫。
其實在Struts2里面也是用到了很多映射的思想,比如:execute()方法,這個以后再例子中大家能很好地體會到,這里就不詳談。
Hibernate的核心構成
- 會話工廠(SessionFactory)
配置對象被用於創造一個SessionFactory對象,使用提供的配置文件為應用程序依次配置Hibernate,並允許實例化一個會話對象。SessionFactory是一個線程安全對象並由應用程序所有的線程所使用。
SessionFactory是一個重量級對象所以通常它都是在應用程序啟動時創造然后留存為以后使用。每個數據庫需要一個SessionFactory對象使用一個單獨的配置文件。所以如果你使用多種數據庫那么你要創造多種SessionFactory對象。
- 會話(Session)
一個會話被用於與數據庫的物理連接。Session對象是輕量級的,並被設計為每次實例化都需要與數據庫的交互。持久對象通過 Session
對象保存和檢索。Session 對象不應該長時間保持開啟狀態因為它們通常情況下並非線程安全,並且它們應該按照所需創造和銷毀。
- 事務(Transaction)
事務對象指定工作的原子單位,它是一個可選項.org.hibernate.Transaction接口提供事務管理的方法。
- Query 對象
Query對象使用SQL或者Hibernate查詢語言(HQL)字符串在數據庫中來檢索數據並創造對象。一個查詢的實例被用於連結查詢參數,限制由查詢返回的結果數量,並最終執行查詢。
- Criteria 對象
Criteria對象被用於創造和執行面向規則查詢的對象來檢索對象。
- Configuration 對象
配置對象是你在任何Hibernate應用程序中創造的第一個Hibernate對象,並且經常只在應用程序初始化期間創造。它代表了Hibernate所需一個配置或屬性文件,配置對象提供了兩種基礎組件。
數據庫連接:由Hibernate支持的一個或多個配置文件處理。這些文件是hibernate.properties和hibernate.cfg.xml。
類映射設置:這個組件創造了 Java類和數據庫表格之間的聯系。
淺談Spring
Spring是J2EE應用程序框架,是輕量級的IoC(Inversion of Control,控制反轉)和AOP(Aspectted Programming,面向切面)的容器框架,主要是針對javaBean的生命周期進行管理的輕量級容器,可以單獨使用,也可以和Struts框架,Hibernate框架等組合使用。
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式。
- IoC(Inversion of Control)控制反轉
對象創建責任的反轉,在spring中BeanFacotory是IoC容器的核心接口,負責實例化,定位,配置應用程序中的對象及建立這些對象間的依賴。
XmlBeanFacotory實現BeanFactory接口,通過獲取xml配置文件數據,組成應用對象及對象間的依賴關系。
spring中有三種注入方式,一種是set注入,一種是接口注入,另一種是構造方法注入。
- AOP面向切面編程
面向方面的編程,即AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化。AOP
的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。
為什么使用Spring
沒有Spring,Struts和Hibernate可以很好的運行,我稱這樣的模式為“獨木橋”,但是有了Spring,Struts和Hibernate能夠更好的結合在一起,協調的工作。我稱這樣的模式為“陽光大道”。Spring的核心思想是IoC和AOP,Spring使得管理對象更加方便,極大的降低組件之間的耦合度,實現了軟件各層之間的解耦。Spring的優點還有很多,我們就不再累述了。
后言
這里只是淺談了一些關於SSH框架的基礎知識,便於大家宏觀來了解認識什么是SSH框架,其實要想體會框架的精妙之處還得自己做一做簡單例子才能體會,后續我會將我做的小例子以我個人學習過程分享出來。
本文資源圖文部分來源於網絡,這里特別感謝