2023年工程師面試題之三大框架_第1頁
2023年工程師面試題之三大框架_第2頁
2023年工程師面試題之三大框架_第3頁
2023年工程師面試題之三大框架_第4頁
2023年工程師面試題之三大框架_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java工程師(程序員)面題Struts,Spring,Hibernate三大框架.Hibernate工作原理及為什么要用?原理:1.讀取并解析配置文獻(xiàn)2.讀取并解析映射信息,創(chuàng)建ScssionFactory3.打開Session4.創(chuàng)建事務(wù)Transation5.持久化操作6.提交事務(wù)7.關(guān)閉Session8.關(guān)閉SesstionFactory為什么要用:1.對(duì)JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問層繁瑣的反復(fù)性代碼。2.Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大限度的簡(jiǎn)化DAO層的編碼工作3.hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。4.hibernate的性能非常好,由于它是個(gè)輕量級(jí)框架。映射的靈活性很杰出。它支持各種關(guān)系數(shù)據(jù)庫,從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。.Hibernate是如何延遲加載?Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對(duì)象b)集合(Collection)Hibernate3提供了屬性的延遲加載功能當(dāng)Hibernate在查詢數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒有存在與內(nèi)存中,當(dāng)程序真正對(duì)數(shù)據(jù)的操作時(shí),對(duì)象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。Hibernate中如何實(shí)現(xiàn)類之間的關(guān)系?(如:一對(duì)多、多對(duì)多的關(guān)系)類與類之間的關(guān)系重要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都是對(duì)對(duì)象進(jìn)行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文獻(xiàn)中的many-to-one、one-to-manymany-to-many4.S(rutsl流程:1、客戶端瀏覽器發(fā)出HTTP請(qǐng)求。2、根據(jù)web.xml配置,該請(qǐng)求被ActionServlet接受。3、根據(jù)siruls-config.xml配置,ActionServlet先將請(qǐng)求中的參數(shù)填充到AciionForm中,然后在struts配置文獻(xiàn)中配置具體的錯(cuò)誤提醒,再在FonnBean中的validate。方法具體調(diào)用。.說下Struts的設(shè)計(jì)模式MVC模式:web應(yīng)用程序啟動(dòng)時(shí)就會(huì)加載并初始化ActionServlero用戶提交表單時(shí),一個(gè)配置好的ActionForm對(duì)象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文獻(xiàn)配置好的設(shè)立決定是否需要表單驗(yàn)證,假如需要就調(diào)用ActionForm的Validate()驗(yàn)證后選擇將請(qǐng)求發(fā)送到哪個(gè)Action,假如Action不存在,AclionServlet會(huì)先創(chuàng)建這個(gè)對(duì)象,然后調(diào)用Action09execute()方法。Execute()從ActionForm對(duì)象中獲取數(shù)據(jù),完畢業(yè)務(wù)邏輯,返I可一個(gè)AciionForward對(duì)象,ActionServlet再把客戶請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指定的jsp組件,ActionForward對(duì)象指定的jsp生成動(dòng)態(tài)的網(wǎng)頁,返回給客戶。.spring工作機(jī)制及為什么要用?I.springmvc請(qǐng)所有的請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的解決工作。.DispatchcrScrvlct查詢一個(gè)或多個(gè)HandlerMapping,找到解決請(qǐng)求的Controller..DispatcherServlet請(qǐng)請(qǐng)求提交到目的Controller.Controller進(jìn)行業(yè)務(wù)邏輯解決后,會(huì)返回一個(gè)ModclAndVicw.Dispathcher查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象.視圖對(duì)象負(fù)責(zé)渲染返回給客戶端。為什么用:{AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn),稱為橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。使用AOP后,公共服務(wù)(比如日記、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊?,同時(shí)不會(huì)增長(zhǎng)域?qū)ο蟮膶?duì)象模型的復(fù)雜性。IOC允許創(chuàng)建一個(gè)可以構(gòu)造對(duì)象的應(yīng)用環(huán)境,然后向這曲對(duì)象傳遞它們的協(xié)作對(duì)象。正如單詞倒置所表白的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(slraightconstruction),每一個(gè)對(duì)象都是用其協(xié)作對(duì)象構(gòu)造的。因此是由容器管理協(xié)作對(duì)象(collaborator)。Spring即使一個(gè)AOP框架,也是一IOC容器。Spring最佳的地方是它有助于您替換對(duì)象。有了Spring,只要用JavaBean屬性和配置文獻(xiàn)加入依賴性(協(xié)作對(duì)象)。然后可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對(duì)象。}Struts,Spring,Hibernate優(yōu)缺陷Slruls跟Tomcal、Turbine等諸多Apache項(xiàng)目同樣,是開源軟件,這是它的一大優(yōu)點(diǎn)。使開發(fā)者能更進(jìn)?步的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。Struts開放源碼框架的創(chuàng)建是為了使開發(fā)者在構(gòu)建基于JavaServlet和JavaServerPages(JSP)技術(shù)的Web應(yīng)用時(shí)更加容易。Struts框架為開放者提供了??個(gè)統(tǒng)?的標(biāo)準(zhǔn)框架,通過使用Struts作為基礎(chǔ),開發(fā)者可以更專注于應(yīng)用程序的商業(yè)邏輯。Struts框架自身是使用JavaServlel和JavaServerPages技術(shù)的一種Model-View-Controller(MVC)實(shí)現(xiàn).具體來講,Struts的優(yōu)點(diǎn)有:.實(shí)現(xiàn)MVC模式,結(jié)構(gòu)清楚,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn)..有豐富的tag可以用,Struts的標(biāo)記庫(Taglib),如能靈活動(dòng)用,則能大大提高開發(fā)效率。此外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標(biāo)記外,很少開發(fā)自己的標(biāo)記,或許Slruls是一個(gè)很好的起點(diǎn)。.頁面導(dǎo)航.頁面導(dǎo)航將是此后的?個(gè)發(fā)展方向,事實(shí)上,這樣做,使系統(tǒng)的脈絡(luò)更加清楚。通過一個(gè)配置文獻(xiàn),即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處。特別是當(dāng)另?批開發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢(shì)體現(xiàn)得更加明顯。.提供Exception解決機(jī)制..數(shù)據(jù)庫鏈接池管理.支持I18N缺陷:一、轉(zhuǎn)到展示層時(shí),需要配置forward,每一次轉(zhuǎn)到展示層,相信大多數(shù)都是直接轉(zhuǎn)到j(luò)sp,而涉及到轉(zhuǎn)向,需要配置forward,假如有十個(gè)展示層的jsp,需要配置十次slruts,并且還不涉及有時(shí)候目錄、文獻(xiàn)變更,需要重新修改forward,注意,每次修改配置之后,規(guī)定重新部署整個(gè)項(xiàng)目,而tomcate這樣的服務(wù)器,還必須重新啟動(dòng)服務(wù)器,假如業(yè)務(wù)變更復(fù)雜頻繁的系統(tǒng),這樣的操作簡(jiǎn)樸不可想象?,F(xiàn)在就是這樣,幾十上百個(gè)人同時(shí)在線使用我們的系統(tǒng),大家可以想象一下,我的煩惱有多大。二、Struts的Action必需是thread—safe方式,它僅僅允許一個(gè)實(shí)例去解決所有的請(qǐng)求。所以aciion用到的所有的資源都必需統(tǒng)一同步,這個(gè)就引起了線程安全的問題。三、測(cè)試不方便.Struts的每個(gè)Action都同Web層耦合在?起,這樣它的測(cè)試依賴于Web容器,單元測(cè)試也很難實(shí)現(xiàn)。但是有一個(gè)Junit的擴(kuò)展工具StrutsTeslCase可以實(shí)現(xiàn)它的單元測(cè)試。四、類型的轉(zhuǎn)換.Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具Commons-Beanutils進(jìn)行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級(jí)別,并且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時(shí)的錯(cuò)誤信息返回給用戶也是非常困難的。五、對(duì)Servlet的依賴性過強(qiáng).Struts解決Action時(shí)必需要依賴SendetRequest和ScnlctResponse,所有它擺脫不了Servlet容器。六、前端表達(dá)式語言方面.Struts集成了JSTL,所以它重要使用JSTL的表達(dá)式語言來獲取數(shù)據(jù)。可是JSTL的表達(dá)式語言在Collection和索引屬性方面解決顯得很弱。七、對(duì)Action執(zhí)行的控制困難.Struts創(chuàng)建一個(gè)Action,假如想控制它的執(zhí)行順序?qū)?huì)非常困難。甚至你要重新去寫Servlet來實(shí)現(xiàn)你的這個(gè)功能需求。八、對(duì)Action執(zhí)行前和后的解決.Struts解決Action的時(shí)候是基于class的hierarchies,很難在action解決前和后進(jìn)行操作。九、對(duì)事件支持不夠.在struts中,實(shí)際是一個(gè)表單Form相應(yīng)一個(gè)Action類(或DispatchAction),換一句話說:在Struts中實(shí)際是一個(gè)表單只能相應(yīng)一個(gè)事件,struts這種事件方式稱為applicationevent,applicationevent和componentevent相比是一種粗粒度的事件。Slruts重要的表單對(duì)象ActionForm是一種對(duì)象,它代表了一種應(yīng)用,這個(gè)對(duì)象中至少包含幾個(gè)字段,這些字段是Jsp頁面表單中的input字段,由于一個(gè)表單相應(yīng)一個(gè)事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時(shí),也就是說,一個(gè)字段相應(yīng)一個(gè)事件時(shí),單純使用Struts就不太也許,當(dāng)然通過結(jié)合JavaScript也是可以轉(zhuǎn)彎實(shí)現(xiàn)的。HibernateHibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlel/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完畢數(shù)據(jù)持久化的重任。大多數(shù)開發(fā)機(jī)構(gòu)經(jīng)常采用創(chuàng)建各自獨(dú)立的數(shù)據(jù)持久層。一旦底層的數(shù)據(jù)結(jié)構(gòu)發(fā)生改變,那么修改應(yīng)用的其余部分使之適應(yīng)這種改變的代價(jià)將是十分巨大的。Hibernate適時(shí)的填補(bǔ)了這一空白,它為Java應(yīng)用提供了一個(gè)易用的、高效率的對(duì)象關(guān)系映射框架。hibernate是個(gè)輕量級(jí)的持久性框架,功能卻非常豐富。優(yōu)點(diǎn):a.Hibernate使用Java反射機(jī)制而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。b.Hibernate的性能非常好,由于它是個(gè)輕量級(jí)框架。映射的靈活性很杰出。c.它支持各種關(guān)系數(shù)據(jù)庫,從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。缺陷:它限制您所使用的對(duì)象模型。(例如,一個(gè)持久性類不能映射到多個(gè)表)其獨(dú)有的界面和可憐的市場(chǎng)份額也讓人不安,盡管如此,Hibernate還是以其強(qiáng)大的發(fā)展動(dòng)力減輕了這些風(fēng)險(xiǎn)。其他的開源持久性框架也有一些,但是都沒有Hibernate這樣有市場(chǎng)沖擊力。上面回貼情緒有點(diǎn)激動(dòng),希望諒解,我不是由于有人批評(píng)Hibernate而感到不快,而是由于帖子里面的觀點(diǎn)實(shí)在讓我覺得荒唐。不管覺得Hibernate好也吧,不好也吧,我唯一覺得遺憾的是,在中文論壇里面找不到一個(gè)對(duì)Hibernate的真正高水平的評(píng)價(jià)。在TSS上有一個(gè)關(guān)于Hibernate的hotthread,跟了幾百貼,其中涉及Hibernate作者Gavin和LiDOJDO的CTO,對(duì)于JDO和Hibernate有過一些劇烈的爭(zhēng)論,我曾經(jīng)耐心的看了一遍,仍然沒有發(fā)現(xiàn)針對(duì)Hibernate真正有力的襲擊,那些所謂的襲擊無非針對(duì)Hibernate沒有一個(gè)GUI的配置工具,沒有商業(yè)公司支持,沒有標(biāo)準(zhǔn)化等等這些站不住腳的理由。補(bǔ)充幾點(diǎn)我的意見:一、Hibernate是JDBC的輕量級(jí)的對(duì)象封裝,它是一個(gè)獨(dú)立的對(duì)象持久層框架,和AppServer,和EJB沒有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場(chǎng)合,例如Java應(yīng)用程序的數(shù)據(jù)庫訪問代碼,DAO接口的實(shí)現(xiàn)類,甚至可以是BMP里面的訪問數(shù)據(jù)庫的代碼。從這個(gè)意義.上來說,Hibernate和EB不是一個(gè)范疇的東西,也不存在非此即彼的關(guān)系。二、Hibernate是一個(gè)和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動(dòng),和數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的Java程序,和AppServer沒有任何關(guān)系,也不存在兼容性問題。三、Hibernate不能用來直接和EntityBean做對(duì)比,只有放在整個(gè)J2EE項(xiàng)目的框架中才干比較。并且即使是放在軟件整體框架中來看,Hibernate也是做為JDBC的替代者出現(xiàn)的,而不是EntityBean的替代者出現(xiàn)的,讓我再列一次我已經(jīng)列n次的框架結(jié)構(gòu):傳統(tǒng)的架構(gòu):SessionBean<->EntityBean<->DB為了解決性能障礙的替代架構(gòu):SessionBean<->DAO<->JDBC<->DB使用Hibernate來提高上面架構(gòu)的開發(fā)效率的架構(gòu):SessionBean<->DAO<->Hibernate<->DB就上面3個(gè)架構(gòu)來分析:I、內(nèi)存消耗:采用JDBC的架構(gòu)2無疑是最省內(nèi)存的,Hibernate的架構(gòu)3次之,EB的架構(gòu)1最差。2、運(yùn)營效率:假如JDBC的代碼寫的非常優(yōu)化,那么JDBC架構(gòu)運(yùn)營效率最高,但是實(shí)際項(xiàng)FI中,這一點(diǎn)幾乎做不到,這需要程序員非常精通JDBC,運(yùn)用Batch語句,調(diào)整PrcaprcdStatcmcnt的BatchSize和FetchSize等參數(shù),以及在必要的情況卜采用結(jié)果集cache等等。而一般情況下程序員是做不到這一點(diǎn)的。因此Hibernate架構(gòu)表現(xiàn)出最快的運(yùn)營效率。EB的架構(gòu)效率會(huì)差的很遠(yuǎn)。3、開發(fā)效率:在有JBuilder的支持下以及簡(jiǎn)樸的項(xiàng)目,EB架構(gòu)開發(fā)效率最高,JDBC次之,Hibernate最差。但是在大的項(xiàng)目,特別是持久層關(guān)系映射很復(fù)雜的情況下,Hibernate效率高的驚人,JDBC次之,而EB架構(gòu)很也許會(huì)失敗。4、分布式,安全檢查,集群,負(fù)載均衡的支持由于有SB做為Facade,3個(gè)架構(gòu)沒有區(qū)別。四、EB和Hibernate學(xué)習(xí)難度在哪里?EB的難度在哪里?不在復(fù)雜的XML配置文獻(xiàn)上,而在于EB運(yùn)用稍微不慎,就有嚴(yán)重的性能障礙。所以難在你需要學(xué)習(xí)很多EJB設(shè)計(jì)模式來避開性能問題,需要學(xué)習(xí)AppServer和EB的配置來優(yōu)化EB的運(yùn)營效率。做EB的開發(fā)工作,程序員的大部分精力都被放到了EB的性能問題上了,反而沒有更多的精力關(guān)注自身就重要投入精力去考慮的對(duì)象持久層的設(shè)計(jì)上來。Hibernate難在哪里?不在Hibernate自身的復(fù)雜,事實(shí)上Hibernate非常的簡(jiǎn)樸,難在Hibernate太靈活了。當(dāng)你用EB來實(shí)現(xiàn)持久層的時(shí)候,你會(huì)發(fā)現(xiàn)EB實(shí)在是太笨拙了,笨拙到你主線沒有什么可以選擇的余地,所以你主線就不用花費(fèi)精力去設(shè)計(jì)方案,去平衡方案的好壞,去費(fèi)腦筋考慮選擇哪個(gè)方案,由于只有唯一的方案擺在你面前,你只能這么做,沒得選擇。Hibernate相反,它太靈活了,相同的問題,你至少可以設(shè)計(jì)出十幾種方案來解決,所以特別的犯難,究竟用這個(gè),還是用那個(gè)呢?這些方案之間到底有什么區(qū)別呢?他們的運(yùn)營原理有什么不同?運(yùn)營效率哪個(gè)比較好?光是主鍵生成,就有七八種方案供你選擇,你為難不為難?集合屬性可以用Set,可以用List,還可以用Bag,到底哪個(gè)效率高,你為難不為難?查詢可以用iterator,可以用list,哪個(gè)好,有什么區(qū)別?你為難不為難?復(fù)合主鍵你可以直接在hbm里面配置,也可以自定義CuslomefType,哪種比較好些?你為難不為難?對(duì)于一個(gè)表,你可以選擇單一映射一個(gè)對(duì)象,也可以映射成父子對(duì)象,還可以映射成兩個(gè)1:1的對(duì)象,在什么情況卜.用哪種方案比較好,你為難不為難?這個(gè)列表可以一直開列下去,直到你不想再看下去為止。當(dāng)你面前擺著無數(shù)的眼花繚亂的方案的時(shí)候,你會(huì)覺得幸福呢?還是悲哀呢?假如你是一個(gè)負(fù)責(zé)的程序員,那么你一定會(huì)仔細(xì)研究每種方案的區(qū)別,每種方案的效率,每種方案的合用場(chǎng)合,你會(huì)覺得你已經(jīng)陷入進(jìn)去拔不出來了。假如是用EB,你第一秒種就已經(jīng)做出了決定,主線沒得選擇,比如說集合屬性,你只能用Collection,假如是Hibernate,你會(huì)在Bag,List和Set之間來回躊躇不決,甚至搞不清楚的話,程序都沒有辦法寫。Spring它是一個(gè)開源的項(xiàng)目,并且目前非常活躍;它基于IoC(InversionofControl,反向控制)和AOP的構(gòu)架多層j2ee系統(tǒng)的框架,但它不逼迫你必須在每一層中必須使用Spring,由于它模塊化的很好,允許你根據(jù)自己的需要選擇使用它的某?個(gè)模塊;它實(shí)現(xiàn)了很優(yōu)雅的MVC,對(duì)不同的數(shù)據(jù)訪問技術(shù)提供了統(tǒng)一的接口,采用IoC使得可以很容易的實(shí)現(xiàn)bean的裝配,提供了簡(jiǎn)潔的AOP并據(jù)此實(shí)現(xiàn)TranscationManagment,等等優(yōu)點(diǎn):Spring能有效地組織你的中間層對(duì)象,不管你是否選擇使用了EJB。假如你僅僅使用了Struts或其他為J2EE的API特制的framework,Spring致力于解決剩卜的問題。Spring能消除在許多工程中常見的對(duì)Singleton的過多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)很大的問題,它減少了系統(tǒng)的可測(cè)試性和面向?qū)ο蟮南薅取.通過一種在不同應(yīng)用程序和項(xiàng)目間一致的方法來解決配置文獻(xiàn),Spring能消除各種各樣自定義格式的屬性文獻(xiàn)的需要。曾經(jīng)對(duì)某個(gè)類要尋找的是哪個(gè)魔法般的屬性項(xiàng)或系統(tǒng)屬性感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean屬性。InversionofCont⑹的使用(在下面討論)幫助完畢了這種簡(jiǎn)化。d.通過把對(duì)接口編程而不是對(duì)類編程的代價(jià)兒乎減少到?jīng)]有,Spring可以促進(jìn)養(yǎng)成好的編程習(xí)慣。e.Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡也許少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒有依賴于Springof.使用Spring構(gòu)建的應(yīng)用程序易于單元測(cè)試。g.Spring能使EJB的使用成為一個(gè)實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或localEJBs來實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。Spring幫助你解決許多問題而無需使用EJBoSpring能提供一種EJB的替換物,它們合川于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)管理而不通過EJB容器,假如你僅僅需要與單個(gè)數(shù)據(jù)庫打交道,甚至不需要一個(gè)JTA實(shí)現(xiàn)。Spring為數(shù)據(jù)存取提供了一個(gè)一致的框架,不管是使用的是JDBC還是O/Rnapping產(chǎn)品(如Hibernate)pSpring的確使你能通過最簡(jiǎn)樸可行的解決辦法來解決你的問題。而這是有有很大價(jià)值的。缺陷:使用人數(shù)不多、jsp中要寫很多代碼、控制器過于以活,缺少?個(gè)公用控制器。6.Javaweb部分I、Tomca[的優(yōu)化經(jīng)驗(yàn)答:去掉對(duì)web.xml的監(jiān)視,把jsp提前編輯成Servlet0有富余物理內(nèi)存的情況,加大tomcat使用的jvm的內(nèi)存1、HTTP請(qǐng)求的GET與POST方式的區(qū)別(1)get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。在客戶端,Gel方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)放置在HTMLHEADER內(nèi)提交。(2)對(duì)于get方式,服務(wù)器端用Request.QuerySOng獲取變量的值,對(duì)于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。(3)GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。(4)安全性問題。正如在(1)中提到,使用Get的時(shí)候,參數(shù)會(huì)顯示在地址欄上,而Post不會(huì)。所以,假如這些數(shù)據(jù)是中文數(shù)據(jù)并且是非敏感數(shù)據(jù),那么使用get;假如用戶輸入的數(shù)據(jù)不是中文字符并且包含敏感數(shù)據(jù),那么還是使用posl為好。62、解釋一下什么是servlet;答:servlet有良好的生存期的定義,涉及加載和實(shí)例化、初始化、解決請(qǐng)求以及服務(wù)結(jié)束。這個(gè)生存期由javax.servlet.Servlet接口的init,senice和destroy方法表達(dá)。I、說一說Servlet的生命周期?答:servlet有良好的生存期的定義,涉及加載和實(shí)例化、初始化、解決請(qǐng)求以及服務(wù)結(jié)束。這個(gè)生存期由javax.servlet.Servlet接口的init,service和destroy方法表達(dá)。Servlet被服務(wù)器實(shí)例化后,容器運(yùn)營其init方法,請(qǐng)求到達(dá)時(shí)運(yùn)營其service方法,service方法自動(dòng)派遣運(yùn)營與請(qǐng)求相應(yīng)的doXXX方法(doGet,doPosl)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。web容器加載servlet,生命周期開始。通過調(diào)用servlet的init()方法進(jìn)行servlet的初始化。通過調(diào)用service。方法實(shí)現(xiàn),根據(jù)請(qǐng)求的不同調(diào)用不同的do***()方法。結(jié)束服務(wù),web容器調(diào)用servlet的destroy。方法。4、Servlel的基本架構(gòu)publicclassServletNameextendsHitpServlet!publicvoiddoPost(HttpServletRequestrequest,HttpSendetResponseresponse)throwsServletException,lOException(}publicvoiddoGct(HttpScrvlctRcquestrequest,HttpScnlctRcsponseresponse)throwsServletException,lOException!))3、SERVLETAPI中forward。與redirect。的區(qū)別?答:前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí).,盡量使用forward。方法,并且,這樣也有助于隱臧實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect。方法。60、什么情況下調(diào)用doGet。和doPostO?Jsp頁面中的FORM標(biāo)簽里的method屬性為get時(shí)調(diào)用doGct(),為post時(shí)調(diào)用doPost()o66、Request對(duì)象的重要方法:setAttribute(Stringname,Object):設(shè)立名字為name的request的參數(shù)值getAttribute(Stringname):返回由name指定的屬性值getAttributeNamesO:返I可request對(duì)象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例getCookies():返回客戶端的所有Cookie對(duì)象,結(jié)果是一個(gè)Cookie數(shù)組getCharacterEncodingO:返回請(qǐng)求中的字符編碼方式getContentLength():返回請(qǐng)求的Body的長(zhǎng)度getHeader(Stringname):獲得HTTP協(xié)議定義的文獻(xiàn)頭信息getHeaders(Stringname):返I可指定名字的requeslHeader的所有值,結(jié)果是一個(gè)枚舉的實(shí)例gctHcadcrNamcsO:返回所以requestHeader的名字,結(jié)果是一個(gè)枚舉的實(shí)例getlnputStreamO:返I可請(qǐng)求的輸入流,用于獲得請(qǐng)求中的數(shù)據(jù)getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法getParameter(Stringname):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值getParameteiNamesO:獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例getParametervalues(Stringname):獲得有name指定的參數(shù)的所有值getProtocolO:獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱getQueryStringO:獲得查詢字符串gctRcqucstURIO:獲取發(fā)出請(qǐng)求字符串的客戶端地址getRemoteAddr():獲取客戶端的IP地址getRcmotcHostO:獲取客戶端的名字ActionServlet再將請(qǐng)求發(fā)送到Action進(jìn)行解決。4、是否驗(yàn)證,需要驗(yàn)證則調(diào)用ActionForm的validate方法,驗(yàn)證失敗則跳轉(zhuǎn)到input,成功則繼續(xù)。5、Action從ActionForm獲得數(shù)據(jù),調(diào)用javabean中的業(yè)務(wù)方法解決數(shù)據(jù)。Action返回ActionForward對(duì)象,跳轉(zhuǎn)到相應(yīng)JSP頁面或Action。7、返回HTTP響應(yīng)到客戶端瀏覽器。MVC設(shè)計(jì)模式:modal:“模型”也稱業(yè)務(wù)邏輯,是正真完畢任務(wù)的代碼,相稱與JavaBeanview:視圖,其實(shí)就是顯示界面,相稱于JSPcontrollei?:控制器,他控制模型和視圖的交互過程,相稱于senletstruts1是基于MVC設(shè)計(jì)模式hibernate是基于ORM對(duì)象關(guān)系映射tints是什么?strutsI是基于JSP和servlet的一個(gè)開源的Web應(yīng)用框架,使用的是MVC的設(shè)計(jì)模式stru(s2是基于webwork技術(shù)的框架,是sun和webwork公司聯(lián)手開發(fā)的一個(gè)功能非常齊全的框架,struts2和struts1沒有任何關(guān)系,是一個(gè)全新的框架pring是什么?spring是一個(gè)集成了許多第三方框架的大雜檢,其核心技術(shù)是IOC(控制反轉(zhuǎn),也稱依賴注入)和AOP(面向切面編程).hibernate是f卜么?hibernate是基于ORM對(duì)象關(guān)系映射(完畢對(duì)象數(shù)據(jù)到關(guān)系數(shù)據(jù)映射的機(jī)制)實(shí)現(xiàn)的,做數(shù)據(jù)持久化的工具.JSF是什么?JavaServerFace是基于組件的web開發(fā)框架,跟sturts差不多的框架.數(shù)據(jù)庫里面的索引和約束是什么?索引是為了提高數(shù)據(jù)的檢索速度,索引是建立在數(shù)據(jù)表上,根據(jù)一個(gè)或多個(gè)字段建立的約束getSession([Booleancreate]):返回和請(qǐng)求相關(guān)SessiongetSerx?erName():獲取服務(wù)器的名字getServletPath():獲取客戶端所請(qǐng)求的腳本文獻(xiàn)的途徑getServerPort():獲取服務(wù)器的端標(biāo)語removeAttribute(Stringname):刪除請(qǐng)求中的一個(gè)屬性19、forward和redirect的區(qū)別forward是服務(wù)器請(qǐng)求資源,服務(wù)器宜接訪問目的地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器主線不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是本來的地址。redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來說瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request參數(shù)都可以獲取。4、request.getAttribute()和request.getParameter()有何區(qū)別?.gctAttributc是取得jsp中用sctAttributc器殳定的attribute.parameter得到的是string;attribute得到的是object.request.getParameter()方法傳遞的數(shù)據(jù),會(huì)從Web客戶端傳到Web服務(wù)器端,代表HTTP請(qǐng)求數(shù)據(jù);requesl.selAtlribuieO和gelAuribule。方法傳遞的數(shù)據(jù)只會(huì)存在于Web容器內(nèi)部,在具有轉(zhuǎn)發(fā)關(guān)系的Web組件之間共享。即request.getAttribute。方法返回request范圍內(nèi)存在的對(duì)象,而request.getParameter。方法是獲取http提交過來的數(shù)據(jù)。jsp有哪些內(nèi)置對(duì)象?作用分別是什么?分別有什么方法?答:JSP共有以下9個(gè)內(nèi)置的對(duì)象:request用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來自GET/POST請(qǐng)求的參數(shù)response網(wǎng)頁傳回用戶端的回應(yīng)pageContext網(wǎng)頁的屬性是在這里管理session與請(qǐng)求有關(guān)的會(huì)話期applicationservlet正在執(zhí)行的內(nèi)容out用來傳送回應(yīng)的輸出configservlet的構(gòu)架部件pageJSP網(wǎng)頁自身exception針對(duì)錯(cuò)誤網(wǎng)頁,未捕獲的例外request表達(dá)HllpServlelRequesl對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息,并且提供了兒個(gè)用于獲取cookie,header,和session數(shù)據(jù)的有用的方法。response表達(dá)HllpServlelResponse對(duì)象,并提供了幾個(gè)用于設(shè)立送I可瀏覽器的響應(yīng)的方法(如cookies,頭信息等)out對(duì)象是的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。pageContext表達(dá)一個(gè)對(duì)象。它是用于方便存取各種范圍的名字空間、servlel相關(guān)的對(duì)象的API,并且包裝了通用的servlel相關(guān)功能的方法。session表達(dá)一個(gè)請(qǐng)求的對(duì)象。Session川以存貯用戶的狀態(tài)信息applicaton表達(dá)一個(gè)對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息config表達(dá)一個(gè)對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。page表達(dá)從該頁面產(chǎn)生的一個(gè)servlet實(shí)例jsp有哪些動(dòng)作?作用分別是什么?(這個(gè)問題似乎不重要,不明白為什么有此題)答:JSP共有以下6種基本動(dòng)作jsp:include:在頁面被請(qǐng)求的時(shí)候引入一個(gè)文獻(xiàn)。jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。jsp:setProperty:設(shè)立JavaBean的屬性。jsp:getProperty:輸出某個(gè)JavaBean的屬性。jsp:forward:把請(qǐng)求轉(zhuǎn)到一個(gè)新的頁面。jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記59、JSP的常用指令isErrorPage(是否能使用Exception對(duì)象),isELIgnored(是否忽略表達(dá)式)JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?答:動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現(xiàn)<jsp:includepage=included.jspflush=true/>它總是會(huì)檢查所含文獻(xiàn)中的變化,適合用于包含動(dòng)態(tài)頁面,并且可以帶參數(shù)靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文獻(xiàn)的變化,合用于包含靜態(tài)頁面v%@includefile:included.htm%>4、兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別?(下面的回答嚴(yán)重錯(cuò)誤,應(yīng)當(dāng)是想問forward和sendRcdirect的區(qū)別,畢竟出題的人不是專業(yè)搞文字藝術(shù)的人,也許表達(dá)能力并不見得很強(qiáng),用詞不一定精確,加之其自身的技術(shù)面也也許存在一些問題,不一定真正將他的意思表達(dá)清楚了,嚴(yán)格意思上來講,一些題目也許主線就無人能答,所以,答題時(shí)要掌握積極,只要把自己知道的表達(dá)清楚就夠了,而不要去推敲原始題目的具體含義是什么,不要一味想著是在答題)答:有兩種,分別為:<jsp:includepage=included.jspflush=true><jsp:forwardpagc=ncxtpagc.jsp/>前者頁面不會(huì)轉(zhuǎn)向include所指的頁面,只是顯示該頁的結(jié)果,主頁面還是本來的頁面。執(zhí)行完后還會(huì)回來,相稱于函數(shù)調(diào)用。并且可以帶參數(shù).后者完全轉(zhuǎn)向新頁面,不會(huì)再回來。相稱于goto語句。63、頁面間對(duì)象傳遞的方法request,session,application,cookie等64、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡(jiǎn)易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是"類servlet"。Servlet和JSP最重要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文獻(xiàn)中,并且完全從表達(dá)層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文獻(xiàn)。JSP側(cè)重于視圖,Servlet重要用于控制邏輯。1、MVC的各個(gè)部分都有那些技術(shù)來實(shí)現(xiàn)?如何實(shí)現(xiàn)?答:MVC是Model-View-Controller的簡(jiǎn)寫。Model代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)),View是應(yīng)用的表達(dá)面(由JSP頁面產(chǎn)生),Controller是提供應(yīng)用的解決過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模型把應(yīng)用邏輯,解決過程和顯示邏輯提成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。68、我們?cè)趙eb應(yīng)用開發(fā)過程中經(jīng)常碰到輸出某種編碼的字符,如iso8859-l等,如何輸出一個(gè)某種編碼的字符串?PublicStringtranslate(Stringstr){StringtempStr=try{tempStr=newString(str.getByles("ISO-8859-1"),"OBK'1);tempStr=tempStr.trimO;Icatch(Exceptionc){System.err.println(e.getMessageO);)returntempStr;I.現(xiàn)在輸入n個(gè)數(shù)字,以逗號(hào),分開;然后可選擇升或者降序排序;按提交鍵就在另一頁面顯示按什么排序,結(jié)果為,提供reset7.實(shí)際項(xiàng)目開發(fā)1、在eclipse中調(diào)試時(shí),如何查看一個(gè)變量的值?在要查看的變量前先設(shè)立斷點(diǎn),然后選中變量,右鍵選debugas->JavaApplication,打開debug透視圖,這時(shí)在Variables窗口中可以看到變量當(dāng)前的值。假如是局部變量,也可以在局部變量窗口中查看。要知道一個(gè)方法被調(diào)用的方法調(diào)用鏈,可以在方法棧中查看。2、你們公司使用的代碼配置管理工具是什么?除了說以前使用evs,現(xiàn)在新項(xiàng)目使用svn了,還簡(jiǎn)要說一下使用的過程,假如有也許,還說說倉庫的概念和如何使用鎖之類的細(xì)節(jié)。3、你們的項(xiàng)目總金額多少,多少人開發(fā),總共花了多少個(gè)月?像巴巴運(yùn)動(dòng)網(wǎng)這種規(guī)模的項(xiàng)目,可以說是4、5個(gè)人、開發(fā)了4、5個(gè)月,費(fèi)用則是4、50萬。按每人每月兩萬收入去計(jì)算,就差不多了。是為了保持?jǐn)?shù)據(jù)的完整性,約束有非空約束,主鍵約束,外鍵約束等等。10.spring是什么這個(gè)問題,往往可以通過我們?yōu)槭裁匆褂胹pring這個(gè)問題來切入:AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn),稱為橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。使用AOP后,公共服務(wù)(比如日記、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊?,同時(shí)不會(huì)增長(zhǎng)域?qū)ο蟮膶?duì)象模型的復(fù)雜性。IOC允許創(chuàng)建?個(gè)可以構(gòu)造對(duì)象的應(yīng)用環(huán)境,然后向這些對(duì)象傳遞它們的協(xié)作對(duì)象。正如單詞倒置所表白的,IOC就像反過來的JNDL沒有使用?堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個(gè)對(duì)象都是用其協(xié)作對(duì)象構(gòu)造的。因此是由容器管理協(xié)作對(duì)象(collaborator)。Spring即使一個(gè)AOP框架,也是一I0C容器。Spring最佳的地方是它有助于您替換對(duì)象。有了Spring,只要用JavaBean屬性和配置文獻(xiàn)加入依賴性(協(xié)作對(duì)象)。然后可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對(duì)象。11.用自己的話簡(jiǎn)要闡述struts?的執(zhí)行流程。Struts2框架自身大體可以分為3個(gè)部分:核心控制器FiltcrDispatchcr,業(yè)務(wù)控制器Action和用戶實(shí)現(xiàn)的公司業(yè)務(wù)邏輯組件。核心控制器FiherDispa【cher是Slruts2框架的基礎(chǔ),包含了框架內(nèi)部的控制流程和解決機(jī)制。業(yè)務(wù)控制器Action和業(yè)務(wù)邏輯組件是需要用戶來自己實(shí)現(xiàn)的。用戶在開發(fā)Action和業(yè)務(wù)邏輯組件的同時(shí),還需要編寫相關(guān)的配置文獻(xiàn),供核心控制器FilterDispatcher來使用。Struls2的工作流程相對(duì)于Slruls1要簡(jiǎn)樸,與WebWork框架基本相同,所以說Struts2是WebWork的升級(jí)版本?;竞?jiǎn)要流程如下:1、客戶端瀏覽器發(fā)出HTTP請(qǐng)求。2、根據(jù)web.xml配置,該請(qǐng)求被FilterDispatcher接受。3、根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法,并通過IoC方式,將值注入給Acitono4、Action調(diào)用業(yè)務(wù)邏輯組件解決業(yè)務(wù)邏輯,這一步包含表單驗(yàn)證。5、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到相應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁面。6、返回HTTP響應(yīng)到客戶端瀏覽器。IAction是不是線程安全的?假如不是有什么方式可以保證Action的線程安全?假如是,說明因素不是聲明局部變量,或者擴(kuò)展RequestProcessor,讓每次都創(chuàng)建一個(gè)Action,或者在spring中用scope="prototype”來管理2.MVC,分析一下struts是如何實(shí)現(xiàn)MVC的m:JavaBean或結(jié)合EJB組件或者pojo構(gòu)成c:Action來實(shí)現(xiàn)v:一組JSP文獻(xiàn)及其標(biāo)簽構(gòu)成。3.slnils中的幾個(gè)關(guān)鍵對(duì)象的作用(說說兒個(gè)關(guān)鍵對(duì)象的作用)Act沁n:控制器類,ActionForm:表單對(duì)象,DynaValidatorForm:動(dòng)態(tài)form,ActonM叩ping:配置文獻(xiàn)中action節(jié)點(diǎn)的信息……4.說說AOP和IOC的概念以及在spring中是如何應(yīng)用的AOP:面向方面編程,ioc:依賴注入;聲明式事務(wù)和編程式事務(wù)積極一些通用部分5.Hibemate有哪幾種查詢數(shù)據(jù)的方式hql查詢,sql查詢,條件查詢6.1oad()和get()的區(qū)別hibernate對(duì)于load方法認(rèn)為該數(shù)據(jù)在數(shù)據(jù)庫中一定存在,可以放心的使用代理來延遲加載,load默認(rèn)支持延遲加載,在用到對(duì)象中的其他屬性數(shù)據(jù)時(shí)才查詢數(shù)據(jù)庫,但是萬一數(shù)據(jù)庫中不存在該記錄,只能拋異常ObjeciNotFoundEcception;所說的load方法拋異常是指在使用該對(duì)象的數(shù)據(jù)時(shí),數(shù)據(jù)庫中不存在該數(shù)據(jù)時(shí)拋異常,而不是在創(chuàng)建這個(gè)對(duì)象時(shí)。由于session中的緩存對(duì)于hibernate來說是個(gè)相稱便宜的資源,所以在load時(shí)會(huì)先查一下session緩存看看該id相應(yīng)的對(duì)象是否存在,不存在則創(chuàng)建代理(load時(shí)候之兗詢一級(jí)緩存,不存在則創(chuàng)建代理)。get()現(xiàn)在一級(jí)緩存找,沒有就去二級(jí)緩存找,沒有就去數(shù)據(jù)庫找,沒有就返回null:而對(duì)于get方法,hibernate一定要獲取到真實(shí)的數(shù)據(jù),否則返回nuH。7.談?wù)刪ibernate的延遲加載和openSessionlnView延遲加載要在session范圍內(nèi),用到的時(shí)候再加載;opcnsessioninvicw是在web層寫了一個(gè)filter來打開和關(guān)閉session,這樣就表達(dá)在一次request過程中session一直開著,保證了延遲加載在session中的這個(gè)前提。8.spring的事務(wù)有幾種方式?談?wù)剆pring事務(wù)的隔離級(jí)別和傳播行為。聲明事務(wù)和編程事務(wù)隔離級(jí)別:DEFAULT使用數(shù)據(jù)庫默認(rèn)的隔離級(jí)別READ_UNCOMMITTED會(huì)出現(xiàn)臟讀,不可反復(fù):讀和幻影讀問題READ_COMMITTED會(huì)出現(xiàn)反復(fù)讀和幻影讀REPEATABLE_READ會(huì)出現(xiàn)幻影讀SERIALIZABLE最安全,但是代價(jià)最大,性能影響極其嚴(yán)重和傳播行:REQUIRED存在事務(wù)就融入該事務(wù),不存在就創(chuàng)建事務(wù)SUPPORTS存在事務(wù)就融入事務(wù),不存在則不創(chuàng)建事務(wù)MANDATORY存在事務(wù)則融入該事務(wù),不存在,拋異常REQUIRES_NEW總是創(chuàng)建新事務(wù)NOT_SUPPORTED存在事務(wù)則掛起,一直執(zhí)行非事務(wù)操作NEVER總是執(zhí)行非事務(wù),假如當(dāng)前存在事務(wù)則拋異常NESTED嵌入式事務(wù)9.Hibernate中的update。和saveOrUpdate。的區(qū)別.摘自hibernate說明文檔:saveOrUpdate()做下面的事:假如對(duì)象己經(jīng)在本session中持久化了,不做任何事假如另一個(gè)與本session關(guān)聯(lián)的對(duì)象擁有相同的持久化標(biāo)記(identifier),拋出一個(gè)異常假如對(duì)象沒有持久化標(biāo)記(identifier)屬性,對(duì)其調(diào)用save()假如對(duì)象的持久標(biāo)記(identifier)表白其是一個(gè)新實(shí)例化的對(duì)象,對(duì)其調(diào)用save()假如對(duì)象是附帶版本信息的(通過〈version〉或<timestamp>)并且版本屬性的值表白其是一個(gè)新實(shí)例化的對(duì)象,save。它。否則叩date。這個(gè)對(duì)象lO.Spring對(duì)多種ORM框架提供了很好的支持,簡(jiǎn)樸描述在Spring中使用Hibernate的方法,并結(jié)合事務(wù)管理。getHiberanteTemplate里面提供了save,update,delete,find等方法。簡(jiǎn)樸說一個(gè):假如配置了聲明式事務(wù),當(dāng)執(zhí)行g(shù)etHibernateTemplate的各種方法的時(shí)候,事務(wù)會(huì)自動(dòng)被加載假如沒有配置事務(wù),那么以上操作不會(huì)真正的被同步到數(shù)據(jù)庫,除非配置了hibernate的autocommit=true8.spring的事務(wù)有幾種方式?談?wù)剆pring事務(wù)的隔離級(jí)別和傳播行為。spring事務(wù)分兩種形式,聲明式事務(wù)和編程式事務(wù),spring提供了一個(gè)事務(wù)的接口PaltformTractionManager,針對(duì)不同的事務(wù),spring進(jìn)行了不同的實(shí)現(xiàn),對(duì)hibernate事務(wù)的實(shí)現(xiàn)HlbernateTractionManagcr,^!JDBC的JdbcTractionManager,DataSourceTractionManager以及JdoTractionManager0接口platformTractionManager提供了個(gè)方法,獲取事務(wù),提交和回滾的方法。***********************

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論