2023年Java框架面試題總結(jié)_第1頁(yè)
2023年Java框架面試題總結(jié)_第2頁(yè)
2023年Java框架面試題總結(jié)_第3頁(yè)
2023年Java框架面試題總結(jié)_第4頁(yè)
2023年Java框架面試題總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)介

目錄 Struts篇 41.Struts的工作流程 42.Struts的工作流程分解 43.Struts控制器組件的組成.和控制器的重要功能 44.Struts中的幾個(gè)關(guān)鍵對(duì)象的作用(說(shuō)說(shuō)幾個(gè)關(guān)鍵對(duì)象的作用) 45.Struts工作流程圖(用例圖) 56.說(shuō)說(shuō)MVC設(shè)計(jì)模式和它的優(yōu)點(diǎn) 57.說(shuō)說(shuō)struts是如何實(shí)現(xiàn)MVC的? 68.Struts優(yōu)點(diǎn)與缺陷 69.strust的Action是不是線程安全的?假如不是有什么方式可以保證Action的線程安 610.Tiles框架是什么? 611.struts1.x和struts2的區(qū)別 612.Struts的常用標(biāo)簽庫(kù)及用法 8Strutshtml標(biāo)簽庫(kù) 8Strutsbean標(biāo)簽庫(kù) 12StrutsLogic標(biāo)簽庫(kù) 1313、JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別? 15 Ajax篇 151. ajax是什么 152. ajax實(shí)現(xiàn)的原理 163. ajax框架的基本流程 164. dwr的實(shí)現(xiàn)原理. 165. ajax開(kāi)發(fā)環(huán)節(jié). 16 Spring篇 16一. 基礎(chǔ)知識(shí) 161. 對(duì)IOC的理解. 162. 依賴注入的三種實(shí)現(xiàn)形式? 173. Setter注入和構(gòu)造方法注入比較 184. 對(duì)AOP的理解,以及AOP在項(xiàng)目中是如何使用的? 185. AOP的概念和術(shù)語(yǔ) 196. Spring中有五中不同的告知: 197. Springbean的生命周期: 198. Bean的作用域 199. Spring自動(dòng)代理 2010. Spring事務(wù)特點(diǎn) 2011. 談?wù)凷pring事務(wù)的理解 2012. 編程式事務(wù)和聲明式事務(wù)如何選擇? 21二. Spring應(yīng)用 2113. spring中的BeanFactory與ApplicationContext的作用和區(qū)別? 2114. Spring里面applicationContext.xml文獻(xiàn)能不能改成其他文獻(xiàn)名? 2215. spring中commons-logging.jar的作用 2216. spring中讀取xml配置文獻(xiàn)、獲取bean的幾種方式 2217. Spring啟動(dòng)參數(shù)contextConfigLocation和ContextLoaderListener理解 2318. Spring框架在web容器是如何啟動(dòng)的? 25 Hibernate篇 251. Hibernate優(yōu)缺陷? 252. Hibernate工作原理及為什么要用? 263. Hibernate是如何延遲加載? 264. Hibernate中如何實(shí)現(xiàn)類之間的關(guān)系?(如:一對(duì)多、多對(duì)多的關(guān)系) 275. 說(shuō)下Hibernate的緩存機(jī)制 276. 什么樣的數(shù)據(jù)適合放到二級(jí)緩存中? 277. Hibernate的查詢方式 288. 如何優(yōu)化Hibernate? 289. 說(shuō)說(shuō)Hibernate中的update()和saveOrUpdate()的區(qū)別 2810. 說(shuō)說(shuō)Hibernate中的session的load()和get()的區(qū)別。 2811. 談?wù)凥ibernate中inverse的作用 2812. hibernate中對(duì)象的三種狀態(tài) 2913. 在數(shù)據(jù)庫(kù)中條件查詢速度很慢的時(shí)候,如何優(yōu)化? 2914. 在hibernate中進(jìn)行多表查詢,每個(gè)表中各取幾個(gè)字段,也就是說(shuō)查詢出來(lái)的結(jié)果集并沒(méi)有一個(gè)實(shí)體類與之相應(yīng),如何解決這個(gè)問(wèn)題? 29 iBatis篇 301. iBatis的優(yōu)缺陷? 302. iBatis與Hibernate區(qū)別(比較)? 303. iBatis與傳統(tǒng)JDBC比較 314. Hibernate和iBatis的映射關(guān)系 315. iBatis動(dòng)態(tài)標(biāo)簽有哪些? 316. iBatis中使用like‘%#filedName#%’時(shí),有什么問(wèn)題? 327. iBatis中#與$的區(qū)別? 32 框架問(wèn)題 321.SSH框架的配置文獻(xiàn)加載順序. 322.Spring框架在web容器是如何啟動(dòng)的? 333.Webservice+spring2.0+iBatis項(xiàng)目的加載順序. 334. appfuse框架機(jī)制. 335. iBatis與Hibernate如何選擇? 33參考:iBatis與Hibernate比較。 33Struts篇1.Struts的工作流程當(dāng)客戶端向?yàn)g覽器發(fā)送HTTP請(qǐng)求時(shí),所有瀏覽器請(qǐng)求都被提交給ActionServlet解決。假如用戶提交表單,則會(huì)將表單中的數(shù)據(jù)放入到ActionForm中。ActionServlet根據(jù)struts_config.xml文獻(xiàn)中預(yù)先配置好的設(shè)立選擇將請(qǐng)求轉(zhuǎn)發(fā)到哪個(gè)action對(duì)象,action對(duì)象從actionForm對(duì)象中獲取數(shù)據(jù),但后調(diào)用業(yè)務(wù)邏輯組件,完畢業(yè)務(wù)功能。2.Struts的工作流程分解Web應(yīng)用假如采用struts框架,在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載并初始化ActionServlet,ActionServlet從struts_config.xml文獻(xiàn)中讀取配置信息,基本執(zhí)行環(huán)節(jié)如下:所有瀏覽器請(qǐng)求都被提交給ActionServlet解決ActionServlet根據(jù)struts_config.xml文獻(xiàn)中預(yù)先配置好的設(shè)立,選擇應(yīng)當(dāng)將請(qǐng)求轉(zhuǎn)發(fā)到哪個(gè)action對(duì)象.當(dāng)用戶提交表單時(shí),一個(gè)配置好的ActionForm對(duì)象將被創(chuàng)建,并被填入表單中的相稱數(shù)據(jù).Action對(duì)象從ActionForm對(duì)象中獲取數(shù)據(jù).Action對(duì)象調(diào)用業(yè)務(wù)邏輯組件完畢業(yè)務(wù)功能.3.Struts控制器組件的組成.和控制器的重要功能 Struts控制器組件重要涉及:ActionServlet組件:充當(dāng)Struts框架的中央控制器.RequestRrocessor組件:充當(dāng)每個(gè)子應(yīng)用模塊的請(qǐng)求解決器.Action組件:負(fù)責(zé)解決一項(xiàng)具體的業(yè)務(wù).Struts控制器組件重要完畢以下任務(wù):接受用戶請(qǐng)求.根據(jù)用戶請(qǐng)求,調(diào)用合適的模型組件來(lái)執(zhí)行相應(yīng)的業(yè)務(wù)邏輯.獲取業(yè)務(wù)邏輯執(zhí)行結(jié)果.根據(jù)當(dāng)前狀態(tài)以及業(yè)務(wù)邏輯執(zhí)行結(jié)果,選擇合適的視圖組件返回給用戶.4.Struts中的幾個(gè)關(guān)鍵對(duì)象的作用(說(shuō)說(shuō)幾個(gè)關(guān)鍵對(duì)象的作用)ActionServlet類控制導(dǎo)航流.ActionServlet根據(jù)URI來(lái)決定哪個(gè)Action類被用于解決請(qǐng)求,Action可以校驗(yàn)輸入,并訪問(wèn)業(yè)務(wù)層以便從數(shù)據(jù)庫(kù)檢索信息.Action需要知道頁(yè)面提交了哪些內(nèi)容,所以由ActionServlet根據(jù)請(qǐng)求URI來(lái)決定將請(qǐng)求參數(shù)綁定到哪個(gè)ActionForm中并傳入Action.Action在完畢業(yè)務(wù)邏輯后,返回一個(gè)ActionForward對(duì)象,ActionServlet根據(jù)ActionForward對(duì)象中的途徑來(lái)調(diào)用頁(yè)面完畢響應(yīng).Struts將這些信息綁定在一個(gè)ActionMapping對(duì)象中,一個(gè)ActionMapping相應(yīng)一個(gè)請(qǐng)求URI,當(dāng)請(qǐng)求途徑到達(dá)的時(shí)候,ActionServlet就會(huì)查詢ActionMapping對(duì)象,ActionMapping對(duì)象將告訴ActionServlet哪個(gè)Action類會(huì)被調(diào)用,哪個(gè)ActionForm類被用于傳遞頁(yè)面數(shù)據(jù)以及哪些ActionForward將被用于轉(zhuǎn)向.有關(guān)Action,ActionForm,ActionForward等信息,通過(guò)struts-config.xml配置文獻(xiàn)來(lái)定義.5.Struts工作流程圖(用例圖)注:Servlet容器在啟動(dòng)時(shí),或者用戶初次請(qǐng)求ActionServlet時(shí)加載ActionServlet類.6.說(shuō)說(shuō)MVC設(shè)計(jì)模式和它的優(yōu)點(diǎn)MVC是一種設(shè)計(jì)模式,.它強(qiáng)制性的把應(yīng)用程序的輸入,解決和輸出分開(kāi).MVC把應(yīng)用程序提成三個(gè)核心模塊:模型(Model),視圖(View)和控制器(Controller).他們分別解決不同的任務(wù).視圖是用戶看到并與之交互的界面.視圖向用戶顯示相關(guān)的數(shù)據(jù),并能接受用戶的輸入數(shù)據(jù),但是它不進(jìn)行任何實(shí)際的業(yè)務(wù)解決.模型是應(yīng)用程序的主體部分.模型表達(dá)業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯.一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù).由于同一個(gè)模型可以被多個(gè)視圖重用,所以提高了應(yīng)用的重用性.控制器接受用戶的輸入并調(diào)用模型和視圖去完畢任務(wù).MVC的解決邏輯如下:一方面控制器接受用戶請(qǐng)求,并決定應(yīng)當(dāng)調(diào)用哪個(gè)模型來(lái)進(jìn)行解決,然后模型根據(jù)用戶請(qǐng)求進(jìn)行相應(yīng)的業(yè)務(wù)邏輯解決,并返回?cái)?shù)據(jù).最后控制器調(diào)用相應(yīng)的視圖來(lái)格式化模型返回的詩(shī)句,并通過(guò)視圖呈現(xiàn)給用戶.MVC的優(yōu)點(diǎn):在MVC設(shè)計(jì)模式中,模型響應(yīng)用戶請(qǐng)求并返回響應(yīng)數(shù)據(jù),視圖負(fù)責(zé)格式化數(shù)據(jù)并把它們呈現(xiàn)給用戶,業(yè)務(wù)邏輯和表達(dá)層分離,同一個(gè)模型可以被不同的視圖重用,所以大大提高了代碼的可重用性.MVC的三個(gè)模塊互相獨(dú)立,改變其中的一個(gè)不會(huì)影響其他兩個(gè),所以根據(jù)這種設(shè)計(jì)思想能構(gòu)造良好的松耦合的構(gòu)件.控制器可以用來(lái)連接不同的模型和視圖去完畢用戶的需求,也可認(rèn)為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段.給定一些可重用的模型和視圖,控制器可以根據(jù)用戶的需求選擇適當(dāng)?shù)哪P瓦M(jìn)行解決,然后選擇適當(dāng)?shù)囊晥D將結(jié)果顯示給用戶.7.說(shuō)說(shuō)struts是如何實(shí)現(xiàn)MVC的?Struts采用JSP作為MVC的視圖,控制器由ActionServlet和Action類來(lái)實(shí)現(xiàn).控制器負(fù)責(zé)視圖和模型之間的交互.模型由實(shí)現(xiàn)業(yè)務(wù)邏輯的JavaBean或EJB組件構(gòu)成,然后說(shuō)說(shuō)Struts的工作流程.8.Struts優(yōu)點(diǎn)與缺陷

