Struts-Spring-Hibernate面試題總結(jié)文檔_第1頁(yè)
Struts-Spring-Hibernate面試題總結(jié)文檔_第2頁(yè)
Struts-Spring-Hibernate面試題總結(jié)文檔_第3頁(yè)
Struts-Spring-Hibernate面試題總結(jié)文檔_第4頁(yè)
Struts-Spring-Hibernate面試題總結(jié)文檔_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一、Servlet生命周期與工作原理Servlet生命周期分為三個(gè)階段:初始化階段

調(diào)用init()方法響應(yīng)客戶請(qǐng)求階段調(diào)用service()方法終止階段調(diào)用destroy()方法Servlet初始化階段:在下列時(shí)刻Servlet容器裝載Servlet:1,Servlet容器啟動(dòng)時(shí)自動(dòng)裝載某些Servlet,實(shí)現(xiàn)它只需要在web.XML文件中的<Servlet></Servlet>之間添加如下代碼:<loadon-startup>1</loadon-startup>2,在Servlet容器啟動(dòng)后,客戶首次向Servlet發(fā)送請(qǐng)求3,Servlet類文件被更新后,重新裝載ServletServlet被裝載后,Servlet容器創(chuàng)建一個(gè)Servlet實(shí)例并且調(diào)用Servlet的init()方法進(jìn)行初始化。在Servlet的整個(gè)生命周期內(nèi),init()方法只被調(diào)用一次。Servlet工作原理:首先簡(jiǎn)單解釋一下Servlet接收和響應(yīng)客戶請(qǐng)求的過(guò)程,首先客戶發(fā)送一個(gè)請(qǐng)求,Servlet是調(diào)用service()方法對(duì)請(qǐng)求進(jìn)行響應(yīng)的,通過(guò)源代碼可見,service()方法中對(duì)請(qǐng)求的方式進(jìn)行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進(jìn)入對(duì)應(yīng)的方法中調(diào)用邏輯層的方法,實(shí)現(xiàn)對(duì)客戶的響應(yīng)。在Servlet接口和GenericServlet中是沒(méi)有doGet,doPost等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個(gè)Servlet的時(shí)候,都必須實(shí)現(xiàn)doGet或doPost等這些方法。每一個(gè)自定義的Servlet都必須實(shí)現(xiàn)Servlet的接口,Servlet接口中定義了五個(gè)方法,其中比較重要的三個(gè)方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個(gè)通用的,不特定于任何協(xié)議的Servlet,它實(shí)現(xiàn)了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實(shí)現(xiàn)了Servlet接口。所以我們定義Servlet的時(shí)候只需要繼承HttpServlet即可。Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實(shí)現(xiàn)了service()方法,并將請(qǐng)求ServletRequest,ServletResponse強(qiáng)轉(zhuǎn)為HttpRequest和HttpResponse。publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException{HttpRequestrequest;HttpResponseresponse;try{req=(HttpRequest)request;res=(HttpResponse)response;}catch(ClassCastExceptione){thrownewServletException("non-HTTPrequestresponse");}service(request,response);}

