2023年Java框架面試題總結_第1頁
2023年Java框架面試題總結_第2頁
2023年Java框架面試題總結_第3頁
2023年Java框架面試題總結_第4頁
2023年Java框架面試題總結_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

Struts是開源軟件,使開發者能更進一步的了解其內部實現機制。

Struts優點:業界"標準"(很多成功案例),學習資源豐富。

Struts的優點重要集中體現在兩個方面:Taglib和頁面導航。

a、運用Struts提供的taglib可以大大節約開發時間。

b、維護擴展比較方便。通過一個配置文獻,即可把握整個系統各部分之間的聯系,這對于后期的維護有著莫大的好處。

c、表現與邏輯分離

d、表單驗證解決了請求數據的驗證問題,增強了系統健壯性。

e、便于團隊開發

Struts缺陷:a、大量的使用標簽,對于初學者難度較大。

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

用來創建可以和Struts框架和其他相應的HTML標簽交互的HTML輸入表單

Bean標簽

在訪問JavaBeans及其屬性,以及定義一個新的bean時使用

Logic標簽

管理條件產生的輸出和對象集產生的循環

Template標簽

隨著Tiles框架包的出現,此標記已開始減少使用

Nested標簽

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

溫馨提示

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

評論

0/150

提交評論