SSH框架详解
1.什么是ssh?
SSH對(duì)應(yīng) struts spring hibernate
struts 采用MVC模式,主要是作用于用戶(hù)交互
spring 采用IOC和AOP~作用比較抽象,是用于項(xiàng)目的松耦合
hibernate 是對(duì)象持久化框架,其實(shí)就是實(shí)體類(lèi)和數(shù)據(jù)庫(kù)表建立關(guān)系,操作類(lèi)就會(huì)觸發(fā)相應(yīng)的sql語(yǔ)句,可以不用寫(xiě)任何sql語(yǔ)句,完成數(shù)據(jù)庫(kù)編程
SSH就是Struts + Spring + Hibernate 3個(gè)Java框架的集合,現(xiàn)在Java開(kāi)發(fā)中常用的框架組合。用來(lái)開(kāi)發(fā)后臺(tái),與前臺(tái)和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互。
2.什么是Struts2
Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶(hù)的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開(kāi),所以Struts 2可以理解為WebWork的更新產(chǎn)品。雖然從Struts 1到Struts 2有著太大的變化,但是相對(duì)于WebWork,Struts 2的變化很小
設(shè)計(jì)目標(biāo)
Struts設(shè)計(jì)的第一目標(biāo)就是使MVC模式應(yīng)用于web程序設(shè)計(jì)。在這兒MVC模式的好處就不在提了。
技術(shù)優(yōu)勢(shì)
Struts2有兩方面的技術(shù)優(yōu)勢(shì),一是所有的Struts2應(yīng)用程序都是基于client/server HTTP交換協(xié)議,The Java Servlet API揭示了Java Servlet只是Java API的一個(gè)很小子集,這樣我們可以在業(yè)務(wù)邏輯部分使用功能強(qiáng)大的Java語(yǔ)言進(jìn)行程序設(shè)計(jì)。
二是提供了對(duì)MVC的一個(gè)清晰的實(shí)現(xiàn),這一實(shí)現(xiàn)包含了很多參與對(duì)所以請(qǐng)求進(jìn)行處理的關(guān)鍵組件,如:攔截器、OGNL表達(dá)式語(yǔ)言、堆棧。
因?yàn)閟truts2有這樣目標(biāo),并且有這樣的優(yōu)勢(shì),所以,這是我們學(xué)習(xí)struts2的理由,下面,我們?cè)谏钊肫饰鲆幌聅truts的工作原理。
struts2的優(yōu)/缺點(diǎn):
優(yōu)點(diǎn):
這里有一些強(qiáng)大的功能,可能會(huì)迫使你考慮Struts2:
POJO表單和POJO動(dòng)作- Struts2的Struts框架已經(jīng)擺脫了動(dòng)作表單組成部分,Struts2可以使用任何POJO接收的形式輸入。同樣現(xiàn)在可以看到任何POJO作為一個(gè)Action類(lèi)。
標(biāo)簽支持- Struts2中,提高了表單標(biāo)簽和新標(biāo)簽允許開(kāi)發(fā)人員編寫(xiě)更少的代碼。
AJAX支持- Struts2中已確認(rèn)由Web2.0技術(shù)接管,并整合到產(chǎn)品中,通過(guò)創(chuàng)建AJAX標(biāo)簽,功能非常相似的標(biāo)準(zhǔn)Struts2標(biāo)簽AJAX支持。
易于整合- Struts2集成各種整合與其他框架如Spring,Tiles和SiteMesh是現(xiàn)在更容易。
模板支持- 支持生成使用模板。
插件支持- 可以提高核心Struts2的特性,并增強(qiáng)使用插件。大量的插件可供Struts2。
性能分析- Struts2的分析,調(diào)試和分析應(yīng)用程序提供了集成。除此之外,Struts還提供了集成的內(nèi)置調(diào)試工具調(diào)試。
易于修改標(biāo)簽- Struts2的標(biāo)簽標(biāo)注,可以調(diào)整使用Freemarker的模板。這并不需要JSP或Java知識(shí)。基本HMTL,XML和CSS知識(shí)是足夠修改標(biāo)簽。
提倡少配置- Struts2促進(jìn)較少的配置的幫助下,使用默認(rèn)的各種設(shè)置值。不必配置的東西,除非它不符Struts2的默認(rèn)設(shè)置。
視圖技術(shù):- Struts2中有一個(gè)很大的支持多個(gè)視圖選項(xiàng)(JSP, Freemarker, Velocity 和 XSLT)
以上只是Struts2的十大功能,這使得它是企業(yè)公司級(jí)應(yīng)用框架。
缺點(diǎn):
雖然Struts 2 的配備了一個(gè)偉大的功能列表,但我不會(huì)忘記提及關(guān)于Struts2一些缺點(diǎn),將需要大量的改進(jìn)措施:
更大的學(xué)習(xí)曲線- 要使用MVC與Struts,你必須是習(xí)慣使用標(biāo)準(zhǔn)的JSP,Servlet API和大量精心設(shè)計(jì)的框架。
欠佳的文檔- Struts有標(biāo)準(zhǔn)的servlet和JSP API的相比,更少的在線資源,許多用戶(hù)第一時(shí)間發(fā)現(xiàn)網(wǎng)上Apache文檔混亂和管理不善的組織。
較少透明度- Struts應(yīng)用程序中,有很多幕后比正常的基于Java的Web應(yīng)用程序,這使得它很難理解的框架。
最后一點(diǎn),一個(gè)好的框架應(yīng)該提供通用的特性,許多不同類(lèi)型的應(yīng)用程序,可以利用它。 Struts 2是一個(gè)最好的網(wǎng)絡(luò)架構(gòu)和高度被用于開(kāi)發(fā)富Internet應(yīng)用程序(RIA)。
3.什么是Spring?
Spring是一個(gè)輕量級(jí)的DI和AOP容器框架。
說(shuō)它輕量級(jí)有一大部分原因是相對(duì)與EJB的(雖然本人從沒(méi)有接觸過(guò)EJB的應(yīng)用),重要的是,Spring是非侵入式的,基于spring開(kāi)發(fā)的應(yīng)用一般不依賴(lài)于spring的類(lèi)。
DI:稱(chēng)作依賴(lài)注入(Dependency Injection),和控制反轉(zhuǎn)一個(gè)概念,具體的講,當(dāng)一個(gè)角色需要另外一個(gè)角色協(xié)助的時(shí)候,在傳統(tǒng)的程序設(shè)計(jì)中,通常有調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例。但是在spring中創(chuàng)建被調(diào)用者將不再有調(diào)用者完成,因此叫控制反轉(zhuǎn)。創(chuàng)建被調(diào)用對(duì)象有Spring來(lái)完成,在容器實(shí)例化對(duì)象的時(shí)候主動(dòng)的將被調(diào)用者(或者說(shuō)它的依賴(lài)對(duì)象)注入給調(diào)用對(duì)象,因此又叫依賴(lài)注入。
AOP:Spring對(duì)面向切面編程提供了強(qiáng)有力的支持,通過(guò)它讓我們將業(yè)務(wù)邏輯從應(yīng)用服務(wù)(如事務(wù)管理)中分離出來(lái),實(shí)現(xiàn)了高內(nèi)聚開(kāi)發(fā),應(yīng)用對(duì)象只關(guān)注業(yè)務(wù)邏輯,不再負(fù)責(zé)其它系統(tǒng)問(wèn)題(如日志、事務(wù)等)。Spring支持用戶(hù)自定義切面。
面向切面編程是面向?qū)ο缶幊痰挠辛ρa(bǔ)充。面向?qū)ο缶幊虒⒊绦蚍殖筛鱾€(gè)層次的對(duì)象,面向切面的程序?qū)⑦\(yùn)行過(guò)程分解成各個(gè)切面。AOP是從運(yùn)行程序的角度去考慮程序的結(jié)構(gòu),提取業(yè)務(wù)處理過(guò)程的切面,OOP是靜態(tài)的抽象,AOP是動(dòng)態(tài)的抽象,是對(duì)應(yīng)用執(zhí)行過(guò)程的步驟進(jìn)行抽象,從而獲得步驟之間的邏輯劃分。
容器:Spring是個(gè)容器,因?yàn)樗⑶夜芾響?yīng)用對(duì)象的生命周期和配置。如對(duì)象的創(chuàng)建、銷(xiāo)毀、回調(diào)等。
框架:Spring作為一個(gè)框架,提供了一些基礎(chǔ)功能,(如事務(wù)管理,持久層集成等),使開(kāi)發(fā)人員更專(zhuān)注于開(kāi)發(fā)應(yīng)用邏輯。
Spring的優(yōu)/缺點(diǎn):
優(yōu)點(diǎn):
1.使用Spring的IOC容器,將對(duì)象之間的依賴(lài)關(guān)系交給Spring,降低組件之間的耦合性,讓我們更專(zhuān)注于應(yīng)用邏輯
2.可以提供眾多服務(wù),事務(wù)管理,WS等。
3.AOP的很好支持,方便面向切面編程。
4.對(duì)主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等
5.Spring DI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性。
6.Spring屬于低侵入,代碼污染極低。
7.Spring的高度可開(kāi)放性,并不強(qiáng)制依賴(lài)于Spring,開(kāi)發(fā)者可以自由選擇Spring部分或全部
缺點(diǎn):
1.項(xiàng)目有時(shí)會(huì)抽風(fēng),無(wú)緣無(wú)故的報(bào)錯(cuò),而且報(bào)的錯(cuò)也很神奇
4.什么是hibernate?
Hibernate,翻譯過(guò)來(lái)是冬眠的意思,正好現(xiàn)在已經(jīng)進(jìn)入秋季,世間萬(wàn)物開(kāi)始準(zhǔn)備冬眠了。其實(shí)對(duì)于對(duì)象來(lái)說(shuō)就是持久化。
掃盲----------------------------------------
持久化(Persistence),即把數(shù)據(jù)(如內(nèi)存中的對(duì)象)保存到可永久保存的存儲(chǔ)設(shè)備中(如磁盤(pán))。持久化的主要應(yīng)用是將內(nèi)存中的對(duì)象存儲(chǔ)在關(guān)系型的數(shù)據(jù)庫(kù)中,當(dāng)然也可以存儲(chǔ)在磁盤(pán)文件中、XML數(shù)據(jù)文件中等等。
持久化是將程序數(shù)據(jù)在持久狀態(tài)和瞬時(shí)狀態(tài)間轉(zhuǎn)換的機(jī)制。
JDBC就是一種持久化機(jī)制。文件IO也是一種持久化機(jī)制。
日常持久化的方法:
1、將鮮肉冷藏,吃的時(shí)候再解凍的方法也是。
2、將水果做成罐頭的方法也是。
我們從三個(gè)角度理解一下Hibernate:
一、Hibernate是對(duì)JDBC進(jìn)一步封裝
原來(lái)沒(méi)有使用Hiberante做持久層開(kāi)發(fā)時(shí),存在很多冗余,如:各種JDBC語(yǔ)句,connection的管理,所以出現(xiàn)了Hibernate把JDBC封裝了一下,我們不用操作數(shù)據(jù),直接操作它就行了。
二、我們?cè)購(gòu)姆謱拥慕嵌葋?lái)看
我們知道非常典型的三層架構(gòu):表示層,業(yè)務(wù)層,還有持久層。Hiberante也是持久層的框架,而且持久層的框架還有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。
三、Hibernate是開(kāi)源的一個(gè)ORM(對(duì)象關(guān)系映射)框架。
ORM,即Object-Relational Mapping,它的作用就是在關(guān)系型數(shù)據(jù)庫(kù)和對(duì)象之間做了一個(gè)映射。從對(duì)象(Object)映射到關(guān)系(Relation),再?gòu)年P(guān)系映射到對(duì)象。這樣,我們?cè)诓僮鲾?shù)據(jù)庫(kù)的時(shí)候,不需要再去和復(fù)雜SQL打交道,只要像操作對(duì)象一樣操作它就可以了(把關(guān)系數(shù)據(jù)庫(kù)的字段在內(nèi)存中映射成對(duì)象的屬性)。
Hibernate的核心:
從上圖中,我們可以看出Hibernate六大核心接口,兩個(gè)主要配置文件,以及他們直接的關(guān)系。Hibernate的所有內(nèi)容都在這了。那我們從上到下簡(jiǎn)單的認(rèn)識(shí)一下,每個(gè)接口進(jìn)行一句話總結(jié)。
1、Configuration接口:負(fù)責(zé)配置并啟動(dòng)Hibernate
2、SessionFactory接口:負(fù)責(zé)初始化Hibernate
3、Session接口:負(fù)責(zé)持久化對(duì)象的CRUD操作
4、Transaction接口:負(fù)責(zé)事務(wù)
5、Query接口和Criteria接口:負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢(xún)
注意:Configuration實(shí)例是一個(gè)啟動(dòng)期間的對(duì)象,一旦SessionFactory創(chuàng)建完成它就被丟棄了。
Hibernate的優(yōu)/缺點(diǎn):
優(yōu)點(diǎn):
1、更加對(duì)象化
以對(duì)象化的思維操作數(shù)據(jù)庫(kù),我們只需要操作對(duì)象就可以了,開(kāi)發(fā)更加對(duì)象化。
2、移植性
因?yàn)镠ibernate做了持久層的封裝,你就不知道數(shù)據(jù)庫(kù),你寫(xiě)的所有的代碼都具有可復(fù)用性。
3、Hibernate是一個(gè)沒(méi)有侵入性的框架,沒(méi)有侵入性的框架我們稱(chēng)為輕量級(jí)框架。
對(duì)比Struts的Action和ActionForm,都需要繼承,離不開(kāi)Struts。Hibernate不需要繼承任何類(lèi),不需要實(shí)現(xiàn)任何接口。這樣的對(duì)象叫POJO對(duì)象。
4、Hibernate代碼測(cè)試方便。
5、提高效率,提高生產(chǎn)力。
缺點(diǎn):
1、使用數(shù)據(jù)庫(kù)特性的語(yǔ)句,將很難調(diào)優(yōu)
2、對(duì)大批量數(shù)據(jù)更新存在問(wèn)題
3、系統(tǒng)中存在大量的攻擊查詢(xún)功能
總結(jié)
- 上一篇: linux7做服务器,centos7 搭
- 下一篇: 华为RH2288H服务器引导Servic