代碼的最后調(diào)用了HTTPServlet自己的service(request,response)方法,然后根據(jù)請(qǐng)求去調(diào)用對(duì)應(yīng)的doXXX方法,因?yàn)镠ttpServlet中的doXXX方法都是返回錯(cuò)誤信息,protectedvoiddoGet(HttpServletRequestres,HttpServletResponseresp)throwsServletException,IOException{Stringprotocol=req.getProtocol();Stringmsg=IStrings.getString("http.method_get_not_supported");if(protocol.equals("1.1")){resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg);}esle{resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg);}}所以需要我們?cè)谧远x的Servlet中override這些方法!源碼面前,了無(wú)秘密!---------------------------------------------------------------------------------------------------------------------------------Servlet響應(yīng)請(qǐng)求階段:對(duì)于用戶到達(dá)Servlet的請(qǐng)求,Servlet容器會(huì)創(chuàng)建特定于這個(gè)請(qǐng)求的ServletRequest對(duì)象和ServletResponse對(duì)象,然后調(diào)用Servlet的service方法。service方法從ServletRequest對(duì)象獲得客戶請(qǐng)求信息,處理該請(qǐng)求,并通過(guò)ServletResponse對(duì)象向客戶返回響應(yīng)信息。對(duì)于Tomcat來(lái)說(shuō),它會(huì)將傳遞過(guò)來(lái)的參數(shù)放在一個(gè)Hashtable中,該Hashtable的定義是:privateHashtable<StringString[]>paramHashStringArray=newHashtable<StringString[]>();這是一個(gè)String-->String[]的鍵值映射。HashMap線程不安全的,Hashtable線程安全。-----------------------------------------------------------------------------------------------------------------------------------Servlet終止階段:當(dāng)WEB應(yīng)用被終止,或Servlet容器終止運(yùn)行,或Servlet容器重新裝載Servlet新實(shí)例時(shí),Servlet容器會(huì)先調(diào)用Servlet的destroy()方法,在destroy()方法中可以釋放掉Servlet所占用的資源。-----------------------------------------------------------------------------------------------------------------------------------Servlet何時(shí)被創(chuàng)建:1,默認(rèn)情況下,當(dāng)WEB客戶第一次請(qǐng)求訪問(wèn)某個(gè)Servlet的時(shí)候,WEB容器將創(chuàng)建這個(gè)Servlet的實(shí)例。2,當(dāng)web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素時(shí),Servlet容器在啟動(dòng)web服務(wù)器時(shí),將按照順序創(chuàng)建并初始化Servlet對(duì)象。注意:在web.xml文件中,某些Servlet只有<serlvet>元素,沒(méi)有<servlet-mapping>元素,這樣我們無(wú)法通過(guò)url的方式訪問(wèn)這些Servlet,這種Servlet通常會(huì)在<servlet>元素中配置一個(gè)<load-on-startup>子元素,讓容器在啟動(dòng)的時(shí)候自動(dòng)加載這些Servlet并調(diào)用init()方法,完成一些全局性的初始化工作。Web應(yīng)用何時(shí)被啟動(dòng):1,當(dāng)Servlet容器啟動(dòng)的時(shí)候,所有的Web應(yīng)用都會(huì)被啟動(dòng)2,控制器啟動(dòng)web應(yīng)用-----------------------------------------------------------------------------------------------------------------------------------------------Servlet與JSP的比較:有許多相似之處,都可以生成動(dòng)態(tài)網(wǎng)頁(yè)。JSP的優(yōu)點(diǎn)是擅長(zhǎng)于網(wǎng)頁(yè)制作,生成動(dòng)態(tài)頁(yè)面比較直觀,缺點(diǎn)是不容易跟蹤與排錯(cuò)。Servlet是純Java語(yǔ)言,擅長(zhǎng)于處理流程和業(yè)務(wù)邏輯,缺點(diǎn)是生成動(dòng)態(tài)網(wǎng)頁(yè)不直觀。二、Hibernate1、Hibernate工作原理及為什么要用?原理:

1.

讀取并解析配置文件

2.

讀取并解析映射信息,創(chuàng)建SessionFactory

3.

打開Sesssion

4.

創(chuàng)建事務(wù)Transation

5.

持久化操作

6.

提交事務(wù)

7.

關(guān)閉Session

8.

關(guān)閉SesstionFactory

為什么要用:

a.

對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼。

b.Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化DAO層的編碼工作

c.hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。

d.hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。2、Hibernate是如何延遲加載?a.Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對(duì)象b)集合(Collection)

b.Hibernate3提供了屬性的延遲加載功能

當(dāng)Hibernate在查詢數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒(méi)有存在與內(nèi)存中,當(dāng)程序真正對(duì)數(shù)據(jù)的操作時(shí),對(duì)象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。Hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。

saveOrUpdate()方法可以實(shí)現(xiàn)update()的功能,但會(huì)多些步驟,具體如下:

如果對(duì)象在該session中已經(jīng)被持久化,不進(jìn)行操作;

對(duì)象的標(biāo)識(shí)符屬性(identifierproperty)在數(shù)據(jù)庫(kù)中不存在或者是個(gè)暫時(shí)的值,調(diào)用save()方法保存它;

如果session中的另一個(gè)對(duì)象有相同的標(biāo)識(shí)符拋出一個(gè)異常;

以上皆不符合則調(diào)用update()更新之。