Struts是開(kāi)源軟件,使開(kāi)發(fā)者能更進(jìn)一步的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。

Struts優(yōu)點(diǎn):業(yè)界"標(biāo)準(zhǔn)"(很多成功案例),學(xué)習(xí)資源豐富。

Struts的優(yōu)點(diǎn)重要集中體現(xiàn)在兩個(gè)方面:Taglib和頁(yè)面導(dǎo)航。

a、運(yùn)用Struts提供的taglib可以大大節(jié)約開(kāi)發(fā)時(shí)間。

b、維護(hù)擴(kuò)展比較方便。通過(guò)一個(gè)配置文獻(xiàn),即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處。

c、表現(xiàn)與邏輯分離

d、表單驗(yàn)證解決了請(qǐng)求數(shù)據(jù)的驗(yàn)證問(wèn)題,增強(qiáng)了系統(tǒng)健壯性。

e、便于團(tuán)隊(duì)開(kāi)發(fā)

Struts缺陷:a、大量的使用標(biāo)簽,對(duì)于初學(xué)者難度較大。

b、ActionForms使用不便、無(wú)法進(jìn)行單元測(cè)試(StrutsTestCase只能用于集成)9.strust的Action是不是線程安全的?假如不是有什么方式可以保證Action的線程安全?假如是,說(shuō)明因素不是.為了保證action的線程安全,最佳的辦法就是不要在action里定義實(shí)列變量.10.Tiles框架是什么?Tiles框架為創(chuàng)建Web頁(yè)面提供了一種模板機(jī)制,它能將網(wǎng)頁(yè)的布局和內(nèi)容分離。11.struts1.x和struts2的區(qū)別本文將從Struts1和Struts2的各個(gè)方面進(jìn)行比較特性Struts1Struts2Action類Struts1的action需要去繼承一個(gè)抽象基類。一個(gè)普遍問(wèn)題就是Struts1是面向抽象類編程來(lái)代替接口編程Struts2的action可以實(shí)現(xiàn)一個(gè)Action接口,也可以同時(shí)實(shí)現(xiàn)一些其他的接口來(lái)添置一些附加的,常用的服務(wù)。Struts2提供一個(gè)基類ActionSupport實(shí)現(xiàn)了一些常用的接口。雖然Action接口不是必須的。任何附帶execute方法的POJO對(duì)象都可以作為Struts2的action對(duì)象。線程模型Struts1的action是單例的并且必須是線程安全的,由于該類會(huì)只有唯一一個(gè)引用來(lái)為action解決所有的請(qǐng)求。單例策略會(huì)限制Struts1的action的功能以及需要擴(kuò)展的額外的功能(ThesingletonstrategyplacesrestrictionsonwhatcanbedonewithStruts1Actionsandrequiresextracaretodevelop)。Struts1的action必須是線程安全的并且是同步的。Struts2的Action對(duì)象是針對(duì)每一個(gè)請(qǐng)求的,所以自然也就不存在線程安全問(wèn)題了。(事實(shí)上,)Servlet的依賴Struts1的Action依賴于ServletAPI,由于當(dāng)Action被調(diào)用的時(shí)候HttpServletRequest和HttpServletResponse對(duì)象是通過(guò)execute方法進(jìn)行解決的。Struts2的Action和容器的連接并不緊密。通常servlet上下文被描繪成簡(jiǎn)樸的Map映射,允許Action被單獨(dú)測(cè)試。當(dāng)然,假如需要的話Struts2的Action也可以通過(guò)訪問(wèn)初始的request和response來(lái)完畢一些功能。然而,其他的一些架構(gòu)元素導(dǎo)致減少或者刪除了直接訪問(wèn)request和response的需求。易測(cè)試性測(cè)試Struts1的Action有一個(gè)大障礙就是execute方法是直接暴露于servletAPI的。Struts2的Action可以很容易的通過(guò)設(shè)立屬性調(diào)用方法來(lái)進(jìn)行測(cè)試。當(dāng)然依賴注入的支持也使得測(cè)試變得簡(jiǎn)樸。輸入解決Struts1使用一個(gè)ActionForm對(duì)象來(lái)獲取用戶的輸入。和action同樣,所有的ActionForm都必須繼承自一個(gè)基類。由于其他的javaBean不能被用作ActionForm,開(kāi)發(fā)者通常要寫(xiě)一些多余的類來(lái)獲取用戶輸入。DynaBean可以被用做生成ActionForm類的一個(gè)選擇,但是開(kāi)發(fā)者需要對(duì)現(xiàn)有的javaBean進(jìn)行重寫(xiě)。Struts2使用Action屬性作為輸入屬性,除掉了對(duì)于輸入對(duì)象的需求。輸入屬性可以是一個(gè)擁有他自己的屬性的對(duì)象。Action屬性是通過(guò)標(biāo)簽和web頁(yè)面交互。Struts2也支持ActionForm模型,就是POJO的Form對(duì)象和POJO的Action。多數(shù)的對(duì)象類型,涉及商業(yè)邏輯對(duì)象和領(lǐng)域?qū)ο蠖伎梢宰鳛檩斎?輸入對(duì)象。模式驅(qū)動(dòng)特性簡(jiǎn)化了標(biāo)簽和POJO輸入對(duì)象的關(guān)系。表達(dá)式語(yǔ)言Struts1和JSTL結(jié)合,所以他可以使用JSTL的EL。Struts2也支持JSTL,但是這個(gè)框架也支持更加強(qiáng)大的表達(dá)式語(yǔ)言O(shè)GNL表現(xiàn)層和類型值的綁定Struts1使用標(biāo)準(zhǔn)的JSP機(jī)制將對(duì)象綁定到pagecontext來(lái)進(jìn)行訪問(wèn)。Struts2使用”ValueStack”技術(shù),所以標(biāo)簽不用將視圖和表現(xiàn)的對(duì)象結(jié)合就可以得到值.ValueStack策略允許通過(guò)一系列也許具有相同屬性名字但是不同屬性類型的的類型來(lái)完畢視圖的重用,類型轉(zhuǎn)換Struts1的ActionForm通常都是String類型。Struts1通過(guò)Commons-Beanutils實(shí)現(xiàn)類型轉(zhuǎn)換。Struts2使用OGNL實(shí)現(xiàn)類型轉(zhuǎn)換,框架包含了對(duì)基礎(chǔ)和公共類型的轉(zhuǎn)換器。驗(yàn)證Struts1支持通過(guò)ActionForm中的validate方法實(shí)現(xiàn)手工驗(yàn)證。也可以通過(guò)擴(kuò)展通用的驗(yàn)證框架進(jìn)行驗(yàn)證。對(duì)于同一個(gè)類可以有不同的驗(yàn)證,但是不能關(guān)聯(lián)到子對(duì)象的驗(yàn)證。Struts2也支持通過(guò)validate方法進(jìn)行手工驗(yàn)證以及Xwork驗(yàn)證框架進(jìn)行驗(yàn)證。Xwork驗(yàn)證框架支持將驗(yàn)證鏈接到子屬性,子屬性使用了為屬性類型和驗(yàn)證上下文定義的驗(yàn)證。Action執(zhí)行的控制Struts1支持為每一個(gè)模塊分派請(qǐng)求解決(生命周期),但是一個(gè)模塊中的所有Action必須分享相同的生命周期。Struts2支持通過(guò)攔截器棧為每個(gè)Action創(chuàng)建不同的生命周期。通常對(duì)于不同的Action根據(jù)需要都要有相應(yīng)的棧被創(chuàng)建和使用。12.Struts的常用標(biāo)簽庫(kù)及用法 常見(jiàn)的struts標(biāo)簽庫(kù)有strutshtml標(biāo)簽庫(kù),strutsbean標(biāo)簽庫(kù),strutsLogic標(biāo)簽庫(kù),StrutsTemplate標(biāo)簽庫(kù),StrutsNested標(biāo)簽庫(kù).HTML標(biāo)簽

