SSH是 struts+spring+hibernate的一個集成框架,是16年之前較為流行的一種Web應(yīng)用程序開源框架。區(qū)別于?Secure Shell?。

中文名

SSH框架

外文名

SSH-Framework

屬性

Web應(yīng)用程序開源框架

學(xué)科

計算機編程

全稱

Spring + Struts + Hibernate

發(fā)展前景

現(xiàn)在市面上流行的框架主要有SSM、SSH等,相比較于SSH、SSM現(xiàn)在用的已經(jīng)更多,但是其地位依舊沒有怎么改變,就像最初的Jsp、Servlet技術(shù)一樣,雖然現(xiàn)在在市面上還使用Jsp、Servlet的人已經(jīng)越來越少了,但是相關(guān)思想一直作為這些框架的基礎(chǔ),從沒有被撼動。Spring的登頂?shù)匚徊皇菦]有道理的,其增強的模塊化、面向切面、控制反轉(zhuǎn)、依賴注入都是使它成為經(jīng)典的重要原因。Struts2最大的特點就是不用再重寫或?qū)崿F(xiàn)Action類,而這些都交給了攔截器處理,使用框架API,其缺點就是不夠靈活。Hibernate的經(jīng)典之處就是其不論是在哪一種數(shù)據(jù)庫中都是獨立于DB存在的,并且提供了緩存機制,使用起來更加方便。

意義

框架的使用可以大大縮短大型系統(tǒng)的開發(fā)周期,提高開發(fā)質(zhì)量,就傳統(tǒng)的Java編程來說,基于類庫的面向?qū)ο蟮募夹g(shù)來比較,框架已經(jīng)為我們封住這些代碼,在開發(fā)的過程中,只要能夠調(diào)用這些已經(jīng)寫好的類或接口,來實現(xiàn)其中的方法,或者重寫其中的方法,使其為我們的工作服務(wù),那么就可以節(jié)省我們的開發(fā)周期。使工作更加高效有序地進行。

應(yīng)用框架更傾向于面向?qū)I(yè)領(lǐng)域的軟件重用,隨著軟件行業(yè)的不斷發(fā)展,各種系統(tǒng)變得更加復(fù)雜,其中所涉及的領(lǐng)域也越來越寬泛,如果每接到一個新的系統(tǒng)重新開始開發(fā),那會是一個很漫長的過程,降低了工作效率。如果團隊中的工作人員各自寫各自的,由于每個人的工作風(fēng)格不同,編寫代碼的方式也不同,那么這個工程就會變得雜亂無章,并且如果系統(tǒng)出現(xiàn)問題,想要再次維護,更是難上加難。因而SSH框架可以使開發(fā)人員在編寫程序時盡量一致,這樣可以減少因工作習(xí)慣不同而導(dǎo)致的維護工作復(fù)雜的問題。

技術(shù)優(yōu)勢

SSH框架是基于傳統(tǒng)J2EE框架的新技術(shù),SSH框架繼承了J2EE的分層架構(gòu)模式,二者的不同之處僅在于層與層之間的實現(xiàn)方法。當(dāng)J2EE框架和SSH架構(gòu)完成相同的運算任務(wù)時,SSH框架消耗的系統(tǒng)資源最少。

SSH框架在業(yè)務(wù)對象的的平臺專用性上沒有特殊的限定要求,在SSH框架中業(yè)務(wù)邏輯的實現(xiàn)通過普通的Java對象即可完成。

SSH組合框架技術(shù)優(yōu)勢體現(xiàn)在四個方面:一、分離了Java代碼和HTML代碼,降低了對開發(fā)人員要求的復(fù)合度。二、是系統(tǒng)的層與層之間的工作相是對獨立的,代碼耦合度低。三即使脫離了Spring 環(huán)境的AOP機制,也不會妨礙AOP實現(xiàn)業(yè)務(wù)的功能。四、與SSH配合使用的Hibemate等跨平臺技術(shù)開源性極強促使了SSH框架的飛速發(fā)展。

SSH的技術(shù)優(yōu)勢使得采用SSH框架技術(shù)開發(fā)的系統(tǒng)具備了很強的可拓展性、可移植性。同時,采用開源的SSH框架能夠大大簡化系統(tǒng)開發(fā)的復(fù)雜度,縮短系統(tǒng)開發(fā)時間。

定義

SSH 為 struts+spring+hibernate的一個集成框架,是目前較流行的一種Web應(yīng)用程序開源框架。

ssh框架