Session.load/get方法均可以根據(jù)指定的實(shí)體類和id從數(shù)據(jù)庫(kù)讀取記錄,并返回與之對(duì)應(yīng)的實(shí)體對(duì)象。其區(qū)別在于:

如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會(huì)拋出一個(gè)ObjectNotFoundException;

load方法可返回實(shí)體的代理類實(shí)例,而get方法永遠(yuǎn)直接返回實(shí)體類;

load方法可以充分利用內(nèi)部緩存和二級(jí)緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找,如沒(méi)有發(fā)現(xiàn)對(duì)應(yīng)數(shù)據(jù),將越過(guò)二級(jí)緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。

在hibernate中進(jìn)行多表查詢,每個(gè)表中各取幾個(gè)字段,也就是說(shuō)查詢出來(lái)的結(jié)果集并沒(méi)有一個(gè)實(shí)體類與之對(duì)應(yīng),如何解決這個(gè)問(wèn)題?

解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean

解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1filed1,type2field2),然后在hql里面就可以直接生成這個(gè)bean了。具體怎么用請(qǐng)看相關(guān)文檔,我說(shuō)的不是很清楚。3.Hibernate中怎樣實(shí)現(xiàn)類之間的關(guān)系?(如:一對(duì)多、多對(duì)多的關(guān)系)類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都市對(duì)對(duì)象進(jìn)行操作,我們程序中把所有的表與類都映射在一起,它們通過(guò)配置文件中的many-to-one、one-to-many、many-to-many、4.說(shuō)下Hibernate的緩存機(jī)制1.

內(nèi)部緩存存在Hibernate中又叫一級(jí)緩存,屬于應(yīng)用事物級(jí)緩存

2.

二級(jí)緩存:

a)

應(yīng)用及緩存

b)

分布式緩存

條件:數(shù)據(jù)不會(huì)被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非

關(guān)鍵數(shù)據(jù)

c)第三方緩存的實(shí)現(xiàn)5.

Hibernate的查詢方式Sql、Criteria,objectcomptosition

Hql:

1、屬性查詢

2、參數(shù)查詢、命名參數(shù)查詢

3、關(guān)聯(lián)查詢

4、分頁(yè)查詢

5、統(tǒng)計(jì)函數(shù)6.

如何優(yōu)化Hibernate?1.

使用雙向一對(duì)多關(guān)聯(lián),不使用單向一對(duì)多

2.

靈活使用單向一對(duì)多關(guān)聯(lián)

3.

不用一對(duì)一,用多對(duì)一取代

4.

配置對(duì)象緩存,不使用集合緩存

5.

一對(duì)多集合使用Bag,多對(duì)多集合使用Set

6.

繼承類使用顯式多態(tài)

7.

表字段要少,表關(guān)聯(lián)不要怕多,有二級(jí)緩存撐腰

三、Struts1.Struts工作機(jī)制?為什么要用?工作機(jī)制:

Struts的工作流程:

在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從

struts-config.xml文件中讀取配置信息,把它們存放到各種配置對(duì)象

當(dāng)ActionServlet接收到一個(gè)客戶請(qǐng)求時(shí),將執(zhí)行如下流程.

-(1)檢索和用戶請(qǐng)求匹配的ActionMapping實(shí)例,如果不存在,就返回請(qǐng)求路徑無(wú)效信息;

-(2)如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對(duì)象,把客戶提交的表單數(shù)據(jù)保存到ActionForm

對(duì)象中;

-(3)根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法;

-(4)如果ActionForm的validate()方法返回null或返回一個(gè)不包含ActionMessage的ActuibErrors對(duì)象,

就表示表單驗(yàn)證成功;

-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的

Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法;

-(6)Action的execute()方法返回一個(gè)ActionForward對(duì)象,ActionServlet在把客戶請(qǐng)求轉(zhuǎn)發(fā)給

ActionForward對(duì)象指向的JSP組件;

-(7)ActionForward對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè),返回給客戶;

為什么要用:

JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個(gè)規(guī)則、一個(gè)把這些技術(shù)組織起來(lái)的規(guī)則,這就是框架,Struts便應(yīng)運(yùn)而生。

基于Struts開發(fā)的應(yīng)用由3類組件構(gòu)成:控制器組件、模型組件、視圖組件2.Struts的validate框架是如何驗(yàn)證的?在struts配置文件中配置具體的錯(cuò)誤提示,再在FormBean中的validate()方法具體調(diào)用。3.

