版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java面試100題參考答案
Strutsl的工作原理
6:HIES
.在web應(yīng)用程序啟動(dòng)就會(huì)加載ActionServlet,ActionServlet從配置文件struts-config.xml中讀取配置信
息,并把它們存放到各種配置對象中。用戶發(fā)起請求后,按如下步驟執(zhí)行:
(1)用戶的請求以HTTP方式傳輸?shù)椒?wù)器上,接受請求的是ActionServlet.
(2)ActionServlet接收到請求后,會(huì)查找Struts-config.xml文件來確定服務(wù)器上是否有用戶請求的操
作,此處用戶請求操作應(yīng)為登陸操作。如果沒有,則返回一個(gè)用戶請求無效的出錯(cuò)信息。
(3)當(dāng)ActionServlet請求找到用戶請求的Action后,首先將用戶輸入的表單參數(shù)打包成一個(gè)
ActionFrom對象。接著ActionServlet再根據(jù)struts-config.xml中的配置信息決定是否要執(zhí)行ActionFrom
對象中的Validate方法。若Validate方法執(zhí)行有錯(cuò),則返回。否則,繼續(xù)下一步。
(4)系統(tǒng)生成一個(gè)用戶所請求的Action的實(shí)例對象,將前面的ActionFrom對象傳遞給它,運(yùn)行它
的Execute。方法。
(5)execute。執(zhí)行結(jié)束前會(huì)生成以和ActionForward類型的對象并將之返回給ActionServlet,該對象
的作用是告訴ActionFroward就代表跳轉(zhuǎn)到一個(gè)登陸成功的頁面。ActionServlet將對之進(jìn)行分析,其
實(shí)就相當(dāng)于接收到一個(gè)新的請求,重復(fù)(2)~(5)的過程,直到將某個(gè)界面返會(huì)給用戶為止!
3^核心控制器被調(diào)用,詢問ActionMapper來決定請求是否需要調(diào)用某個(gè)Action
4、如果ActionMapper決定需要調(diào)用某個(gè)Action,核心控制器把控制權(quán)委派給ActionProxy(備
注:JSP請求無需調(diào)用Action)
5、Actionproxy通過ConfigurationManager詢問框架的配置.文件(struts.xml),找到需調(diào)用的
Action類
6、Actionproxy創(chuàng)建一個(gè)Actioninvocation的實(shí)例
7^Actioninvocation負(fù)責(zé)調(diào)用Action,在此之前會(huì)依次調(diào)用所有配置的攔截器
8、Action執(zhí)行完畢,Actioninvocation負(fù)責(zé)根據(jù)結(jié)果碼字符串在struts.xml的配置中找到對應(yīng)的
返回結(jié)果
9、攔截器被再次執(zhí)行
10、過濾器被再次執(zhí)行
3Strutsl與Struts2的區(qū)別
特性Strutsl.xStruts2
Struts2的Action類實(shí)現(xiàn)了一個(gè)Action接
Strutsl.x要求Action類要擴(kuò)展自一個(gè)抽象口oStruts2也提供ActionSupport基類來
Action類基類。Strutsl.x的一個(gè)共有的問題是面向?qū)崿F(xiàn)一般使用的接口。當(dāng)然,Action接口不
抽象類編程而不是面向接口編程。是必須的。任何使用execute方法的POJO
可以被當(dāng)作Struts2的Action對象來使用。
Struts2Action對象為每一個(gè)請求都實(shí)例
Strutsl.xAction類是單例類,因?yàn)橹挥幸?/p>
化對象,所以沒有線程安全的問題。(實(shí)踐
個(gè)實(shí)例來控制所有的請求。單例類策略造成
線程模型中,servlet容器給每一個(gè)請求產(chǎn)生許多丟
了一定的限制,并且給開發(fā)帶來了額外的煩
棄的對象,并且不會(huì)導(dǎo)致性能和垃圾回收問
惱。Action資源必須是線程安全或者同步的。
題)。
Strutsl.x的Action類依賴于servletAPI,Struts2的Action和容器無關(guān)。Servlet上
Servlet依
當(dāng)Action被調(diào)用時(shí),以Request和Response下文被表現(xiàn)為簡單的Maps,允許Action被
賴
作為參數(shù)傳給execute方法。獨(dú)立的測試。
測試Strutsl.x的主要問題是execute方法
Struts2的Action可以通過初始化、設(shè)置屬
暴露了ServletAPI使得測試依賴于容器。
易測性性、調(diào)用方法來測試。依賴注入的支持也是
第三方擴(kuò)展,如StrutsTestCase,提供一
測試變得更簡單。
套Slrutsl的模擬對象(來進(jìn)行測試)。
Strutsl.x使用ActionForm對象來捕獲輸Struts2直接使用Action屬性作為輸入屬
入。象Action一樣,所有的ActionForm必性,消除了對第二個(gè)輸入對象的需求。輸入
須擴(kuò)展基類。因?yàn)槠渌腏avaBean不能作為屬性可能是有自己(子)屬性的rich對象類
ActionForm使用,開發(fā)者經(jīng)常創(chuàng)建多余的類型。Action屬性能夠通過web頁面上的
捕獲輸入
來捕獲輸入。DynaBeans可以被用來作為替taglibs訪問。Struts2也支持ActionForm
代ActionForm的類來創(chuàng)建。但是,開發(fā)者可模式。rich對象類型,包括業(yè)務(wù)對象,能夠
能是在重新描述(創(chuàng)建)已經(jīng)存在的JavaBean用作輸入/輸出對象。這種ModelDriven特
(仍然會(huì)導(dǎo)致有冗余的javabean)。性簡化了taglib對POJO輸入對象的引用。
Strutsl.x整合JSTL,所以它使用JSTL的表Struts2使用JSTL,但是也支持一個(gè)更強(qiáng)大
表達(dá)式語言達(dá)式語言。表達(dá)式語言有基本的圖形對象移和靈活的表達(dá)式語言"ObjectGraph
動(dòng),但是對集合和索引屬性的支持很弱。NotationLanguage77(OGNL)。
Struts2使用“ValueStack”技術(shù),使
taglib能夠訪問值而不需要把你的頁面
將值綁定到Strutsl.x使用標(biāo)準(zhǔn)JSP機(jī)制來綁定對象到
(view)和對象綁定起來。ValueStack策略
頁面頁面上下文。
允許通過一系列名稱相同但類型不同的屬
性重用頁面(view)o
Strutsl.x的ActionForm屬性經(jīng)常都是
StringoStruts1.x使用Commons-BeanutilsStruts2使用0GNL進(jìn)行類型轉(zhuǎn)換。提供基本
類型轉(zhuǎn)換
來進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換每一個(gè)類,而不是為和常用對象的轉(zhuǎn)換器。
每一個(gè)實(shí)例配置。
Strutsl.x支持在ActionForm的validate
Struts2支持通過validate方法和XWork
驗(yàn)證方法中手動(dòng)校驗(yàn),或者通過Commons
校驗(yàn)框架來進(jìn)行校驗(yàn)。
Validator的擴(kuò)展來校驗(yàn)。
Strutsl.x支持每一個(gè)模塊有單獨(dú)的Struts2支持通過攔截器堆棧(Interceptor
Action執(zhí)行RequestProcessors(生命周期),但是模Stacks)為每一個(gè)Action創(chuàng)建不同的生命
控制塊中的所有Action必須共享相同的生命周周期。堆棧能夠根據(jù)需要和不同的Action
期。一起使用。
4Struts2中攔截器的主要作用、工作原理,如何自定義攔截器
1.攔截器的主要作用
早期MVC框架將一些通用操作寫死在核心控制器中,致使框架靈活性不足、可擴(kuò)展性降低;Struts
2將核心功能放到多個(gè)攔截器中實(shí)現(xiàn),攔截器可自由選擇和組合,增強(qiáng)了靈活性,有利于系統(tǒng)的解
耦。為Action提供附加功能時(shí),無需修改Action代碼,使用攔截器來提供。Struts2大多數(shù)核心功能
是通過攔截器實(shí)現(xiàn)的,比如表單組裝、表單驗(yàn)證、類型轉(zhuǎn)換、模型驅(qū)動(dòng)、Servlet對象注入、文件上
傳等,每個(gè)攔截器完成某項(xiàng)功能。
2.Struts2中攔截器的工作原理
攔截器與過濾器原理很相似。三階段執(zhí)行周期:1、做?些Action執(zhí)行前的預(yù)處理;2、將控制
交給后續(xù)攔截器或返回結(jié)果字符串;3、做一些Action執(zhí)行后的處理。多個(gè)攔截器可以組成攔截器棧
一起起作用。從結(jié)構(gòu)上看,攔截器棧相當(dāng)于多個(gè)攔截器的組合;在功能上看,攔截器棧也是攔截器
3.1自定義攔截器的方法
嘮實(shí)現(xiàn)Interceptor接口
簿voidinit():初始化攔截器所需資源
送voiddestroyf):釋放在init()中分配的資源
五Stringintercept(Actionlnvocationai)throwsException
■實(shí)現(xiàn)攔截器功能
■利用Actioninvocation參數(shù)獲取Action狀態(tài)
■返回結(jié)果碼(result)字符串
尊繼承Abstractlnterceptor類
,提供了init()和destroy。方法的空實(shí)現(xiàn),只需要實(shí)現(xiàn)intercept方法即可
解推薦使用
心繼承MethodFilterlnterceptor
④指定攔截的方法:indudeMethods
籍指定不攔截的方法:excludeMethods
3.2配置和引用攔截器
<interceptors>
配置攔截器一〉
<interceptorname="time"
class="erceptor.FirstInterceptor"/>
<!—配置攔截器棧一〉
<interceptor-stackname="myStack">
<interceptor-refname="time"/>
interceptor-refname="defaultStack"/>
</interceptor-stack>
</interceptors>
<!—配置默認(rèn)攔截器
<default-interceptor-refname="myStack,r/>
<actionname="loginu
class="com.aptech,struts2.action.LoginAction">
<result>/success.jsp</result>
<resultname="error">/error.jsp</result>
<!—為Action指定攔截器—>
<interceptor-refname="myStack"/>
</action>
5攔截器和過濾器的異同
1、過濾器是web項(xiàng)目的普遍概念,而攔截器是struts2中的特有概念
2、過濾器可以過濾所有請求,攔截器只攔截action請求
3、自定義過濾器需要實(shí)現(xiàn)Filter接口,而自定義攔截器可以實(shí)現(xiàn)Interceptor接口
4、在web.xml中配置過濾器,在struts.xml中配置攔截器
5、攔截器可以訪問ServletAPI、ActionContext>值棧,而過濾器只能訪問ServletAPI
6、使用通配符來定義過濾器的過濾路徑,過濾的是地址。通過為Action指定攔截器來調(diào)用攔截器,
攔截器可以細(xì)化到方法層次。
7、在Struts2項(xiàng)目中如果使用過濾器,一般應(yīng)該將過濾器置于Struts2總控制器之前
8、執(zhí)行順序:過濾器一攔截器一Action--攔截器一過濾器(過濾器靠前)
9、攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)(待確認(rèn))
6Hibernate相比JDBC的優(yōu)勢所在
二者的聯(lián)系:
JDBC是java應(yīng)用程序連接數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)存取的一種機(jī)制,是一組用java語言編寫的類和接口的
API,它和數(shù)據(jù)庫之間由各個(gè)廠商提供的數(shù)據(jù)庫驅(qū)動(dòng)進(jìn)行關(guān)聯(lián)。hibernate是一個(gè)開源的輕量級的ORM
框架,它在底層對jdbc進(jìn)行了封裝。Hibernate可以用在任何JDBC可以使用的場合
優(yōu)點(diǎn):
1、hibernate可以讓開發(fā)人員以面相對象的思想來操作數(shù)據(jù)庫。jdbc只能通過SQL語句將元數(shù)據(jù)傳
送給數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)操作。而hibernate可以在底層對元數(shù)據(jù)和對象進(jìn)行轉(zhuǎn)化,使得開發(fā)者只用面
向?qū)ο蟮姆绞絹泶嫒?shù)據(jù)即可。
2、使用的語言不同:JDBC使用基于關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)SQL語言,Hibernate使用的是HQL語言
3,操作的對象不同:JDBC通過SQL語句直接傳送到數(shù)據(jù)庫中執(zhí)行,Hibernate操作的是持久化對象,
由底層持久化對象的數(shù)據(jù)更新到數(shù)據(jù)庫中。
4、hibernate開發(fā)的程序具有更好的移植性,hibernate使用xml或JPA的配置以及數(shù)據(jù)庫方言等等
的機(jī)制,使得hibernate具有更好的移植性,對于不同的數(shù)據(jù)庫,開發(fā)者只需要使用相同的數(shù)據(jù)操作
即可,無需關(guān)心數(shù)據(jù)庫之間的差異。而直接使用JDBC就不得不考慮數(shù)據(jù)庫差異的問題。
5、使用Hibernate極大的提高了開發(fā)者的開發(fā)效率。hibernate提供了大量的封裝(這也是它最大的
缺點(diǎn)),很多數(shù)據(jù)操作以及關(guān)聯(lián)關(guān)系等都被封裝的很好,開發(fā)者不需寫大量的sql語句,這就極大的
提高了開發(fā)者的開發(fā)效率。
6,Hibernate緩存機(jī)制對提升性能大有裨益。hibernate提供了緩存機(jī)制(session緩存,二級緩存,
查詢緩存),對于那些改動(dòng)不大且經(jīng)常使用的數(shù)據(jù),可以將它們放到緩存中,不必在每次使用時(shí)都去
查詢數(shù)據(jù)庫,緩存機(jī)制對提升性能大有裨益。
缺點(diǎn):
1、從理論上來說,ORM永遠(yuǎn)也不可能比JDBC好,就像任何高級語言的運(yùn)行性能永遠(yuǎn)也不會(huì)好過匯
編語言一個(gè)道理。但從這個(gè)角度講,精心編寫的JDBC無論如何都是最快的。
2、hibernate更消耗內(nèi)存。因?yàn)樗看蔚臄?shù)據(jù)庫操作都要做數(shù)據(jù)和對象的轉(zhuǎn)換/封裝,查詢出一條數(shù)
據(jù)就要?jiǎng)?chuàng)建一個(gè)或多個(gè)對象,這樣也太消耗內(nèi)存了。
3,對hibernate而言,它對JDBC封裝過于厲害,所以就失去了對SQL的控制(當(dāng)然hibernate也可
以使用nativesql既使用createSQLQuery等方法來調(diào)用與數(shù)據(jù)庫相關(guān)的sql,但這樣一來也就影響了
hibernate的可移植性),使得hibernate的在很多地方不夠靈活,難于優(yōu)化,尤其對于一些復(fù)雜的關(guān)
聯(lián)查詢時(shí),hibernate提供的功能遠(yuǎn)不及直接使用JDBC方便性能更高。
7Hibenate的基本原理(ORM)
Application
PersistentObjects|
Hibernate
-7產(chǎn)XM.Mgpp.ns
Database
Hibenate的核心是ORM映射。hibernate通過對jdbc進(jìn)行封裝,對java類和關(guān)系數(shù)據(jù)庫進(jìn)行mapping,
實(shí)現(xiàn)了對關(guān)系數(shù)據(jù)庫的面向?qū)ο蠓绞降牟僮?,改變了傳統(tǒng)的jdbc+sql操作數(shù)據(jù)的方式,從而使開發(fā)
人員可以花更多精力進(jìn)行對象方面的開發(fā)。
8cascade和inverse的區(qū)別
inverse和cascade兩者之間沒有任何關(guān)系。但是它們又都能影響對象關(guān)聯(lián)關(guān)系的維護(hù),所以將這兩
個(gè)屬性的作用區(qū)分開也不是很容易的。
inverse和cascade的區(qū)別主要表現(xiàn)在以下幾個(gè)方面:
>作用的范圍不同
inverse是設(shè)置在集合元素中的,而對于<many-to-one>和〈one-to-one〉則無此屬性。而cascade則
對于所有涉及到關(guān)聯(lián)的元素都是有效的,其中包括了集合元素以及<many-to-one:^n<one-to-one>
>執(zhí)行的策略不同
inverse會(huì)首先判斷集合的變化情況,然后針對變化執(zhí)行相應(yīng)的處理。而cascade則是直接對集合
的每個(gè)元素執(zhí)行相應(yīng)的處理。
>執(zhí)行的時(shí)機(jī)不同
inverse是在執(zhí)行SQL語句之前判斷是否要執(zhí)行該SQL語句,而cascade則是在主控方發(fā)生操作
時(shí)用來判斷是否進(jìn)行級聯(lián)操作。
>執(zhí)行的目標(biāo)不同
inverseX^JF<one-to-many>#<many-to-many>^d:?^':/?-ffi|S|<>對于<one-to-many>,inverse所處理
的是對被關(guān)聯(lián)表(的外鍵)進(jìn)行修改操作。對于<many-to-many>,inverse所處理則是中間關(guān)聯(lián)
表(增減記錄)。而cascade則不會(huì)區(qū)分這兩種關(guān)系的差別,所做的操作都是針對被關(guān)聯(lián)表的。
9HQL和SQL的區(qū)別
1.操作對象不同:HQL操作的類及其屬性,SQL操作的是數(shù)據(jù)庫表及其字段
2.相比SQL語句,HQL有所簡化
3.HQL結(jié)果直接返回List或其他對象,而不是像JDBC中使用SQL返回結(jié)果集,還要轉(zhuǎn)化成對象。
4.不同數(shù)據(jù)庫的SQL語句會(huì)有細(xì)微差別,HQL獨(dú)立于數(shù)據(jù)庫,根據(jù)方言設(shè)置轉(zhuǎn)換為對應(yīng)的SQL語句
10如何提高Hibernate的性能
1.配盤數(shù)據(jù)源
2.使用延遲加載
3.使用二級緩存、查詢緩存
4.對HQL語句的優(yōu)化:避免or、not、like^having>distinct等操作
5.映射文件配置參數(shù):fetch-size,fetch,batch-size
6.操作方法使用:比如load和get,list和iterate等
11Hibernate中持久化類的三種狀態(tài)及其特征
瞬時(shí)狀態(tài)特征:不在Session緩存中,不與任何Session實(shí)例相關(guān)聯(lián);在數(shù)據(jù)庫中沒有與之對應(yīng)數(shù)據(jù)。
持久化狀態(tài)特征:在Session緩存中,與Session實(shí)例相關(guān)聯(lián);在數(shù)據(jù)庫中有與之對應(yīng)的數(shù)據(jù)。
脫管狀態(tài)特征:不在Session緩存中,不與任何Session實(shí)例相關(guān)聯(lián);在數(shù)據(jù)庫中有與之對應(yīng)數(shù)據(jù)。
Hibernate會(huì)檢測到處于持久狀態(tài)的對象的任何改動(dòng),在當(dāng)前操作單元執(zhí)行完畢時(shí)將對象的狀態(tài)同步
到數(shù)據(jù)庫,開發(fā)者不需要手動(dòng)執(zhí)行update。語句。多次save。是多余的。
SpringloC的原理
Testjava
BeanFactoryfactory,new
ClassPathXmlAppiicationContext|"app1icationContext.xtt1"|;
CorkMorkiVorJc)fauctoryne二tBean(^woric*);
如酢天案化,
慘堀道文件胴
applicationContext
Personp=rtewMein();<heanid=,,man,Tclas3=*cbsY.apiing.dao.Xan"/>
WorkworJc=newDayTJor)c(p);
<bean1dss"gnaa"class=:n.bsY.spring.dao.YoXan"/>
<beanidB,*work"cla3s="cn.bsu.spring.tcgr.DayVork”>
(propertynaie?"person"ref?"?anV>
</bean>
<!—〈beanid,"gdt"c1assB"cn.bsv.spring.mjr.Hi^hWork":
Workwor)c=TYewNightWorlc(p);
〈propertytwuw'jierscn"re!*"v?wn"/:.</bean>—>
采用loC之前采用loC之后
采用loC之前,對象的創(chuàng)建以及對象關(guān)系的維護(hù)都要由程序員通過硬編碼的形式來維護(hù)。
采用loC后,對象的創(chuàng)建以及對象關(guān)系的維護(hù)將由loC容器來實(shí)現(xiàn),維護(hù)的依據(jù)是配置文件,程序員
直接從容器中取對象就可以了.
13SpringAOP的原理
采用AOP之前匕采用AOP之后
AOP,面向切面編程,是一種編程方法,它和面向?qū)ο缶幊滩捎玫捻樞颍v向)編程形成互補(bǔ),可
以解決一些在OOP中無法或很難解決的問題,例如事務(wù)、日志、權(quán)限等橫切性問題,使得OOP集
中精力于業(yè)務(wù)邏輯編程。
OOP實(shí)現(xiàn)橫切性關(guān)注點(diǎn)導(dǎo)致代碼混亂,開發(fā)者必須同時(shí)考慮業(yè)務(wù)邏輯、性能、日志、安全等問題。
代碼分散,橫切性代碼散布在各個(gè)模塊中。AOP將這些代碼模塊化,然后織入到需要的模塊中。
過濾器,攔截器都可以理解為一種AOP技術(shù)。
14AOP的基本概念:切面、通知、切入點(diǎn)、連接點(diǎn)、織入
1.切面(Aspect):從對象中抽取出來的橫切性功能模塊。類似與OOP中的一個(gè)類。由通知和切
入點(diǎn)兩部分組成。
2.通知(Adivice):切面的具體實(shí)現(xiàn),例如具體的日志操作代碼,一般是是切面中的某個(gè)方法。
3.連接點(diǎn)(Joinpoint):目標(biāo)對象中插入通知的地方。即advice的應(yīng)用位置。spring中只支持是方
法
4.切入點(diǎn)(Pointcut):切面的一部分,對應(yīng)一個(gè)表達(dá)式,定義了advice應(yīng)該被插入到什么樣的
Joinpoint點(diǎn)上,即advice的應(yīng)用范圍
5.目標(biāo)對象(TargetObject):被通知的對象。
6.代理(AOPProxy):由AOP框架創(chuàng)建的口標(biāo)對象的代理對象°是被插入了advice的TargetObject。
7.織入(Weaving):將通知與目標(biāo)對象結(jié)合在一起,生成新的對象的過程。新的對象就是AOP
ProxyoSpring是在運(yùn)行是完成織入工作的。
15SSH整合的基本步驟
1、Spring向下整合Hibernate(DAO層)
1.1使用Spring的loC容器創(chuàng)建sessionFactory
1.2使用Spring的loC容器創(chuàng)建DAO
2、Spring中間管理業(yè)務(wù)層
2.1使用Spring的loC容器創(chuàng)建BizBean
2.2使用Spring的AOP配置業(yè)務(wù)層事務(wù)
3、Spring向上整合Struts2(控制層)
3.1配置監(jiān)聽器和上下文參數(shù)
3.2使用Spring的loC容器來管理Action
4、其他
4.1使用Spring提供的過濾器解決中文亂碼問題
4.2使用Spring提供的OpenSessionlnViewFilter解決懶加載問題
4.3使用Spring的loC容器管理數(shù)據(jù)源
16并行操作下數(shù)據(jù)庫事務(wù)出現(xiàn)的問題及含義:事務(wù)的隔離級別和四大屬性
1、并行操作下數(shù)據(jù)庫事務(wù)出現(xiàn)的問題:
>臟讀(Dirtyread):臟讀發(fā)生在一個(gè)事務(wù)讀取了被另一個(gè)事務(wù)改寫但還未提交的數(shù)據(jù)時(shí).如果這些
改變在稍后被1日滾,那么第?個(gè)事務(wù)讀取的數(shù)據(jù)就是無效的.
>不可重復(fù)讀(Nonrepeatableread):不可重復(fù)讀發(fā)生在一個(gè)事務(wù)執(zhí)行相同的查詢兩次或兩次以上,
但每一次查詢結(jié)果都不相同.這通常是由于另一個(gè)并發(fā)事務(wù)在兩次查詢之間更新了數(shù)據(jù).
>幻讀(Phantomread):幻讀和不可重復(fù)讀相似.當(dāng)一個(gè)事務(wù)(T1)讀取幾行紀(jì)錄后,另一個(gè)并發(fā)事務(wù)
(T2)插入一些數(shù)據(jù),幻讀就發(fā)生了.在后來的查詢中,第一個(gè)事務(wù)(T1)就會(huì)發(fā)現(xiàn)一些原來沒有的額
外紀(jì)錄.
2、事務(wù)的隔離級別
>READ_UNCOMMITTED允許你讀取還未提交的改變了的數(shù)據(jù).可能導(dǎo)致臟讀,幻讀或不可重復(fù)讀.
>READ_COMMITTED允許在并發(fā)事務(wù)已經(jīng)提交后讀取,可防止臟讀,但幻讀和不可重復(fù)讀仍可能
發(fā)生.
>REPEATABLE_READ對相同字段的多次讀取結(jié)果是一致的,除非數(shù)據(jù)被事務(wù)本身改變.可防止臟
讀和不可重復(fù)讀,但幻讀仍可能發(fā)生.
>SERIALIZABLE完全服從ACID的隔離級別,確保不發(fā)生臟讀,不可重復(fù)讀和幻讀.這在所有隔離級
別中也是最慢的,因?yàn)樗峭ㄟ^完全鎖定在事務(wù)中涉及的數(shù)據(jù)表來完成的.
3,事務(wù)的四大屬性設(shè)置
>事務(wù)的傳播特性PROPAGATION:
?REQUIRED:如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟。
?SUPPORTS:如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。
>只讀特性readonly="true"
?只讀事務(wù)。如果一個(gè)事務(wù)只對數(shù)據(jù)庫執(zhí)行讀操作,設(shè)為只讀事務(wù)可以提高效率
>隔離級別特性isolation="DEFAULT"
?事務(wù)的隔離級別。并行情況下保證事務(wù)的完整性。
>超時(shí)特性timeout="-l"
?事務(wù)的超時(shí)時(shí)間。超時(shí)則事務(wù)回滾。
17JSP的執(zhí)行過程
在JSP運(yùn)行過程中,首先由客戶端發(fā)出請求,Web服務(wù)器接收到請求后,如果是第一次訪問某個(gè)jsp
頁面,Web服務(wù)器對它進(jìn)行以下3個(gè)操作。
1.翻譯:由Jsp變?yōu)?java,由JSP引擎實(shí)現(xiàn)。
2.編譯:由.java變?yōu)?class,由Java編譯器實(shí)現(xiàn)。
3.執(zhí)行:由.class變?yōu)?html,用Java虛擬機(jī)執(zhí)行編譯文件,然后將執(zhí)行結(jié)果返回給Web服務(wù)器,并
最終返回給客戶端
如果不是第一次訪問某個(gè)JSP頁面,則只執(zhí)行第三步。
所以第一次訪問JSP較慢。
18JSP和Servlet的區(qū)別和聯(lián)系
區(qū)別
1.JSP是在HTML代碼里寫JAVA代碼,框架是HTML;而Servlet是在JAVA代碼中寫HTML代碼,本
身是個(gè)JAVA類。
2.JSP使人們把顯示和邏輯分隔成為可能,這意味著兩者的開發(fā)可并行進(jìn)行;而Servlet并沒有把
兩者分開。
3.Servlet獨(dú)立地處理靜態(tài)表示邏輯與動(dòng)態(tài)業(yè)務(wù)邏輯.這樣,任何文件的變動(dòng)都需要對此服務(wù)程序重
新編譯;JSP允許用特殊標(biāo)簽直接嵌入到HTML頁面,HTML內(nèi)容與JAVA內(nèi)容也可放在單獨(dú)文件
中,HTML內(nèi)容的任何變動(dòng)會(huì)自動(dòng)編譯裝入到服務(wù)程序.
4.Servlet需要在web.xml中配置,而JSP無需配置。
5.目前JSP主要用在視圖層,負(fù)責(zé)顯示,而Servlet主要用在控制層,負(fù)責(zé)調(diào)度
聯(lián)系:都是Sun公司推出的動(dòng)態(tài)網(wǎng)頁技術(shù),先有Servlet,針對Servlet缺點(diǎn)推出JSP。JSP是Servlet
的,一種特殊形式,每個(gè)JSP頁面就是一個(gè)Servlet實(shí)例JSP頁面由系統(tǒng)翻譯成Servlet,Servlet再負(fù)
責(zé)響應(yīng)用戶請求。
19JSP的9個(gè)內(nèi)置對象及其含義,分別寫出其常用方法三個(gè)
內(nèi)部對象所屬類型川途
煙U酶javax.servlet.httpServletRequest包含「請求方的信息
骨的n躁javax.servlet.httpServletResponse封裝了對客戶端的響應(yīng)
outjavax.servlet.jsp.JspWriter響應(yīng)信息流的標(biāo)準(zhǔn)輸出
在同?請求中所產(chǎn)牛:的session
法蹴然檄門javax.servlet.Http.HttpSession
資料,”前只對Http協(xié)議有定義
applicationjavax.servlet.ServletContext提供安全信息
configjavax.servlet.ServletConfig提供配置信息
pageContextjavax.servlet.jsp.PageContext提供當(dāng)前頁面屬性
pagejava.lang.Object|HJJjava的this
exceptionjava.Iang.Throwable異常處理
常用方法略
20page/request/session/application的范圍區(qū)別
page:當(dāng)前頁面范圍
request:當(dāng)前頁面范圍+轉(zhuǎn)發(fā)頁面(forward)+包含頁面(include)
session:當(dāng)前會(huì)話:session在以下幾種情況下失效
1.銷毀session:Session.invalidate));
2.超過最大非活動(dòng)間隔時(shí)間
3.手動(dòng)關(guān)閉瀏覽器(session并沒有立刻失效,因?yàn)榉?wù)器端session仍舊存在,超過最大非活動(dòng)
間隔時(shí)間后真正失效)
application:當(dāng)前應(yīng)用;服務(wù)器重新啟動(dòng)前一直有效
21get和post的區(qū)別
1.Get是不安全的,因?yàn)樵趥鬏斶^程,數(shù)據(jù)被放在請求的URL中;Post的所有操作對用戶來說都
是不可見的。
2.Get傳送的數(shù)據(jù)量較小,這主要是因?yàn)槭躑RL長度限制;Post傳送的數(shù)據(jù)量較大,一般被默認(rèn)
為不受限制。
3.Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符:而Post支持整個(gè)ISO10646字符集。
4.Get執(zhí)行效率卻比Post方法好。Get是form提交的默認(rèn)方法。
22Servlet的生命周期
1.加載:在下列時(shí)刻加載Servlet:(1)如果已配置自動(dòng)加載選項(xiàng),則在啟動(dòng)服務(wù)謂時(shí)自動(dòng)加載
(web.xml中設(shè)置<load-on-start>);(2)在服務(wù)器啟動(dòng)后,客戶機(jī)首次向Servlet發(fā)出請求時(shí);(3)
重新加載Servlet時(shí)(只執(zhí)行一次)
2.實(shí)例化:加載Servlet后,服務(wù)器創(chuàng)建一個(gè)Servlet實(shí)例。(只執(zhí)行一次)
3.初始化:調(diào)用Servlet的init()方法。在初始化階段,Servlet初始化參數(shù)被傳遞給Servlet配
置對象ServletConfig。(只執(zhí)行一次)
4.請求處理:對于到達(dá)服務(wù)器的客戶機(jī)請求,服務(wù)器創(chuàng)建針對此次請求的一個(gè)“請求”對象和一
個(gè)“響應(yīng)”對象。服務(wù)器調(diào)用Servlet的serviced方法,該方法用于傳遞“請求”和“響應(yīng)”
對象。service!)方法從“請求”對象獲得請求信息、處理該請求并用“響應(yīng)”對象的方法以將
響應(yīng)傳回客戶機(jī)。service。方法可以調(diào)用其它方法來處理請求,例如doGet()>doPost()或其
它的方法。(每次請求都執(zhí)行該步驟)
5.銷毀:當(dāng)服務(wù)器不再需要Servlet,或重新裝入Servlet的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用Servlet的
destroy()方法。(只執(zhí)行一次)
23session和cookie的區(qū)別
1、聯(lián)系
http是無狀態(tài)的協(xié)議,客戶每次讀取web頁面時(shí),服務(wù)器都打開新的會(huì)話,而且服務(wù)器也不會(huì)自動(dòng)
維護(hù)客戶的上下文信息,那么要怎么才能在多次請求之間共享信息呢(比如實(shí)現(xiàn)網(wǎng)上商店中的購物
車)?session和cookie就是為了解決HTTP協(xié)議的無狀態(tài)而采用的兩種解決方案。
2、原理(通過比喻形象說明,真正原理自己總結(jié))
■Cookie:發(fā)給顧客一張卡片,上面記錄著消費(fèi)的數(shù)量,一般還有個(gè)有效期限。每次消費(fèi)時(shí),
如果顧客出示這張卡片,則此次消費(fèi)就會(huì)與以前或以后的消費(fèi)相聯(lián)系起來。這種做法就是在
客戶端保持狀態(tài)。【卡上記錄所有信息,而店家只認(rèn)卡不認(rèn)人?!?/p>
■Session:發(fā)給顧客一張會(huì)員卡,除了卡號之外什么信息也不紀(jì)錄,每次消費(fèi)時(shí),如果顧客出
示該卡片,則店員在店里的紀(jì)錄本上找到這個(gè)卡號對應(yīng)的紀(jì)錄添加一些消費(fèi)信息。這種做法
就是在服務(wù)器端保持狀態(tài)。【只記用戶ID,而ID的詳細(xì)記錄放在店家的數(shù)據(jù)庫里;每次憑
ID檢索服務(wù)器的記錄。】
3、區(qū)別
■cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上(sessionid可以通過cookie保
存在客戶端,也可以使用URL重寫方式)。
■cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙,考慮到安全應(yīng)
當(dāng)使用session
■session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能,考慮到
減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE
■單個(gè)cookie在客戶端的限制是3K,就是說一個(gè)站點(diǎn)在客戶端存放的COOKIE不能3K。
■個(gè)人建議:將登陸信息等重要信息存放為SESSION;其他信息如需保留,可放在COOKIE中
24轉(zhuǎn)發(fā)和重定向的區(qū)別
?轉(zhuǎn)發(fā)的原理?重定向的原理
■在服務(wù)器端跳轉(zhuǎn),將同一個(gè)request進(jìn)行傳遞■客戶端根據(jù)服務(wù)器端返回的地址發(fā)送新的請求
■只有一個(gè)請求■(服務(wù)器端控制的)客戶端跳轉(zhuǎn)
■瀏覽器不知道轉(zhuǎn)發(fā)一Web組件】
轉(zhuǎn)發(fā)是在服務(wù)端直接做的事情,是對客戶端的同一個(gè)request進(jìn)行傳遞,瀏覽器并不知道。重定向是
由瀏覽器來做的事情。重定向時(shí),服務(wù)端返回一個(gè)response,里面包含了跳轉(zhuǎn)的地址,由瀏覽器獲
得后,自動(dòng)發(fā)送一個(gè)新request。轉(zhuǎn)發(fā)像呼叫轉(zhuǎn)移或者110報(bào)警中心,重定向似114查號臺(tái)。
?區(qū)別1:跳轉(zhuǎn)效率的不同
■轉(zhuǎn)發(fā)效率相對高
■重定向效率相對低
?區(qū)別2:實(shí)現(xiàn)語句不同
■轉(zhuǎn)發(fā)request.getRequestDispatcher("xxxx")forward(request,response);
■重定向response.sendRedirectf'xxxx")
?區(qū)別3:是否共有同一個(gè)request的數(shù)據(jù)
■轉(zhuǎn)發(fā)源組件與目標(biāo)組件共有同一個(gè)request數(shù)據(jù)
■重定向源組件與目標(biāo)組件不共有同一個(gè)request數(shù)據(jù)(可使用session共有數(shù)據(jù))
?區(qū)別4:瀏覽器URL地址的不同
■轉(zhuǎn)發(fā)后瀏覽器URL地址保持不變(源組件地址)
■重定向后瀏覽器URL地址改變?yōu)橹囟ㄏ蚝蟮牡刂罚繕?biāo)組件地址)
.區(qū)別5:"/"路徑的含義不同
■轉(zhuǎn)發(fā)時(shí)"/"代表當(dāng)前項(xiàng)目的根路徑
■重定向時(shí)代表當(dāng)前服務(wù)器的根路徑
?區(qū)別6:跳轉(zhuǎn)范圍的不同
■只能轉(zhuǎn)發(fā)到同一應(yīng)用中的URL(默認(rèn))
■可以重定向任何服務(wù)器、任何應(yīng)用的URL
?區(qū)別7:刷新是否導(dǎo)致重復(fù)提交
■轉(zhuǎn)發(fā)會(huì)導(dǎo)致重復(fù)提交(可以通過同步令牌解決)
■重定向不會(huì)導(dǎo)致重復(fù)提交
?區(qū)別8:是否經(jīng)過過濾器
■轉(zhuǎn)發(fā)不經(jīng)過過濾器(默認(rèn)情況)
■重定向經(jīng)過過濾器
25MVC模式及其優(yōu)缺點(diǎn)
用戶
視圖層J
VJSP[2:E果:
控制層CServletu
;4—業(yè)務(wù)
模型層MJavaBean
5JES?S?tlEF;
數(shù)據(jù)庫6:a陛IB展水幗觸網(wǎng)
一、MVC原理
MVC是一種程序開發(fā)設(shè)計(jì)模式,它實(shí)現(xiàn)了顯示模塊與功能模塊的分離。提高了程序的可維護(hù)性、可移
植性、可擴(kuò)展性與可重用性,降低了程序的開發(fā)難度。它主要分模型、視圖、控制器三層。
1、模型(model)它是應(yīng)用程序的主體部分,主要包括業(yè)務(wù)邏輯模塊和數(shù)據(jù)模塊。模型與數(shù)據(jù)格式無
關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重
用,所以減少了代碼的重復(fù)性
2、視圖(view)用戶與之交互的界面、在web中視圖■—般由jsp,html組成
3、控制器(controller)接收來自界面的請求并交給模型進(jìn)行處理在這個(gè)過程中控制器不做任何處理
只是起到了一個(gè)連接的作用
二、MVC的優(yōu)點(diǎn)
1、降低代碼耦合性。在MVC模式中,三個(gè)層各施其職,所以如果一旦哪一層的需求發(fā)生了變化,
就只需要更改相應(yīng)的層中的代碼而不會(huì)影響到其他層中的代碼。
2、有利于分工合作。在MVC模式中,由于按層把系統(tǒng)分開,那么就能更好的實(shí)現(xiàn)開發(fā)中的分工。
網(wǎng)頁設(shè)計(jì)人員可進(jìn)行開發(fā)視圖層中的JSP,而對業(yè)務(wù)熟悉的開發(fā)人員可開發(fā)業(yè)務(wù)層,而其他開發(fā)人員
可開發(fā)控制層。
3、有利于組件的重用。如控制層可獨(dú)立成一個(gè)能用的組件,表示層也可做成通用的操作界面??梢?/p>
為一個(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖。
三、MVC的不足之處
1,增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對于簡單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分
離,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過多的更新操作,降低運(yùn)行效率。
2、視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒
有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。
3.視圖對模型數(shù)據(jù)的低效率訪問。依據(jù)模型操作接11的不同,視圖可能需要多次調(diào)用才能獲得足夠
的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。
4、口前,一般高級的界面工具或構(gòu)造器不支持模式。改造這些工具以適應(yīng)MVC需要和建立分離的
部件的代價(jià)是很高的,從而造成MVC使用的困難。
26B/S和C/S的含義及其區(qū)別
C/S結(jié)構(gòu),即Client/server(客戶機(jī)/服務(wù)器)結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低
了系統(tǒng)的通訊開銷,可充分利用兩端硬件環(huán)境優(yōu)勢。早期軟件系統(tǒng)多以此作為首選設(shè)計(jì)標(biāo)準(zhǔn)。
B/S結(jié)構(gòu),即Browser/Server(瀏覽器/服務(wù)器)結(jié)構(gòu),是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的?種
變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前
端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),節(jié)約了開發(fā)成本,便于軟件維護(hù)。
區(qū)別
1、C/S是建立在局域網(wǎng)的基礎(chǔ)上的。B/S是建立在廣域網(wǎng)的基礎(chǔ)上的,但并不是說B/S結(jié)構(gòu)不能在局
域網(wǎng)上使用。
2、B/S業(yè)務(wù)擴(kuò)展簡單方便,通過增加頁面即可增加服務(wù)器功能。C/S的客戶端還需要安裝專用的客
戶端軟件,不利于擴(kuò)展。
3、B/S維護(hù)簡單方便。開發(fā)、維護(hù)等幾乎所有工作也都集中在服務(wù)器端,當(dāng)企業(yè)對網(wǎng)絡(luò)應(yīng)用進(jìn)行升
級時(shí),只需更新服務(wù)器端的軟件就可以,這減輕了異地用戶系統(tǒng)維護(hù)與升級的成本。.
4、B/S響應(yīng)速度不及C/S;
5、B/S用戶體驗(yàn)效果不是很理想
Java集合體系結(jié)構(gòu)(List、Set、Collection-kMap的區(qū)別和聯(lián)系)
-:|Produces:■Produces
IteratorJ■:Collection*Map
……蘆』yr-z—L
r
iAbstractMap?
-;Produces,L_
ListIterator',/????:List::Set
jSortedMap
IAbstractedlectiop-'1
一iSortedSet
五
TreeMap
iAbstractList?iAbstractset?
WeakHashMapHashtable
(Legacy)
HashSet
-U.__I___Utilities
VectorArrayListAbstractSequentialList?
(Legacy)
StackLinkedList
(Legacy)
ComparableIComparator:
Java容器的分類(簡略)
;Collection:-;Map;
A
「一一」1
????
I__£_?__L-fII
e
:_JsJ_::__?L_:|HashMap|「reeMa,
(」H[11:K'LinkedllashMap
|ArrayList|LinkedList||H[ashSe1|rreeSet|
LinkedHashSet
Collection接口存儲(chǔ)一組不唯一,無序的對象
List接口存儲(chǔ)一組不唯一,有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版家屬區(qū)整體改造裝修服務(wù)合同3篇
- 江蘇省南通市如皋市 2024-2025學(xué)年九年級上學(xué)期1月期末道德與法治試題(含答案)
- 二零二五年度企業(yè)并購合同法操作指南3篇
- 保健品批發(fā)商的社區(qū)健康宣傳效果評估考核試卷
- 家居布藝的智能化窗簾控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)考核試卷
- 二零二五年度造紙機(jī)械租賃施工合同2篇
- 2025年新能源車位租賃與維護(hù)保養(yǎng)一體化服務(wù)合同2篇
- 2025年新能源產(chǎn)品銷售業(yè)績達(dá)標(biāo)合同范本2篇
- 2025年信息安全技術(shù)協(xié)議
- 2025年度智能設(shè)備維修個(gè)人勞務(wù)合同模板3篇
- 我的家鄉(xiāng)瓊海
- (2025)專業(yè)技術(shù)人員繼續(xù)教育公需課題庫(附含答案)
- 《互聯(lián)網(wǎng)現(xiàn)狀和發(fā)展》課件
- 【MOOC】計(jì)算機(jī)組成原理-電子科技大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年上海健康醫(yī)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 2024年湖北省武漢市中考語文適應(yīng)性試卷
- 非新生兒破傷風(fēng)診療規(guī)范(2024年版)解讀
- EDIFIER漫步者S880使用說明書
- 皮膚惡性黑色素瘤-疾病研究白皮書
- 從心理學(xué)看現(xiàn)代家庭教育課件
- C語言程序設(shè)計(jì)PPT(第7版)高職完整全套教學(xué)課件
評論
0/150
提交評論