1.什么是ssh?
SSH對應 struts spring hibernate
struts 采用MVC模式,主要是作用於用戶交互
spring 采用IOC和AOP~作用比較抽象,是用於項目的松耦合
hibernate 是對象持久化框架,其實就是實體類和數據庫表建立關系,操作類就會觸發相應的sql語句,可以不用寫任何sql語句,完成數據庫編程
SSH就是Struts + Spring + Hibernate 3個Java框架的集合,現在Java開發中常用的框架組合。用來開發后台,與前台和數據庫進行數據交互。
2.什么是Struts2
Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合並的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有着太大的變化,但是相對於WebWork,Struts 2的變化很小
設計目標
Struts設計的第一目標就是使MVC模式應用於web程序設計。在這兒MVC模式的好處就不在提了。
技術優勢
Struts2有兩方面的技術優勢,一是所有的Struts2應用程序都是基於client/server HTTP交換協議,The Java Servlet API揭示了Java Servlet只是Java API的一個很小子集,這樣我們可以在業務邏輯部分使用功能強大的Java語言進行程序設計。
二是提供了對MVC的一個清晰的實現,這一實現包含了很多參與對所以請求進行處理的關鍵組件,如:攔截器、OGNL表達式語言、堆棧。
因為struts2有這樣目標,並且有這樣的優勢,所以,這是我們學習struts2的理由,下面,我們在深入剖析一下struts的工作原理。