說(shuō)下Struts的設(shè)計(jì)模式MVC模式:web應(yīng)用程序啟動(dòng)時(shí)就會(huì)加載并初始化ActionServler。用戶提交表單時(shí),一個(gè)配置好的ActionForm對(duì)象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設(shè)置決定是否需要表單驗(yàn)證,如果需要就調(diào)用ActionForm的Validate()驗(yàn)證后選擇將請(qǐng)求發(fā)送到哪個(gè)Action,如果Action不存在,ActionServlet會(huì)先創(chuàng)建這個(gè)對(duì)象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對(duì)象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回一個(gè)ActionForward對(duì)象,ActionServlet再把客戶請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指定的jsp組件,ActionForward對(duì)象指定的jsp生成動(dòng)態(tài)的網(wǎng)頁(yè),返回給客戶。

單例模式

Factory(工廠模式):

定義一個(gè)基類===》實(shí)現(xiàn)基類方法(子類通過(guò)不同的方法)===》定義一個(gè)工廠類(生成子類實(shí)例)

===》開發(fā)人員調(diào)用基類方法

Proxy(代理模式)三、spring1、Spring特點(diǎn)Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架?!糨p量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類?!艨刂品崔D(zhuǎn)——Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。

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

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

◆框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。使用Spring有什么好處?◆Spring能有效地組織你的中間層對(duì)象,無(wú)論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會(huì)發(fā)現(xiàn)Spring關(guān)注了遺留下的問(wèn)題,?!鬝pring能消除在許多工程上對(duì)Singleton的過(guò)多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)主要的問(wèn)題,它減少了系統(tǒng)的可測(cè)試性和面向?qū)ο筇匦浴?/p>

◆Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個(gè)應(yīng)用和工程中,可通過(guò)一種一致的方法來(lái)進(jìn)行配置。曾經(jīng)感到迷惑,一個(gè)特定類要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡(jiǎn)單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡(jiǎn)化。

◆Spring能通過(guò)接口而不是類促進(jìn)好的編程習(xí)慣,減少編程代價(jià)到幾乎為零。

◆Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒(méi)有依賴于Spring。

◆使用Spring構(gòu)建的應(yīng)用程序易于單元測(cè)試。

◆Spring能使EJB的使用成為一個(gè)實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或localEJBs來(lái)實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。

◆Spring幫助你解決許多問(wèn)題而無(wú)需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過(guò)使用EJB容器,如果你僅僅需要與單個(gè)的數(shù)據(jù)庫(kù)打交道,甚至不需要JTA實(shí)現(xiàn)。

■Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/Rmapping產(chǎn)品(如Hibernate)。

Spring確實(shí)使你能通過(guò)最簡(jiǎn)單可行的解決辦法解決你的問(wèn)題。這些特性是有很大價(jià)值的。

總結(jié)起來(lái),Spring有如下優(yōu)點(diǎn):

◆低侵入式設(shè)計(jì),代碼污染極低

◆獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)WriteOnce,RunAnywhere的承諾

◆Spring的DI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性

◆Spring并不完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部Spring提倡面向接口編程,請(qǐng)講一下你對(duì)它的理解,它有什么好處。在一個(gè)面向?qū)ο蟮南到y(tǒng)中,系統(tǒng)的各種功能是由許許多多的不同對(duì)象協(xié)作完成的。在這種情況下,各個(gè)對(duì)象內(nèi)部是如何實(shí)現(xiàn)自己的對(duì)系統(tǒng)設(shè)計(jì)人員來(lái)講就不那么重要了;而各個(gè)對(duì)象之間的協(xié)作關(guān)系則成為系統(tǒng)設(shè)計(jì)的關(guān)鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統(tǒng)設(shè)計(jì)之初都是要著重考慮的,這也是系統(tǒng)設(shè)計(jì)的主要工作內(nèi)容2、spring工作機(jī)制和使用springmvc請(qǐng)所有的請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的處理工作。

2.DispatcherServlet查詢一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller.

3.DispatcherServlet請(qǐng)請(qǐng)求提交到目標(biāo)Controller

4.Controller進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回一個(gè)ModelAndView

5.Dispathcher查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象