用來(lái)創(chuàng)建可以和Struts框架和其他相應(yīng)的HTML標(biāo)簽交互的HTML輸入表單

Bean標(biāo)簽

在訪問(wèn)JavaBeans及其屬性,以及定義一個(gè)新的bean時(shí)使用

Logic標(biāo)簽

管理?xiàng)l件產(chǎn)生的輸出和對(duì)象集產(chǎn)生的循環(huán)

Template標(biāo)簽

隨著Tiles框架包的出現(xiàn),此標(biāo)記已開(kāi)始減少使用

Nested標(biāo)簽

增強(qiáng)對(duì)其他的Struts標(biāo)簽的嵌套使用的能力以下分別講解struts標(biāo)簽庫(kù)的用法.Strutshtml標(biāo)簽庫(kù)<html:form>:生成html<form>標(biāo)簽 用法:<html:formaction=”checkAction.do”></html:form> <html:form>標(biāo)簽的action屬性用來(lái)指定當(dāng)前用戶提交表單后,解決用戶請(qǐng)求的組件.<html:text>生成html<inputtype=”text”>標(biāo)簽 該標(biāo)簽在表單上創(chuàng)建HTML文本框字段. 用法:<html:textproperty=”userName”> property:指定字段的名字<html:hidden>生成html<inputtype=”hidden”>標(biāo)簽 這個(gè)標(biāo)簽在表單上生成隱藏字段.隱藏字段用于在表單上存放不希望讓用戶看到或不允許修改的信息.<html:submit>生成html<inputtype=”submit”>標(biāo)簽 <html:submit>標(biāo)簽生成表單的提交按鈕用法:<html:submit>submit<html:submit><html:reset>生成html<formtype=”reset”>標(biāo)簽 <html:reset>標(biāo)簽生成表單復(fù)位按鈕用法:<html:reset>reset</html:reset><html:cancel>在表單上生成取消按鈕 <html:cancel>標(biāo)簽用于生成表單取消按鈕 用法:<html:cancel>cancel</html:cancel><html:radio>:生成html<inputtype=”radio”>元素 <html:radio>用于生成單選按鈕 用法:<html:radioproperty=”sex”value=”1”>男</html:radio> <html:radioproperty=”sex”value=”0”>女</html:radio> 單選按鈕需要保證property同樣,只是value值不同樣就可以了.<html:multibox>:生成復(fù)選框<inputtype=”checkBox”> 用法:<html:multiboxproperty="fav"value="1"></html:multibox>籃球 <html:multiboxproperty="fav"value="2"></html:multibox>足球 <html:multiboxproperty="fav"value="3"></html:multibox>乒乓球 復(fù)選框按鈕需要保證property同樣,value的值不同就可以了.還需要注意的是復(fù)選框的值需要寫(xiě)在標(biāo)簽按鈕的最后面的. 假如應(yīng)用中有多個(gè)Checkbox,并且希望ActionFromBean中用單個(gè)數(shù)組表達(dá),都可以采用<html:multibox>.<html:multibox>的使用方法如下:在ActionForm中定義一個(gè)數(shù)組,用來(lái)存放checkBox的值,privateStringstrArray[]=newString[0];publicStringgetStrArray(){ returnthis.strArray;}publicvoidSetStrArray(StringstrArray){ this.StrArray=strArray;}在表單中加入<html:multibox>元素,通過(guò)設(shè)立property=”strArray”來(lái)把它和ActionFromBean關(guān)聯(lián).對(duì)于每個(gè)<html:multibox>元素,設(shè)立它的初始值.<html:multiboxproperty="strArray"value="1"></html:multibox>value1<html:select>下拉列表用于生成html<select>元素它可以在表單上創(chuàng)建下拉列表和多選列表用法:<html:selectproperty=”colors”size=”7”multibox=”false”> <html:optionvalue=”1”>value1</html:option> <html:optionvalue=”2”>value2</html:option> <html:optionvalue=”3”>value3</html:option> </html:select>屬性說(shuō)明:size:指定每次在網(wǎng)頁(yè)上顯示的可選項(xiàng)的數(shù)目.Multibox:指定是否支持多項(xiàng)選擇,假如設(shè)立為true,就表達(dá)多選列表.支持多項(xiàng)選擇;否則表達(dá)下拉列表.只支持單項(xiàng)選擇,默認(rèn)為falseProperty屬性:與actionFrom中的某個(gè)屬性相相應(yīng).這個(gè)屬性用來(lái)存放用戶在列表上選中的選項(xiàng)的值.<html:file>標(biāo)簽生成html<inputtype=”file”>元素,提供從html表單中上傳文獻(xiàn)的功能.<html:file>標(biāo)簽可以方便的實(shí)現(xiàn)文獻(xiàn)上傳的功能.樣列代碼如下:<html:formaction="/upload.do"method=”post”enctype="multipart/form-data"> <html:fileproperty="file"/></br> <html:submit>提交</html:submit></html:form>使用<html:file>標(biāo)簽要注意以下幾點(diǎn):<html:file>標(biāo)簽必須嵌套在<html:form>標(biāo)簽中<html:form>標(biāo)簽的method屬性必須設(shè)立為post<html:form>標(biāo)簽的編碼類型emctype屬性必須設(shè)立為”multipart/form-data”<html:file>標(biāo)簽必須設(shè)立property屬性,這個(gè)屬性和ActionFromBean中的FormFile類型的屬性相應(yīng).在ActiomForm中設(shè)立FormFile屬性:在actionForm中設(shè)立一個(gè)名為file的屬性,這個(gè)屬性必須為org.apache.struts.upload.FormFile類型.代碼如下:privateFormFilefile;publicFormFilegetFile(){ returnthis.file;}publicvoidsetFile(FormFilefile){ this.file=file}上傳下載的例子具體參見(jiàn)(My_Java\E實(shí)例\小例子\upDownFile)<html:errors>標(biāo)簽:用于輸犯錯(cuò)誤消息. <html:errors>標(biāo)簽可以放在網(wǎng)頁(yè)的任何地方,既可以位于HTML標(biāo)簽內(nèi),也可以位于HTML標(biāo)簽外,<html:errors>標(biāo)簽輸出的錯(cuò)誤消息和它在網(wǎng)頁(yè)上的位置有關(guān).<html:errors>標(biāo)簽具有以下重要的屬性:name:指定ActionMessage對(duì)象存放在request或sessios范圍內(nèi)的屬性key.標(biāo)簽解決類將根據(jù)這一屬性的key來(lái)檢索request或session范圍的ActionMessage對(duì)象.默認(rèn)值為Globals.ERROR_KEY.Property:指定消息的屬性.假如此項(xiàng)沒(méi)有設(shè)立,將顯示ActionMessages對(duì)象中的所有的ActionMessage.Bundle:指定ResourceBundle(資源包),假如此項(xiàng)沒(méi)有設(shè)立.將從應(yīng)用默認(rèn)的ResourceBundle中獲取消息文本.[關(guān)于<html:errors>標(biāo)簽的用法詳見(jiàn):精通strutsp326_p328].錯(cuò)誤消息的來(lái)源<html:errors>標(biāo)簽在request或session范圍內(nèi)尋找ActionMessages(或其子類ActionErrors)集合對(duì)象.在從ActionMessages集合對(duì)象讀取ActionMessage對(duì)象,把ActionMessage包含的消息文本顯示到網(wǎng)頁(yè)上..在ActionFormBean和Action類中都可以生成ActionMessages對(duì)象.ActionFormBean的validate()方法執(zhí)行表單驗(yàn)證,返回ActionErrors對(duì)象,Struts控制器組件RequestProcessor(請(qǐng)求解決器)然后把ActionErrors對(duì)象存放在request范圍內(nèi),存放時(shí)的屬性key為Globals.ERROR_KEY.以下是HtmlErrorForm的validate()方法:publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest){ ActionErrorserrors=newActionErrors(); //假如復(fù)選筐被選中了,顯示錯(cuò)誤消息 If(this,getCheckBox1()){Errors.add(ActionMessages.Global_MESSAGE,.newActionMessage(“error.global.fromform”));Errors.add(“checkbox1”,newActionMessage(“error.checkbox”));}retrunerrors;}在action類的execute()方法中可以進(jìn)行數(shù)據(jù)邏輯驗(yàn)證,假如驗(yàn)證失敗,將生成ActionMessages對(duì)象.以下是helloapp應(yīng)用的LogonAction的execute()方法;publicActionForwardexecute( ActionMappingmapping, ActionFormform, HttpServletRequestrequest, HttpServletResponseresponse){ ActionMessageserrors=newActionMessages(); StringuserName=(String)((HelloForm)form).getUserName(); StringbadUserName=”Monster”; If(userName.equalsIgnoreCase(badUserName)){ Errors.add(“userName”,newActionMessage(“hello.don’t.talk.to.monster”,badUserName)); SaveErrors(request,errors); Return(newActionForward(mapping.getInput()));} }以上代碼先創(chuàng)建了一個(gè)ActionMessages對(duì)象,它用來(lái)存放ActionMessage對(duì)象,最后調(diào)用Action基類的saveErrors()方法,saveErrors()方法把ActionMessages對(duì)象保存在request范圍內(nèi).<html:message>標(biāo)簽:用于顯示正常消息的代碼如下:<html:messagesid=”message”message=”true”> <td><bean:writename=”message”/></td></html:messages><html:messages>標(biāo)簽有以下一些重要屬性:name:指定actionMessages對(duì)象存放在request或session范圍內(nèi)的key.,標(biāo)簽解決類將根據(jù)這一屬性key來(lái)檢索request或session范圍的ActionMessages對(duì)象.Message屬性:指定消息的來(lái)源.Id屬性:用來(lái)命名從消息集合中檢索出的每個(gè)ActionMessage對(duì)象.它和<bean:write>標(biāo)簽的name屬性匹配.Strutsbean標(biāo)簽庫(kù)<bean:message>標(biāo)簽用于輸出ResourceBundle種的一條消息.<bean:message>標(biāo)簽的bundle屬性指定ResourceBundle它和struts配置文獻(xiàn)的<message-resource>元素的key屬性匹配.假如沒(méi)有設(shè)立bundle屬性,就采用默認(rèn)的ResourceBundle.<bean:message>標(biāo)簽的key屬性直接指定消息key.Bundle屬性指明資源文獻(xiàn)的struts-config.xml文獻(xiàn)種的配置的key值.例如:<bean:messagebundle=”special”key=”hello”>(具體參照:精通strutsp339)<bean:write>標(biāo)簽<bean:write>標(biāo)簽用于在網(wǎng)頁(yè)上輸出某個(gè)Bean或它的屬性的內(nèi)容.<bean:write>標(biāo)簽可以輸出單個(gè)字符串,或責(zé)一個(gè)對(duì)象的某個(gè)屬性,或責(zé)通過(guò)迭代器遍歷集合的所有值<bean:write>標(biāo)簽的name屬性指定已經(jīng)存在的變量.例如:在action中得到一個(gè)字符串的值,然后在頁(yè)面上顯示出來(lái) //得到定單狀態(tài)(action中) StringorderState=orderService.getOrderState(userOrderId); request.setAttribute("orderState",orderState); //在界面上顯示為(界面中) <bean:writename="orderState"/>假如希望輸出Bean的某個(gè)屬性值,應(yīng)當(dāng)同時(shí)設(shè)立<bean:write>標(biāo)簽的name屬性和property屬性.Property屬性指定Bean的屬性.例如: //得到當(dāng)前定單的購(gòu)貨人信息 UserVOuVO=orderService.getUserbyOrderId(userOrderId); request.setAttribute("userVO",uVO); //在頁(yè)面上顯示購(gòu)貨人的信息 <tablewidth="96%"height="80"cellpadding="0"cellspacing="0"><tr><tdalign="right"width="20%">購(gòu)貨人姓名:</td><td><bean:writename="userVO"property="userName"/></td><tdwidth="20%"> </td><tdalign="right"width="20%">聯(lián)系電話:</td><td><bean:writename="userVO"property="userTelephone"/></td></tr></table>根據(jù)迭代器標(biāo)簽顯示集合的所有內(nèi)容 //得到當(dāng)前定單的所有商品的信息 Listlist=orderService.getWareByOrderId(userOrderId); request.setAttribute("wareList",list); //根據(jù)迭代器標(biāo)簽顯示所有內(nèi)容(界面層)<logic:iterateid="ware"name="wareList"><tr><tdwidth="14%"><bean:writename="ware"property="userOrderId"/></td><tdwidth="14%"><bean:writename="ware"property="wareId"/></td><tdwidth="15%"><bean:writename="ware"property="name"/></td><tdwidth="14%"><bean:writename="ware"property="typeName"/></td></tr></logic:iterate>StrutsLogic標(biāo)簽庫(kù)<logic:match>:判斷變量中是否包含指定的常量字符串<logic:notMatch>:判斷變量中是否不包含指定變量的類<logic:empty>和<logic:notEmpty>標(biāo)簽<logic:empty>和<logic:notEmpty>標(biāo)簽判斷指定變量是否為空字符串.例子:以下代碼先定義一個(gè)字符串變量emptyString,它是空字符串.接下來(lái)<logic:empty>標(biāo)簽判斷emptyString變量是否為空字符串.其判斷結(jié)果為true..因此將執(zhí)行標(biāo)簽主體的內(nèi)容.<% request.setAttribute(“emptyString”,””);%><logic:emptyname=”emptyString”> thevariablenamedemptyStringisempty!</logic:empty><logic:iterate>標(biāo)簽是Logic標(biāo)簽中最復(fù)雜的標(biāo)簽.也是用途最廣的一個(gè)標(biāo)簽.它可以在一個(gè)循環(huán)中遍歷數(shù)組,Collection,Enumeration,Iterator或Map中的所有元素.一:遍歷集合 <logic:iterate>的name屬性指定需要進(jìn)行遍歷的集合對(duì)象.它每次從集合中檢索出一個(gè)元素,然后把它存放在page范圍內(nèi).并以id屬性指定的字符串來(lái)命名這個(gè)元素.例如:<% Vectoranimals=newVertor(); animals.addElement(“Dog”); animals.addElement(“Cat”); animals.addElement(“Bird”); animals.addElement(“Chick”); Request.setAttibute(“Animals”,animals);%> <logic:iterateid=”element”name=”Animals”> <bean:writename=”element”></logic:iterate><logic:iterate>標(biāo)簽的length屬性指定需要遍歷的元素的數(shù)目,假如沒(méi)有設(shè)立length屬性,就遍歷集合中的所有元素.offset屬性指定開(kāi)始遍歷的起始位置,默認(rèn)值為”0”<logic:iterateid=”ilement”indexId=”index”name=”Animals”offset=”1”length=”2 <bean:writename=”index”>.<bean:writename=”element”></br></logic:iterate>以上代碼輸出的內(nèi)容為:CatBird設(shè)立被遍歷的變量設(shè)立name屬性,name屬性指定需要遍歷的集合或map.例如:<logic:iteratename=”Animals”id=”element”> <bean:writename=”element”/><br/></logic>設(shè)立name屬性和property屬性,name屬性指定一個(gè)javaBean,property屬性指定javaBean的一個(gè)屬性.這個(gè)屬性為需要遍歷的集合或map.例如:<logic:iterateid=”element”name=”Aninals”indexId=”ind”> <bean:writename=”ind”>.<bean:writename=”element”property=”key”><br/> <logic:iterateid=”elementValue”name=”element”property=”value”length=”3”offset=”1 <bean:writename=”elementValue”> </logic:iterate></logic:iterate>設(shè)立collection屬性,collection屬性指定一個(gè)運(yùn)營(yíng)時(shí)表達(dá)式,表達(dá)式的運(yùn)算結(jié)果為需要遍歷的集合或map.例如:<logic:iterateid=”header”collection=”<%=request.getHeaderNames%>”> <bean:writename=”header”/><br/></logic:iterate>13、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.jsp"flush="true"/>它總是會(huì)檢查所含文獻(xiàn)中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數(shù)。靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會(huì)檢查所含文獻(xiàn)的變化,合用于包含靜態(tài)頁(yè)面<%@includefile="included.htm"%>Ajax篇ajax是什么Ajax是AsynchronousJavaScriptandXML(以及DHTML等)的縮寫(xiě)。ajax不是一項(xiàng)新技術(shù),只是多種技術(shù)的綜合,或者是設(shè)計(jì)方式.涉及javascript,xhtml和css,dom,xml和XSTL,xmlHttpRequest等技術(shù).ajax實(shí)現(xiàn)的原理 ajax采用異步傳輸方式,用戶觸發(fā)事件和向服務(wù)器發(fā)起請(qǐng)求是在一個(gè)線程上.Ajax重要是通過(guò)XMLHTTPRequest對(duì)象調(diào)用服務(wù)端方法,然后將服務(wù)端返回的數(shù)據(jù)顯示在客戶端.ajax框架的基本流程對(duì)象初始化發(fā)送請(qǐng)求服務(wù)器接受服務(wù)器返回--.>客戶端接受修改客戶端頁(yè)面內(nèi)容。dwr的實(shí)現(xiàn)原理.Dwr是ajax的開(kāi)源框架。dwr包含兩個(gè)重要部分:其一是運(yùn)營(yíng)在瀏覽器客戶端的javascript,這部分被用來(lái)與服務(wù)端通信,并更新頁(yè)面內(nèi)容;其二是運(yùn)營(yíng)在服務(wù)器端的javaservlet,這部分用來(lái)解決請(qǐng)求將響應(yīng)結(jié)構(gòu)發(fā)送給瀏覽器.ajax開(kāi)發(fā)環(huán)節(jié).初始化xmlHttpRequest對(duì)象.設(shè)立xmlHttpRequest對(duì)象的onreadystatechange屬性,指定服務(wù)器返回響應(yīng)數(shù)據(jù)時(shí)要調(diào)用的回調(diào)函數(shù).即指定相應(yīng)解決函數(shù).調(diào)用xmlHttpRequest對(duì)象的open方法創(chuàng)建http請(qǐng)求.調(diào)用xmlHttpRequest對(duì)象的setResourceHeader等方法,設(shè)立必要的http請(qǐng)求頭信息.調(diào)用xmlHttpRequest對(duì)象的send方法,發(fā)送之前創(chuàng)建的http請(qǐng)求.根據(jù)xmlHttpRequest對(duì)象的open方法參數(shù),決定等待或者不等到服務(wù)器返回響應(yīng)數(shù)據(jù),假如服務(wù)器返回響應(yīng)數(shù)據(jù),則將控制權(quán)交給之前設(shè)立的回調(diào)函數(shù).Spring篇基礎(chǔ)知識(shí)對(duì)IOC的理解.IOC的全稱是:InversionofControl(即:控制反轉(zhuǎn)).理解:在傳統(tǒng)的應(yīng)用程序中,控制權(quán)在應(yīng)用程序自身,程序的控制流程完全由開(kāi)發(fā)者控制。在IOC容器中,控制權(quán)發(fā)生了反轉(zhuǎn):從應(yīng)用程序轉(zhuǎn)移到了IOC容器。組件不再由應(yīng)用程序負(fù)責(zé)創(chuàng)建和配置,而是由IOC容器負(fù)責(zé),應(yīng)用程序只需要直接使用已經(jīng)創(chuàng)建并配置好的組件。為了讓組件能在IOC容器中被“裝配”出來(lái),需要某種“注入”的機(jī)制,才干將一種組件“注入”到另一種組件中。簡(jiǎn)樸來(lái)說(shuō),依賴注入解決了最重要的問(wèn)題:將組件的配置與使用相分離,并且由IoC容器負(fù)責(zé)管理組件的生命周期。簡(jiǎn)樸來(lái)說(shuō):控制反轉(zhuǎn)就是由容器控制程序之間的(依賴)關(guān)系.依賴注入的三種實(shí)現(xiàn)形式?接口注入(InterfaceInjection)說(shuō)明:通過(guò)實(shí)現(xiàn)一個(gè)接口來(lái)實(shí)現(xiàn)對(duì)依賴對(duì)象的注入.設(shè)值方法注入(Setter注入).說(shuō)明:對(duì)象創(chuàng)建之后,將被依賴對(duì)象通過(guò)set方法設(shè)立進(jìn)去.構(gòu)造方法注入(Constructorinjection).說(shuō)明:對(duì)象創(chuàng)建時(shí),被依賴對(duì)象以構(gòu)造方法參數(shù)的方式注入.說(shuō)明:Spring兩種依賴注入的類型分別是setter注入和構(gòu)造方法注入。setter注入:一般情況下所有的javabean,我們都會(huì)使用setter方法和getter方法去設(shè)立和獲取屬性的值,示例如下:publicclassnamebean{Stringname;publicvoidsetName(Stringa){name=a;}publicStringgetName(){returnname;}}我們會(huì)創(chuàng)建一個(gè)bean的實(shí)例然后設(shè)立屬性的值,spring的配置文獻(xiàn)如下:<beanid=”bean1″><propertyname=”name”><value>tom</value></property></bean>Spring會(huì)調(diào)用setName方法來(lái)只是name熟悉為tom構(gòu)造方法注入:構(gòu)造方法注入中,我們使用帶參數(shù)的構(gòu)造方法如下:publicclassnamebean{Stringname;publicnamebean(Stringa){name=a;}}我們會(huì)在創(chuàng)建bean實(shí)例的時(shí)候以newnamebean(“tom”)的方式來(lái)設(shè)立name屬性,Spring配置文獻(xiàn)如下:<beanid=”bean1″><constructor-arg><value>MyBeanValue</value></constructor-arg></bean>使用constructor-arg標(biāo)簽來(lái)設(shè)立構(gòu)造方法的參數(shù)。Setter注入和構(gòu)造方法注入比較Setter注入的優(yōu)點(diǎn):(1)與傳統(tǒng)的JavaBean的寫(xiě)法更相似,程序員更容易理解、接受,通過(guò)setter方式設(shè)定依賴關(guān)系顯得更加直觀、明顯;(2)對(duì)于復(fù)雜的依賴關(guān)系,假如采用構(gòu)造注入,會(huì)導(dǎo)致構(gòu)造器過(guò)于臃腫,難以閱讀。Spring在創(chuàng)建Bean實(shí)例時(shí),需要同時(shí)實(shí)例化其依賴的所有實(shí)例,因而導(dǎo)致死你功能下降。而使用設(shè)立注入,則避免這下問(wèn)題;特別在某些屬性可選的情況下,多參數(shù)的構(gòu)造器更加笨拙。構(gòu)造注入的優(yōu)點(diǎn):(1)構(gòu)造注入可以再構(gòu)造器中決定依賴關(guān)系的注入順序,優(yōu)先依賴的優(yōu)先注入。(2)對(duì)于依賴關(guān)系無(wú)須變化的Bean,構(gòu)造注入更有用處;由于沒(méi)有setter方法,所有的依賴關(guān)系所有在構(gòu)造器內(nèi)設(shè)定,因此,不用緊張后續(xù)代碼對(duì)依賴關(guān)系的破壞。(3)依賴關(guān)系只能在構(gòu)造器中設(shè)定,則只有組件的創(chuàng)建者才干改變組件的依賴關(guān)系。對(duì)組件的調(diào)用者而言,組件內(nèi)部的依賴關(guān)系完全透明,更符合高內(nèi)聚的原則;建議采用以設(shè)立注入為主,構(gòu)造注入為輔的注入策略。對(duì)于依賴關(guān)系無(wú)須變化的注入,盡量采用構(gòu)造注入;而其他的依賴關(guān)系的注入,則考慮采用設(shè)立注入。對(duì)AOP的理解,以及AOP在項(xiàng)目中是如何使用的?AOP(AspectOrientedProgramming),也就是面向切面編程,也有譯作面向方面編程。AOP是一種編程思想.在傳統(tǒng)的面向?qū)ο螅∣bject-OrientedProgramming,OOP)編程中,對(duì)垂直切面關(guān)注度很高,橫切面關(guān)注卻很少,也很難關(guān)注。也就是說(shuō),我們運(yùn)用OOP思想可以很好的解決業(yè)務(wù)流程,卻不能把系統(tǒng)中的某些特定的反復(fù)性行為封裝在某個(gè)模塊中。比如在很多的業(yè)務(wù)中都需要記錄操作日記,結(jié)果我們不得不在業(yè)務(wù)流程種嵌入大量的日記記錄代碼。無(wú)論是對(duì)業(yè)務(wù)代碼還是對(duì)日記記錄代碼來(lái)說(shuō),此后的維護(hù)都是非常復(fù)雜的。由于系統(tǒng)種嵌入了這種大量的與業(yè)務(wù)無(wú)關(guān)的其它反復(fù)性代碼,系統(tǒng)的復(fù)雜性、代碼的反復(fù)性增長(zhǎng)了,從而使bug的發(fā)生率也大大的增長(zhǎng)。IOC使軟件組件松散連接成為也許,AOP讓你可以捕獲系統(tǒng)中經(jīng)常使用的功能,把他轉(zhuǎn)化為組件.簡(jiǎn)樸的說(shuō):面向切面編程通過(guò)提供此外一種思考程序結(jié)構(gòu)的途徑來(lái)填補(bǔ)面向?qū)ο缶幊?OOP)的局限性.在OOP中模塊化的關(guān)鍵單元是類(classes),而在AOP中模塊化的單元?jiǎng)t是切面。切面能對(duì)關(guān)注點(diǎn)進(jìn)行模塊化。AOP將應(yīng)用系統(tǒng)分為兩部分,核心業(yè)務(wù)邏輯(Corebusinessconcerns)及橫向的通用邏輯,也就是所謂的方面Crosscuttingenterpriseconcerns。AOP的應(yīng)用:例如,所有大中型應(yīng)用都要涉及到的持久化管理(Persistent)、事務(wù)管理(TransactionManagement)、安全管理(Security)、日記管理(Logging)和調(diào)試管理(Debugging)等。AOP的概念和術(shù)語(yǔ)方面(Aspect):一個(gè)關(guān)注點(diǎn)的模塊化,這個(gè)關(guān)注點(diǎn)實(shí)現(xiàn)也許此外橫切多個(gè)對(duì)象。事務(wù)管理是J2EE應(yīng)用中一個(gè)很好的橫切關(guān)注點(diǎn)例子。方面用Spring的Advisor或攔截器實(shí)現(xiàn)。連接點(diǎn)(Joinpoint):程序執(zhí)行過(guò)程中明確的點(diǎn),如方法的調(diào)用或特定的異常被拋出。告知(Advice):在特定的連接點(diǎn),AOP框架執(zhí)行的動(dòng)作。各種類型的告知涉及“around”、“before”和“throws”告知。告知類型將在下面討論。許多AOP框架涉及Spring都是以攔截器做告知模型,維護(hù)一個(gè)“圍繞”連接點(diǎn)的攔截器鏈。切入點(diǎn)(Pointcut):指定一個(gè)告知將被引發(fā)的一系列連接點(diǎn)的集合。AOP框架必須允許開(kāi)發(fā)者指定切入點(diǎn),例如,使用正則表達(dá)式。引入(Introduction):添加方法或字段到被告知的類。Spring允許引入新的接口到任何被告知的對(duì)象。例如,你可以使用一個(gè)引入使任何對(duì)象實(shí)現(xiàn)IsModified接口,來(lái)簡(jiǎn)化緩存。目的對(duì)象(TargetObject):包含連接點(diǎn)的對(duì)象,也被稱作被告知或被代理對(duì)象。AOP代理(AOPProxy):AOP框架創(chuàng)建的對(duì)象,包含告知。在Spring中,AOP代理可以是JDK動(dòng)態(tài)代理或CGLIB代理。編織(Weaving):組裝方面來(lái)創(chuàng)建一個(gè)被告知對(duì)象。這可以在編譯時(shí)完畢(例如使用AspectJ編譯器),也可以在運(yùn)營(yíng)時(shí)完畢。Spring和其他純JavaAOP框架同樣,在運(yùn)營(yíng)時(shí)完畢織入。說(shuō)明:Target和advice的概念:target(目的):假如一個(gè)對(duì)象的執(zhí)行過(guò)程受到某個(gè)AOP的修改,那么它就叫一個(gè)目的對(duì)象.目的對(duì)象也常稱為被告知對(duì)象.advice(告知):在某一個(gè)特定的聯(lián)接點(diǎn)處運(yùn)營(yíng)的代碼稱為”告知”.告知有很多種,比如在聯(lián)接點(diǎn)之前執(zhí)行的前置告知(beforeadvice)和在聯(lián)接點(diǎn)之后執(zhí)行的后置告知(afteradvice).Spring中有五中不同的告知:前置告知(Beforeadvise):在某連接點(diǎn)之前執(zhí)行的告知,但這個(gè)告知不能阻止連接點(diǎn)之前的執(zhí)行流程。(除非它拋出一個(gè)異常)后置告知(Afterreturningadvise):在某連接點(diǎn)正常完畢后執(zhí)行的告知:例如,一個(gè)方法沒(méi)有拋出任何異常,正常返回。異常告知(Afterthrowingadvise):在方法拋出異常退出時(shí)執(zhí)行的告知。最終告知(After(finally)advise):當(dāng)某連接點(diǎn)退出的時(shí)候執(zhí)行的告知(無(wú)論是正常返回還是異常退出)圍繞告知(AroundAdvise):包圍一個(gè)連接點(diǎn)的告知,如方法調(diào)用。這是最強(qiáng)大的一種告知類型。圍繞告知可以在方法調(diào)用前后完畢自定義的行為。它也會(huì)選擇是否繼續(xù)執(zhí)行連接點(diǎn)或直接返回它自己的返回值或拋出異常來(lái)結(jié)束執(zhí)行。圍繞告知是最常用的告知類型。Springbean的生命周期:定義->初始化->使用->銷(xiāo)毀Bean的作用域singleton在每個(gè)SpringIoC容器中一個(gè)bean定義相應(yīng)一個(gè)對(duì)象實(shí)例。prototype一個(gè)bean定義相應(yīng)多個(gè)對(duì)象實(shí)例。request在一次HTTP請(qǐng)求中,一個(gè)bean定義相應(yīng)一個(gè)實(shí)例;即每次HTTP請(qǐng)求將會(huì)有各自的bean實(shí)例,它們依據(jù)某個(gè)bean定義創(chuàng)建而成。該作用域僅在基于web的SpringApplicationContext情形下有效。session在一個(gè)HTTPSession中,一個(gè)bean定義相應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的SpringApplicationContext情形下有效。globalsession在一個(gè)全局的HTTPSession中,一個(gè)bean定義相應(yīng)一個(gè)實(shí)例。典型情況下,僅在使用portletcontext的時(shí)候有效。該作用域僅在基于web的SpringApplicationContext情形下有效。Spring自動(dòng)代理Spring自動(dòng)代理重要有三個(gè)選擇:使用BeanNameAutoProxyCreator(bean名稱自動(dòng)代理生成器)類:該類允許我們指明一組bean名稱以及實(shí)行在他們上的一組告知和告知者.Spring會(huì)自動(dòng)用指定的告知代理這些Bean.使用DefaultAdvisorAutoProxyCreator(默認(rèn)告知者自動(dòng)代理生成器)類:這個(gè)自動(dòng)代理類非常強(qiáng)大,他自動(dòng)用所有可行的告知者代理ApplicaitonContext中的所有Bean.該類只接受告知者,不接受告知,由于它依賴告知者的切入點(diǎn)來(lái)決定該告知者可以告知給定的bean.使用元數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)代理Spring事務(wù)特點(diǎn)事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列。這些操作要么都做,要么都不做,是一個(gè)不可分割的工作單位。事務(wù)具有四個(gè)特性:1.原子性:一個(gè)事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的操作是一個(gè)不可分割的操作序列。這些操作要么完整的被所有執(zhí)行,要么一步也不做。是一個(gè)邏輯工作單位。2.一致性:一個(gè)事務(wù)獨(dú)立執(zhí)行的結(jié)果將保持一致性,即數(shù)據(jù)不會(huì)由于事務(wù)的執(zhí)行而遭受破壞。3.隔離性:一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。4.持久性:一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)當(dāng)是永久性的。接下來(lái)的其他操作或故障不應(yīng)當(dāng)對(duì)其執(zhí)行結(jié)果有任何影響。談?wù)凷pring事務(wù)的理解事務(wù)就是對(duì)一系列的數(shù)據(jù)庫(kù)操作(比如插入多條數(shù)據(jù))進(jìn)行統(tǒng)一的提交或回滾操作,假如插入成功,那么一起成功,假如中間有一條出現(xiàn)異常,那么回滾之前的所有操作。這樣可以防止出現(xiàn)臟數(shù)據(jù),防止數(shù)據(jù)庫(kù)數(shù)據(jù)出現(xiàn)問(wèn)題。開(kāi)發(fā)中為了避免這種情況一般都會(huì)進(jìn)行事務(wù)管理。Spring中也有自己的事務(wù)管理機(jī)制,一般是使用TransactionMananger進(jìn)行管理,可以通過(guò)Spring的注入來(lái)完畢此功能。spring提供了兩中方式來(lái)實(shí)現(xiàn)事務(wù)管理:聲明式事務(wù)和編程式事務(wù)。編程式事務(wù):比較靈活,但是代碼量大,存在反復(fù)的代碼比較多;聲明式的比編程式的更靈活。11.1編程式事務(wù)Spring提供兩種方式的編程式事務(wù)管理,分別是:使用TransactionTemplate和直接使用PlatformTransactionManager。a.TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate同樣的方法。它使用回調(diào)方法,把應(yīng)用程序從解決取得和釋放資源中解脫出來(lái)。如同其他模板,TransactionTemplate是線程安全的。b.也可以使用PlatformTransactionManager直接管理事務(wù)。簡(jiǎn)樸地通過(guò)一個(gè)bean引用給你的bean傳遞一個(gè)你使用的PlatformTransaction對(duì)象。然后,使用TransactionDefinition和TransactionStatus對(duì)象就可以發(fā)起、回滾、提交事務(wù)。如下片段:DefaultTransactionDefinitiondef=newDefaultTransactionDefinition();//new一個(gè)事務(wù)//初始化事務(wù),參數(shù)定義事務(wù)的傳播類型;def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//獲得事務(wù)狀態(tài)TransactionStatusstatus=transactionManager.getTransaction(def);try{…………….transactionMmit(status);//提交事務(wù);}catch(…..)...{transactionManager.rollback(status);//回滾事務(wù);}11.2聲明式事務(wù)聲明式事務(wù)是通過(guò)AOP實(shí)現(xiàn)的。大多數(shù)Spring用戶選擇聲明式事務(wù)管理,這是最少影響應(yīng)用代碼的選擇,因而這是和非侵入性的輕量級(jí)容器的觀念是一致的。聲明式事務(wù)通常通過(guò)TransactionProxyFactoryBean設(shè)立Spring事務(wù)代理。編程式事務(wù)和聲明式事務(wù)如何選擇?當(dāng)你只有很少的事務(wù)操作時(shí),編程式事務(wù)管理通常比較合適。例如:假如你只有一個(gè)Web應(yīng)用,其中只有特定的更新操作有事務(wù)規(guī)定,你也許不樂(lè)意使用Spring或其他即使設(shè)立事務(wù)代理。這種情況下,使用TransactionTemplate也許是個(gè)好方法。只有編程式事務(wù)管理才干顯示的設(shè)立事務(wù)名稱。假如你的應(yīng)用中存在大量事務(wù)操作,那么聲明式事務(wù)管理通常是值得的。它將事務(wù)管理與業(yè)務(wù)邏輯分離,并且在Spring中配置也不難。使用Spring,而不是EJBCMT,聲明式事務(wù)管理在配置上的成本極大的減少了。 Spring應(yīng)用spring中的BeanFactory與ApplicationContext的作用和區(qū)別?答:BeanFactory負(fù)責(zé)讀取bean配置文檔,管理bean的加載,實(shí)例化,維護(hù)bean之間的依賴關(guān)系,負(fù)責(zé)bean的聲明周期。ApplicationContext是BeanFactory的擴(kuò)展,除了提供上述BeanFactory所能提供的功能之外,功能得到了進(jìn)一步的增強(qiáng),比如容易與SpringAOP集成,資源解決(國(guó)際化解決),事件傳遞及各種不同應(yīng)用層的context實(shí)現(xiàn)0.Spring里面applicationContext.xml文獻(xiàn)能不能改成其他文獻(xiàn)名?答:ContextLoaderListener是一個(gè)ServletContextListener,它在你的web應(yīng)用啟動(dòng)的時(shí)候初始化。缺省情況下,它會(huì)在WEB-INF/applicationContext.xml文獻(xiàn)找Spring的配置。你可以通過(guò)定義一個(gè)<context-param>元素名字為”contextConfigLocation”來(lái)改變Spring配置文獻(xiàn)的位置。示例如下:<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/xyz.xml</param-value>

</context-param></listener-class></listener>spring中commons-logging.jar的作用commons-logging.jar包是使用spring的必備包。(位置在spring-framework-2.5.6.SEC01\lib\jakarta-commons)用來(lái)記錄程序運(yùn)營(yíng)時(shí)的活動(dòng)的日記記錄。spring中讀取xml配置文獻(xiàn)、獲取bean的幾種方式獲取Spring框架管理的類實(shí)例的方法有多種,如下:方法一:在初始化時(shí)保存ApplicationContext對(duì)象代碼:ApplicationContextac=newFileSystemXmlApplicationContext("applicationContext.xml");ac.getBean("beanId");說(shuō)明:這種方式合用于采用Spring框架的獨(dú)立應(yīng)用程序,需要程序通過(guò)配置文獻(xiàn)手工初始化Spring的情況。方法二:通過(guò)Spring提供的工具類獲取ApplicationContext對(duì)象代碼:importorg.springframework.web.context.support.WebApplicationContextUtils;ApplicationContextac1=WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContextsc)ApplicationContextac2=WebApplicationContextUtils.getWebApplicationContext(ServletContextsc)ac1.getBean("beanId");ac2.getBean("beanId");說(shuō)明:這種方式適合于采用Spring框架的B/S系統(tǒng),通過(guò)ServletContext對(duì)象獲取ApplicationContext對(duì)象,然后在通過(guò)它獲取需要的類實(shí)例。

溫馨提示

  • 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)論