struts2的優/缺點:
優點:
這里有一些強大的功能,可能會迫使你考慮Struts2:
- POJO表單和POJO動作 - Struts2的Struts框架已經擺脫了動作表單組成部分, Struts2可以使用任何POJO接收的形式輸入。同樣現在可以看到任何POJO作為一個Action類。
- 標簽支持 - Struts2中,提高了表單標簽和新標簽允許開發人員編寫更少的代碼。
- AJAX 支持- Struts2中已確認由Web2.0技術接管,並整合到產品中,通過創建AJAX標簽,功能非常相似的標准Struts2 標簽AJAX支持。
- 易於整合 - Struts2 集成各種整合與其他框架如Spring,Tiles 和SiteMesh是現在更容易。
- 模板支持 - 支持生成使用模板。
- 插件支持 - 可以提高核心Struts2的特性,並增強使用插件。大量的插件可供Struts2。
- 性能分析 - Struts2的分析,調試和分析應用程序提供了集成。除此之外,Struts還提供了集成的內置調試工具調試。
- 易於修改標簽 - Struts2的標簽標注,可以調整使用Freemarker的模板。這並不需要JSP或Java知識。基本HMTL,XML和CSS知識是足夠修改標簽。
- 提倡少配置 - Struts2 促進較少的配置的幫助下,使用默認的各種設置值。不必配置的東西,除非它不符Struts2的默認設置。
- 視圖技術: - Struts2中有一個很大的支持多個視圖選項 (JSP, Freemarker, Velocity 和 XSLT)
以上只是Struts2的十大功能,這使得它是企業公司級應用框架。
缺點:
雖然Struts 2 的配備了一個偉大的功能列表,但我不會忘記提及關於Struts2一些缺點,將需要大量的改進措施:
- 更大的學習曲線 - 要使用MVC與Struts,你必須是習慣使用標准的JSP,Servlet API和大量精心設計的框架。
- 欠佳的文檔 - Struts有標准的servlet和JSP API的相比,更少的在線資源,許多用戶第一時間發現網上Apache文檔混亂和管理不善的組織。
- 較少透明度 - Struts應用程序中,有很多幕后比正常的基於Java的Web應用程序,這使得它很難理解的框架。
最后一點,一個好的框架應該提供通用的特性,許多不同類型的應用程序,可以利用它。 Struts 2是一個最好的網絡架構和高度被用於開發富Internet應用程序(RIA)。
3.什么是Spring?
Spring是一個輕量級的DI和AOP容器框架。
說它輕量級有一大部分原因是相對與EJB的(雖然本人從沒有接觸過EJB的應用),重要的是,Spring是非侵入式的,基於spring開發的應用一般不依賴於spring的類。
DI:稱作依賴注入(Dependency Injection),和控制反轉一個概念,具體的講,當一個角色需要另外一個角色協助的時候,在傳統的程序設計中,通常有調用者來創建被調用者的實例。但是在spring中創建被調用者將不再有調用者完成,因此叫控制反轉。創建被調用對象有Spring來完成,在容器實例化對象的時候主動的將被調用者(或者說它的依賴對象)注入給調用對象,因此又叫依賴注入。
AOP:Spring對面向切面編程提供了強有力的支持,通過它讓我們將業務邏輯從應用服務(如事務管理)中分離出來,實現了高內聚開發,應用對象只關注業務邏輯,不再負責其它系統問題(如日志、事務等)。Spring支持用戶自定義切面。
面向切面編程是面向對象編程的有力補充。面向對象編程將程序分成各個層次的對象,面向切面的程序將運行過程分解成各個切面。AOP是從運行程序的角度去考慮程序的結構,提取業務處理過程的切面,OOP是靜態的抽象,AOP是動態的抽象,是對應用執行過程的步驟進行抽象,從而獲得步驟之間的邏輯划分。
容器:Spring是個容器,因為它包含並且管理應用對象的生命周期和配置。如對象的創建、銷毀、回調等。
框架:Spring作為一個框架,提供了一些基礎功能,(如事務管理,持久層集成等),使開發人員更專注於開發應用邏輯。
Spring的優/缺點:
優點:
1.使用Spring的IOC容器,將對象之間的依賴關系交給Spring,降低組件之間的耦合性,讓我們更專注於應用邏輯
2.可以提供眾多服務,事務管理,WS等。
3.AOP的很好支持,方便面向切面編程。
4.對主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等
5.Spring DI機制降低了業務對象替換的復雜性。
6.Spring屬於低侵入,代碼污染極低。
7.Spring的高度可開放性,並不強制依賴於Spring,開發者可以自由選擇Spring部分或全部
缺點:
1.項目有時會抽風,無緣無故的報錯,而且報的錯也很神奇
4.什么是hibernate?
Hibernate,翻譯過來是冬眠的意思,正好現在已經進入秋季,世間萬物開始准備冬眠了。其實對於對象來說就是持久化。
掃盲----------------------------------------
持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的對象存儲在關系型的數據庫中,當然也可以存儲在磁盤文件中、XML數據文件中等等。
持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。
JDBC就是一種持久化機制。文件IO也是一種持久化機制。
日常持久化的方法:
1、將鮮肉冷藏,吃的時候再解凍的方法也是。
2、將水果做成罐頭的方法也是。
我們從三個角度理解一下Hibernate:
一、Hibernate是對JDBC進一步封裝
原來沒有使用Hiberante做持久層開發時,存在很多冗余,如:各種JDBC語句,connection的管理,所以出現了Hibernate把JDBC封裝了一下,我們不用操作數據,直接操作它就行了。
二、我們再從分層的角度來看
我們知道非常典型的三層架構:表示層,業務層,還有持久層。Hiberante也是持久層的框架,而且持久層的框架還有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。
三、Hibernate是開源的一個ORM(對象關系映射)框架。
ORM,即Object-Relational Mapping,它的作用就是在關系型數據庫和對象之間做了一個映射。從對象(Object)映射到關系(Relation),再從關系映射到對象。這樣,我們在操作數據庫的時候,不需要再去和復雜SQL打交道,只要像操作對象一樣操作它就可以了(把關系數據庫的字段在內存中映射成對象的屬性)。
Hibernate的核心:

從上圖中,我們可以看出Hibernate六大核心接口,兩個主要配置文件,以及他們直接的關系。Hibernate的所有內容都在這了。那我們從上到下簡單的認識一下,每個接口進行一句話總結。
1、Configuration接口:負責配置並啟動Hibernate
2、SessionFactory接口:負責初始化Hibernate
3、Session接口:負責持久化對象的CRUD操作
4、Transaction接口:負責事務
5、Query接口和Criteria接口:負責執行各種數據庫查詢
注意:Configuration實例是一個啟動期間的對象,一旦SessionFactory創建完成它就被丟棄了。
Hibernate的優/缺點:
優點:
1、更加對象化
以對象化的思維操作數據庫,我們只需要操作對象就可以了,開發更加對象化。
2、移植性
因為Hibernate做了持久層的封裝,你就不知道數據庫,你寫的所有的代碼都具有可復用性。
3、Hibernate是一個沒有侵入性的框架,沒有侵入性的框架我們稱為輕量級框架。
對比Struts的Action和ActionForm,都需要繼承,離不開Struts。Hibernate不需要繼承任何類,不需要實現任何接口。這樣的對象叫POJO對象。
4、Hibernate代碼測試方便。
5、提高效率,提高生產力。
缺點:
1、使用數據庫特性的語句,將很難調優
2、對大批量數據更新存在問題
3、系統中存在大量的攻擊查詢功能