6.視圖對(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ì)增加域?qū)ο蟮膶?duì)象模型的復(fù)雜性。IOC允許創(chuàng)建一個(gè)可以構(gòu)造對(duì)象的應(yīng)用環(huán)境,然后向這些對(duì)象傳遞它們的協(xié)作對(duì)象。正如單詞倒置所表明的,IOC就像反

過(guò)來(lái)的JNDI。沒(méi)有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個(gè)對(duì)象都是用

其協(xié)作對(duì)象構(gòu)造的。因此是由容器管理協(xié)作對(duì)象(collaborator)。

Spring即使一個(gè)AOP框架,也是一IOC容器。Spring最好的地方是它有助于您替換對(duì)象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對(duì)象)。然后可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對(duì)象。}

Spring對(duì)多種ORM框架提供了很好的支持,簡(jiǎn)單描述在Spring中使用Hibernate的方法,并結(jié)合事務(wù)管理。

在context中定義DataSource,創(chuàng)建SessionFactoy,設(shè)置參數(shù);DAO類繼承HibernateDaoSupport,實(shí)現(xiàn)具體接口,從中獲得HibernateTemplate進(jìn)行具體操作。在使用中如果遇到OpenSessionInView的問(wèn)題,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。3、Spring的BeanBean有哪些作用域。singleton、prototype、request、session、globalsession、自定義

除application(詳見SpringFramework2.0Reference的3.4節(jié)singleton=”false”/>7、

Hibernate中的update()和saveOrUpdate()的區(qū)別saveOrUpdate()方法可以實(shí)現(xiàn)update()的功能,但會(huì)多些步驟,具體如下:

如果對(duì)象在該session中已經(jīng)被持久化,不進(jìn)行操作;

對(duì)象的標(biāo)識(shí)符屬性(identifierproperty)在數(shù)據(jù)庫(kù)中不存在或者是個(gè)暫時(shí)的值,調(diào)用save()方法保存它;

如果session中的另一個(gè)對(duì)象有相同的標(biāo)識(shí)符拋出一個(gè)異常;

以上皆不符合則調(diào)用update()更新之。Session.load/get方法均可以根據(jù)指定的實(shí)體類和id從數(shù)據(jù)庫(kù)讀取記錄,并返回與之對(duì)應(yīng)的實(shí)體對(duì)象。其區(qū)別在于:

如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會(huì)拋出一個(gè)ObjectNotFoundException;

load方法可返回實(shí)體的代理類實(shí)例,而get方法永遠(yuǎn)直接返回實(shí)體類;

load方法可以充分利用內(nèi)部緩存和二級(jí)緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找,如沒(méi)有發(fā)現(xiàn)對(duì)應(yīng)數(shù)據(jù),將越過(guò)二級(jí)緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。8、

Spring中使用Hibernate的方法,并結(jié)合事務(wù)管理

在context中定義DataSource,創(chuàng)建SessionFactoy,設(shè)置參數(shù);DAO類繼承HibernateDaoSupport,實(shí)現(xiàn)具體接口,從中獲得HibernateTemplate進(jìn)行具體操作。在使用中如果遇到OpenSessionInView的問(wèn)題,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。(詳見SpringFramework2.0Reference的12.2節(jié)class=""singleton="false"/>16.Spring設(shè)值注入簡(jiǎn)單實(shí)例(spring簡(jiǎn)單應(yīng)用:面向接口編程)1.

首先新建2個(gè)接口,Person(人),Axe(斧頭)接口。Person接口:packagespringtest;//定義Person接口publicinterfacePerson{

//Person接口里定義一個(gè)使用斧頭的方法

publicvoiduseAxe();}Axe接口:packagespringtest;//定義Axe接口publicinterfaceAxe{

//Axe接口有個(gè)砍柴的方法

publicStringchop();}2.

新建2個(gè)實(shí)現(xiàn)類,Chinese類,StoneAxe類。Chinese類:packagespringtest;//Chinese實(shí)現(xiàn)Person接口publicclassChineseimplementsPerson{

//面向Axe接口編程,而不是具體的實(shí)現(xiàn)累

privateAxeaxe;

//默認(rèn)的構(gòu)造器

publicChinese(){}

publicvoidsetAxe(Axeaxe){

this.axe=axe;

}

//實(shí)現(xiàn)Person接口的useAxe方法

publicvoiduseAx

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論