更新時間:2019-12-20 14:08:18 來源:動力節(jié)點 瀏覽2815次
SSH三大框架的概述
SSH為 struts+spring+hibernate的一個集成框架,是目前較流行的一種Web應(yīng)用程序開源框架。
集成SSH框架的系統(tǒng)從職責上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層(實體層),以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護方便的Web應(yīng)用程序。
struts標簽庫:Struts2默認的表達式語言是OGNL(Object-Graph Navigation Language),通過它可以存取對象的任意屬性、調(diào)用對象的方法、遍歷整個對象的結(jié)構(gòu)圖、實現(xiàn)字段類型轉(zhuǎn)換等功能。
JSP: HTML文件中插入Java程序段和JSP標記。
web.xml: Struts2核心過濾器和監(jiān)聽器
struts.xml: 管理應(yīng)用中的Action映射,及Action處理結(jié)果和物理資源之間的映射。
applicationContext.xml: 整合了struts和Hibernate。
.hbm.xml:O/R Mapping(Object Relational Mapping)映射文件,實體和表的映射關(guān)系通過XML來描述的文件。在項目啟動的時候加載到內(nèi)存中。
PO:Persistent Object,持久化對象
整體的調(diào)用關(guān)系:JSP–Action–Service–DAO–PO–數(shù)據(jù)庫
什么是struts2
Struts2是一個基于MVC設(shè)計模式的Web應(yīng)用控制層框架,功能就是完成jsp頁面和后臺java代碼的傳值和跳轉(zhuǎn)。
Struts2的運行原理
1:當前臺發(fā)送一個以規(guī)定后綴相同的請求時 如:.action struts核心控制器會對其進行過濾攔截 核心控制器StrutsPrepareAndExecuteFilter
2:核心控制器攔截請求后會根據(jù)請求的路徑找到對應(yīng)的java代碼,通過路徑中的類名(!前的部分)匹配struts.xml中action標簽中的name屬性來找到具體訪問的類,!后的部分匹配類中的方法名
3:當java類中完成處理邏輯會返回一個字符串,根據(jù)字符串匹配struts.xml中result標簽的name屬性,然后跳轉(zhuǎn)到result標簽內(nèi)容指定的頁面。
Spring
簡單來說,spring是一個輕量級的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架。
◆ 輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的 處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地, Spring應(yīng)用中的對象不依賴于Spring的特定類。
◆ 控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IOC)的技術(shù)促進了松 耦合。當應(yīng)用了IOC,一個對象依賴的其它對象會通過被動的方式傳遞 進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。 這也是說spring是非侵入式的,動態(tài)注入對象,讓一個對象的創(chuàng)建 不用new,可以自動生成,這就是利用JAVA里的反射,反射其實就是 在運行時動態(tài)的去創(chuàng)建、調(diào)用對象及其方法,spring就是在運行時,跟 xml spring的配置文件來動態(tài)的創(chuàng)建對象,和調(diào)用對象里面的方法 反射技術(shù)的使用使得我們不再像原始的工廠方法模式那樣創(chuàng)建對象。反 射可以非常靈活的根據(jù)類的名稱創(chuàng)建一個對象。所以spring只使用了 Prototype和Singleton這兩個基本的模式。
◆ 面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離 應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù) (transaction)管理,主要實現(xiàn)對事務(wù)的管理)進行內(nèi)聚性的開發(fā),其 機理來自于代理模式。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯 ——僅此而已。它們并不負責(甚至是意識)其它的系統(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是一個容器,凡是在容器里的對象才會有Spring所提供的這些服務(wù)和功能。凡是在spring的配置文件里面配置了,才能被spring管理;并享用spring提供的服務(wù) 。
◆ 框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。 所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
談Spring這個問題的時候,首先Spring中最為重要的無非就是IOC和AOP,而對IOC來講,你講一下IOC的定義,IOC就是說對象本身的創(chuàng)建不依賴應(yīng)用本身,而是依賴于外部容器,如果沒有IOC那么我們在我們的業(yè)務(wù)類,要調(diào)用DAO的方法,那么不得不做的一個動作就是創(chuàng)建一個DAO的實現(xiàn)類的實例,而創(chuàng)建這個對象本身是跟業(yè)務(wù)無關(guān)的,而這樣違反了“高內(nèi)聚,低耦合”,使類與類的聯(lián)系非常緊密了。即使你不用new,你使用工廠模式,使用單利模式,也跟上面說的效果是一樣的,而Spring本身就是一個大工廠,他幫我們造對象,幫我們管理bean對象,它幫我們注入我們所需的bean對象,這樣對于以后的維護來講,變的更為方便,也把與業(yè)務(wù)本身無關(guān)的東西提取出來了。體現(xiàn)了低耦合。而AOP本身就是一種思想,意為面向切面編程,而Spring對AOP做了部分實現(xiàn),(舉例說明)如果沒有AOP,比如我們開發(fā)的系統(tǒng)中有發(fā)郵件,寫日志,可想而知,系統(tǒng)中發(fā)郵件,寫日志絕對的不是在一個地方用到,那么怎么辦,肯定是在業(yè)務(wù)中寫著重復(fù)的代碼,而且干著與業(yè)務(wù)無關(guān)的事情,也就是說讓發(fā)郵件,寫日志跟業(yè)務(wù)一起混合在一起,那么這樣肯定是不合理的。那么該怎么辦,因此Spring提供了AOP,在你想寫日志的方法給你切開,加入日志的操作,剛剛說spring是大工廠,那么對于spring的AOP來講,我更加喜歡把它比喻成化妝師,只有你讓spring幫你化妝,就能達到你意想不到的效果,總的來講spring的AOP技術(shù),他幫我們做很多與業(yè)務(wù)無關(guān)的操作,讓業(yè)務(wù)層次更加清晰。
Spring AOP事務(wù)的描述:
在applicationContent.xml里通過aop:config里面先設(shè)定一個表達式,設(shè)定對service里那些方法 如:對add* ,delete*,update*等開頭的方法進行事務(wù)攔截。我們需要配置事務(wù)的傳播(propagation=“REQUIRED”)特性,通常把增,刪,改以外的操作需要配置成只讀事務(wù)(read-only=“true”).只讀事務(wù)可以提高性能。之后引入tx:advice,在tx:advice引用 transactionManager(事務(wù)管理),在事務(wù)管理里再引入sessionFactory,sessionFactory注入 dataSource,最后通過aop:config引入txAdvice。
事物的7種傳播特性
opropagation_requierd:如果當前沒有事務(wù),就新建一個事務(wù),如果已存在一個事務(wù)中,加入到這個事務(wù)中,這是最常見的選擇。
opropagation_supports:支持當前事務(wù),如果沒有當前事務(wù),就以非事務(wù)方法執(zhí)行。
opropagation_mandatory:使用當前事務(wù),如果沒有當前事務(wù),就拋出異常。
opropagation_required_new:新建事務(wù),如果當前存在事務(wù),把當前事務(wù)掛起。
opropagation_not_supported:以非事務(wù)方式執(zhí)行操作,如果當前存在事務(wù),就把當前事務(wù)掛起。
opropagation_never:以非事務(wù)方式執(zhí)行操作,如果當前事務(wù)存在則拋出異常。
opropagation_nested:如果當前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當前沒有事務(wù),則執(zhí)行與propagation_required類似的操作
Spring默認的事物傳播行為是propagation_requierd

以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“2020年Java面試題框架部分集”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級到高級)
相關(guān)閱讀