集成SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護方便的Web應(yīng)用程序。其中使用Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負責(zé)MVC的分離,在Struts框架的模型部分,控制業(yè)務(wù)跳轉(zhuǎn),利用Hibernate框架對持久層提供支持,Spring做管理,管理struts和hibernate。具體做法是:用面向?qū)ο蟮姆治龇椒ǜ鶕?jù)需求提出一些模型,將這些模型實現(xiàn)為基本的Java對象,然后編寫基本的DAO(Data Access Objects)接口,并給出Hibernate的DAO實現(xiàn),采用Hibernate架構(gòu)實現(xiàn)的DAO類來實現(xiàn)Java類與數(shù)據(jù)庫之間的轉(zhuǎn)換和訪問,最后由Spring做管理,管理struts和hibernate。

系統(tǒng)的基本業(yè)務(wù)流程是:在表示層中,首先通過JSP頁面實現(xiàn)交互界面,負責(zé)傳送請求(Request)和接收響應(yīng)(Response),然后Struts根據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應(yīng)的Action處理。在業(yè)務(wù)層中,管理服務(wù)組件的Spring IoC容器負責(zé)向Action提供業(yè)務(wù)模型(Model)組件和該組件的協(xié)作對象數(shù)據(jù)處理(DAO)組件完成業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。而在持久層中,則依賴于Hibernate的對象化映射和數(shù)據(jù)庫交互,處理DAO組件請求的數(shù)據(jù),并返回處理結(jié)果。

采用上述開發(fā)模型,不僅實現(xiàn)了視圖、控制器與模型的徹底分離,而且還實現(xiàn)了業(yè)務(wù)邏輯層與持久層的分離。這樣無論前端如何變化,模型層只需很少的改動,并且數(shù)據(jù)庫的變化也不會對前端有所影響,大大提高了系統(tǒng)的可復(fù)用性。而且由于不同層之間耦合度小,有利于團隊成員并行工作,大大提高了開發(fā)效率。

框架結(jié)構(gòu)

Strut

Struts對Model,View和Controller都提供了對應(yīng)的組件。

ActionServlet,這個類是Struts的核心控制器,負責(zé)攔截來自用戶的請求。

Action,這個類通常由用戶提供,該控制器負責(zé)接收來自ActionServlet的請求,并根據(jù)該請求調(diào)用模型的業(yè)務(wù)邏輯方法處理請求,并將處理結(jié)果返回給JSP頁面顯示。

Model部分:

由ActionForm和JavaBean組成,其中ActionForm用于封裝用戶的請求參數(shù),封裝成ActionForm對象,該對象被ActionServlet轉(zhuǎn)發(fā)給Action,Action根據(jù)ActionFrom里面的請求參數(shù)處理用戶的請求。

JavaBean則封裝了底層的業(yè)務(wù)邏輯,包括數(shù)據(jù)庫訪問等。

View部分:

該部分采用JSP(或HTML、PHP……)實現(xiàn)。

Struts提供了豐富的標(biāo)簽庫,通過標(biāo)簽庫可以減少腳本的使用,自定義的標(biāo)簽庫可以實現(xiàn)與Model的有效交互,并增加了現(xiàn)實功能。對應(yīng)上圖的JSP部分。

Controller組件:

Controller組件有兩個部分組成——系統(tǒng)核心控制器,業(yè)務(wù)邏輯控制器。

系統(tǒng)核心控制器,對應(yīng)上圖的ActionServlet。該控制器由Struts框架提供,繼承HttpServlet類,因此可以配置成標(biāo)注的Servlet。該控制器負責(zé)攔截所有的HTTP請求,然后根據(jù)用戶請求決定是否要轉(zhuǎn)給業(yè)務(wù)邏輯控制器。

業(yè)務(wù)邏輯控制器,負責(zé)處理用戶請求,本身不具備處理能力,而是調(diào)用Model來完成處理。對應(yīng)Action部分。

Spring

Spring是一個開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。

目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性

功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能

范圍:任何Java應(yīng)用

簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對象不依賴于Spring的特定類。

控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了松耦合。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)(transaction)管理)進行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。

容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype),你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。

框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。

所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。

Hibernate

Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。

Hibernate的核心接口一共有5個,分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個核心接口在任何開發(fā)中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務(wù)控制。下面對這五個核心接口分別加以介紹。

·Session接口:Session接口負責(zé)執(zhí)行被持久化對象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對象是非線程安全的。同時,Hibernate的session不同于JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個術(shù)語時,其實指的是Hibernate中的session,而以后會將HttpSession對象稱為用戶session。

·SessionFactory接口:SessionFactory接口負責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負責(zé)創(chuàng)建Session對象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當(dāng)需要操作多個數(shù)據(jù)庫時,可以為每個數(shù)據(jù)庫指定一個SessionFactory。

·Configuration接口:Configuration接口負責(zé)配置并啟動Hibernate,創(chuàng)建SessionFactory對象。在Hibernate的啟動的過程中,Configuration類的實例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對象。

·Transaction接口:Transaction接口負責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計編寫自己的底層事務(wù)處理代碼。

·Query和Criteria接口:Query和Criteria接口負責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。它可以使用HQL語言或SQL語句兩種表達方式。