Struts+Hibernate+Spring面試題合集及答案_第1頁
Struts+Hibernate+Spring面試題合集及答案_第2頁
Struts+Hibernate+Spring面試題合集及答案_第3頁
Struts+Hibernate+Spring面試題合集及答案_第4頁
Struts+Hibernate+Spring面試題合集及答案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Struts+Hibernate+Spring面試題合集及答案Struts+Hibernate+Spring面試題合集 11. Hibernate部分 21.1. Hibernate工作原理 21.2. 什么是Hibernate的并發(fā)機制?怎么處理并發(fā)問題? 21.3. Hibernate自帶的分頁機制是什么?如果不使用Hibernate自帶的分頁,則采用什么方式分頁? 31.4. hibernate的對象的三種持久化狀態(tài),并給出解釋? 31.5. hibernate的三種狀態(tài)之間如何轉(zhuǎn)換 31.6. hibernate中一對多配置文件返回的是什么? 41.7. update()和saveOrUpdate()的區(qū)別? 41.8. hibernate拒絕連接、服務(wù)器崩潰的原因?最少寫5個 41.9. hibernate如何管理緩存 41.10. 使用Hibernate的優(yōu)點: 61.11. Hibernate是如何延遲加載? 61.12. Hibernate中怎樣實現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)系) 61.13. Hibernate的查詢方式 71.14. 如何優(yōu)化Hibernate? 72 Struts部分 74.1. Struts1.x工作機制? 74.2. 為什么要用Struts1.x 84.3. Struts1.x的validate框架是如何驗證的? 84.4. 說下Struts的設(shè)計模式 84.5. 談?wù)勀鉳vc的理解 84.6. struts1.2和struts2.0的區(qū)別?如何控制兩種框架中的單例模式? 94.7. struts如何實現(xiàn)國際化 94.8. struts2.0的常用標簽有哪些 104.9. struts中怎么配置form-bean、action、tiles 104.10. logic標簽有哪幾個? 124.11. action是單實例還是多實例,為什么? 134.12. dispatchAction是用什么技術(shù)實現(xiàn)的? 134.13. struts2.0的mvc模式?與struts1.0的區(qū)別? 134.14. struts的處理流程。 134.15. Struts/webwork的工作機制,它有哪些標簽 183 Spring部分 184.1. spring工作機制 184.2. 使用Spring的好處 194.3. spring是什么?根據(jù)你的理解詳細談?wù)勀愕囊娊狻?194.4. 項目中如何體現(xiàn)Spring中的切面編程,具體說明。 204.5. spring在項目中如何充當粘合劑 204.6. spring的事務(wù)如何配置 204.7. transaction有那幾種實現(xiàn) 214 綜合部分 214.1. Hibernate和spring中常出現(xiàn)的幾個異常 214.2. Hibernate與jdbc的聯(lián)系 224.3. Hibernate與spring的聯(lián)系 224.4. 項目中為什么使用SSH 23Hibernate部分Hibernate工作原理1.讀取并解析配置文件2.讀取并解析映射信息,創(chuàng)建SessionFactory3.打開Sesssion4.創(chuàng)建事務(wù)Transation5.持久化操作6.提交事務(wù)7.關(guān)閉Session8.關(guān)閉SesstionFactory什么是Hibernate的并發(fā)機制?怎么處理并發(fā)問題?Hibernate并發(fā)機制:a、Hibernate的Session對象是非線程安全的,對于單個請求,單個會話,單個的工作單元(即單個事務(wù),單個線程),它通常只使用一次,然后就丟棄。如果一個Session實例允許共享的話,那些支持并發(fā)運行的,例如Httprequest,sessionbeans將會導(dǎo)致出現(xiàn)資源爭用。如果在HttpSession中有hibernate的Session的話,就可能會出現(xiàn)同步訪問HttpSession。只要用戶足夠快的點擊瀏覽器的“刷新”,就會導(dǎo)致兩個并發(fā)運行的線程使用同一個Session。b、多個事務(wù)并發(fā)訪問同一塊資源,可能會引發(fā)第一類丟失更新,臟讀,幻讀,不可重復(fù)讀,第二類丟失更新一系列的問題。解決方案:設(shè)置事務(wù)隔離級別。 Serializable:串行化。隔離級別最高RepeatableRead:可重復(fù)讀ReadCommitted:已提交數(shù)據(jù)讀ReadUncommitted:未提交數(shù)據(jù)讀。隔離級別最差 設(shè)置鎖:樂觀鎖和悲觀鎖。樂觀鎖:使用版本號或時間戳來檢測更新丟失,在<class>的映射中設(shè)置optimistic-lock="all"可以在沒有版本或者時間戳屬性映射的情況下實現(xiàn)版本檢查,此時Hibernate將比較一行記錄的每個字段的狀態(tài)行級悲觀鎖:Hibernate總是使用數(shù)據(jù)庫的鎖定機制,從不在內(nèi)存中鎖定對象!只要為JDBC連接指定一下隔離級別,然后讓數(shù)據(jù)庫去搞定一切就夠了。類LockMode定義了Hibernate所需的不同的鎖定級別:LockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ;Hibernate自帶的分頁機制是什么?如果不使用Hibernate自帶的分頁,則采用什么方式分頁?1、hibernate自帶的分頁機制:獲得Session對象后,從Session中獲得Query對象。用Query.setFirstResult():設(shè)置要顯示的第一行數(shù)據(jù),Query.setMaxResults():設(shè)置要顯示的最后一行數(shù)據(jù)。2、不使用hibernate自帶的分頁,可采用sql語句分頁,如:5:為每頁顯示的記錄,2為當前頁:select*top5fromtablewheretabIdnotin(selecttabIdtop(2-1)*5fromtable);hibernate的對象的三種持久化狀態(tài),并給出解釋?不清楚hibernate的對象的三種持久化狀態(tài),只知道hibernate對象的三種狀態(tài),下面有介紹。hibernate的三種狀態(tài)之間如何轉(zhuǎn)換當對象由瞬時狀態(tài)(Transient)一save()時,就變成了持久化狀態(tài)。當我們在Session里存儲對象的時候,實際是在Session的Map里存了一份,也就是它的緩存里放了一份,然后,又到數(shù)據(jù)庫里存了一份,在緩存里這一份叫持久對象(Persistent)。Session一Close()了,它的緩存也都關(guān)閉了,整個Session也就失效了,這個時候,這個對象變成了游離狀態(tài)(Detached),但數(shù)據(jù)庫中還是存在的。當游離狀態(tài)(Detached)update()時,又變?yōu)榱顺志脿顟B(tài)(Persistent)。當持久狀態(tài)(Persistent)delete()時,又變?yōu)榱怂矔r狀態(tài)(Transient),此時,數(shù)據(jù)庫中沒有與之對應(yīng)的記錄。hibernate中一對多配置文件返回的是什么?hibernate中一對多配置文件會相應(yīng)的映射為兩張表,并且它們之間的關(guān)系是一對多的。例如:一個student和classes表的關(guān)系。一個學(xué)生只能是一個班的,一個班可以有多個學(xué)生。update()和saveOrUpdate()的區(qū)別?update()和saveOrUpdate()是用來對跨Session的PO進行狀態(tài)管理的。update()方法操作的對象必須是持久化了的對象。也就是說,如果此對象在數(shù)據(jù)庫中不存在的話,就不能使用update()方法。saveOrUpdate()方法操作的對象既可以使持久化了的,也可以使沒有持久化的對象。如果是持久化了的對象調(diào)用saveOrUpdate()則會更新數(shù)據(jù)庫中的對象;如果是未持久化的對象使用此方法,則save到數(shù)據(jù)庫中。hibernate拒絕連接、服務(wù)器崩潰的原因?最少寫5個1.db沒有打開2.網(wǎng)絡(luò)連接可能出了問題3.連接配置錯了4.驅(qū)動的driver,url是否都寫對了5.LIB下加入相應(yīng)驅(qū)動,數(shù)據(jù)連接代碼是否有誤6.數(shù)據(jù)庫配置可能有問題7.當前聯(lián)接太多了,服務(wù)器都有訪問人數(shù)限制的8.服務(wù)器的相應(yīng)端口沒有開,即它不提供相應(yīng)的服務(wù)9hibernate有哪些緩存,分別怎么使用?10你對hibernate的了解到了一個什么樣的程度?11寫出一個sql語句體現(xiàn)hibernate中一對多的關(guān)系hibernate如何管理緩存Hibernate中提供了兩級Cache,第一級別的緩存是Session級別的緩存,它是屬于事務(wù)范圍的緩存。這一級別的緩存由hibernate管理的,一般情況下無需進行干預(yù);第二級別的緩存是SessionFactory級別的緩存,它是屬于進程范圍或群集范圍的緩存。這一級別的緩存可以進行配置和更改,并且可以動態(tài)加載和卸載。Hibernate還為查詢結(jié)果提供了一個查詢緩存,它依賴于第二級緩存。1.一級緩存和二級緩存的比較:第一級緩存第二級緩存存放數(shù)據(jù)的形式相互關(guān)聯(lián)的持久化對象對象的散裝數(shù)據(jù)緩存的范圍事務(wù)范圍,每個事務(wù)都有單獨的第一級緩存進程范圍或集群范圍,緩存被同一個進程或集群范圍內(nèi)的所有事務(wù)共享并發(fā)訪問策略由于每個事務(wù)都擁有單獨的第一級緩存,不會出現(xiàn)并發(fā)問題,無需提供并發(fā)訪問策略由于多個事務(wù)會同時訪問第二級緩存中相同數(shù)據(jù),因此必須提供適當?shù)牟l(fā)訪問策略,來保證特定的事務(wù)隔離級別數(shù)據(jù)過期策略沒有提供數(shù)據(jù)過期策略。處于一級緩存中的對象永遠不會過期,除非應(yīng)用程序顯式清空緩存或者清除特定的對象必須提供數(shù)據(jù)過期策略,如基于內(nèi)存的緩存中的對象的最大數(shù)目,允許對象處于緩存中的最長時間,以及允許對象處于緩存中的最長空閑時間物理存儲介質(zhì)內(nèi)存內(nèi)存和硬盤。對象的散裝數(shù)據(jù)首先存放在基于內(nèi)在的緩存中,當內(nèi)存中對象的數(shù)目達到數(shù)據(jù)過期策略中指定上限時,就會把其余的對象寫入基于硬盤的緩存中。緩存的軟件實現(xiàn)在Hibernate的Session的實現(xiàn)中包含了緩存的實現(xiàn)由第三方提供,Hibernate僅提供了緩存適配器(CacheProvider)。用于把特定的緩存插件集成到Hibernate中。啟用緩存的方式只要應(yīng)用程序通過Session接口來執(zhí)行保存、更新、刪除、加載和查詢數(shù)據(jù)庫數(shù)據(jù)的操作,Hibernate就會啟用第一級緩存,把數(shù)據(jù)庫中的數(shù)據(jù)以對象的形式拷貝到緩存中,對于批量更新和批量刪除操作,如果不希望啟用第一級緩存,可以繞過HibernateAPI,直接通過JDBCAPI來執(zhí)行指操作。用戶可以在單個類或類的單個集合的粒度上配置第二級緩存。如果類的實例被經(jīng)常讀但很少被修改,就可以考慮使用第二級緩存。只有為某個類或集合配置了第二級緩存,Hibernate在運行時才會把它的實例加入到第二級緩存中。用戶管理緩存的方式第一級緩存的物理介質(zhì)為內(nèi)存,由于內(nèi)存容量有限,必須通過恰當?shù)臋z索策略和檢索方式來限制加載對象的數(shù)目。Session的evit()方法可以顯式清空緩存中特定對象,但這種方法不值得推薦。第二級緩存的物理介質(zhì)可以是內(nèi)存和硬盤,因此第二級緩存可以存放大量的數(shù)據(jù),數(shù)據(jù)過期策略的maxElementsInMemory屬性值可以控制內(nèi)存中的對象數(shù)目。管理第二級緩存主要包括兩個方面:選擇需要使用第二級緩存的持久類,設(shè)置合適的并發(fā)訪問策略:選擇緩存適配器,設(shè)置合適的數(shù)據(jù)過期策略。2.一級緩存的管理:當應(yīng)用程序調(diào)用Session的save()、update()、savaeOrUpdate()、get()或load(),以及調(diào)用查詢接口的list()、iterate()或filter()方法時,如果在Session緩存中還不存在相應(yīng)的對象,Hibernate就會把該對象加入到第一級緩存中。當清理緩存時,Hibernate會根據(jù)緩存中對象的狀態(tài)變化來同步更新數(shù)據(jù)庫。Session為應(yīng)用程序提供了兩個管理緩存的方法:evict(Objectobj):從緩存中清除參數(shù)指定的持久化對象。clear():清空緩存中所有持久化對象。3.二級緩存的管理:3.1.Hibernate的二級緩存策略的一般過程如下:1)條件查詢的時候,總是發(fā)出一條select*fromtable_namewhere….(選擇所有字段)這樣的SQL語句查詢數(shù)據(jù)庫,一次獲得所有的數(shù)據(jù)對象。2)把獲得的所有數(shù)據(jù)對象根據(jù)ID放入到第二級緩存中。3)當Hibernate根據(jù)ID訪問數(shù)據(jù)對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那么從二級緩存中查;查不到,再查詢數(shù)據(jù)庫,把結(jié)果按照ID放入到緩存。4)刪除、更新、增加數(shù)據(jù)的時候,同時更新緩存。Hibernate的二級緩存策略,是針對于ID查詢的緩存策略,對于條件查詢則毫無作用。為此,Hibernate提供了針對條件查詢的QueryCache。3.2.什么樣的數(shù)據(jù)適合存放到第二級緩存中?1很少被修改的數(shù)據(jù)2不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)3不會被并發(fā)訪問的數(shù)據(jù)4參考數(shù)據(jù),指的是供應(yīng)用參考的常量數(shù)據(jù),它的實例數(shù)目有限,它的實例會被許多其他類的實例引用,實例極少或者從來不會被修改。3.3.不適合存放到第二級緩存的數(shù)據(jù)?1經(jīng)常被修改的數(shù)據(jù)2財務(wù)數(shù)據(jù),絕對不允許出現(xiàn)并發(fā)3與其他應(yīng)用共享的數(shù)據(jù)。3.4.常用的緩存插件Hibernater的二級緩存是一個插件,下面是幾種常用的緩存插件:EhCache:可作為進程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤,對Hibernate的查詢緩存提供了支持。OSCache:可作為進程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤,提供了豐富的緩存數(shù)據(jù)過期策略,對Hibernate的查詢緩存提供了支持。SwarmCache:可作為群集范圍內(nèi)的緩存,但不支持Hibernate的查詢緩存。JBossCache:可作為群集范圍內(nèi)的緩存,支持事務(wù)型并發(fā)訪問策略,對Hibernate的查詢緩存提供了支持。3.5.配置二級緩存的主要步驟:1)選擇需要使用二級緩存的持久化類,設(shè)置它的命名緩存的并發(fā)訪問策略。這是最值得認真考慮的步驟。2)選擇合適的緩存插件,然后編輯該插件的配置文件。使用Hibernate的優(yōu)點:1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。2.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程度的簡化DAO層的編碼工作3.hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。4.hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。Hibernate是如何延遲加載?1.Hibernate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)2.Hibernate3提供了屬性的延遲加載功能當Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內(nèi)存中,當程序真正對數(shù)據(jù)的操作時,對象才存在與內(nèi)存中,就實現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。Hibernate中怎樣實現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)系)類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進行操作,它們都是對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通 過配置文件中的many-to-one、one-to-many、many-to-many、Hibernate的查詢方式Sql、Criteria,objectcomptositionHql:1、屬性查詢2、參數(shù)查詢、命名參數(shù)查詢3、關(guān)聯(lián)查詢4、分頁查詢5、統(tǒng)計函數(shù)如何優(yōu)化Hibernate?1.使用雙向一對多關(guān)聯(lián),不使用單向一對多2.靈活使用單向一對多關(guān)聯(lián)3.不用一對一,用多對一取代4.配置對象緩存,不使用集合緩存5.一對多集合使用Bag,多對多集合使用Set6.繼承類使用顯式多態(tài)7.表字段要少,表關(guān)聯(lián)不要怕多,有二級緩存撐腰Struts部分Struts1.x工作機制?工作機制:Struts的工作流程:在web應(yīng)用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當ActionServlet接收到一個客戶請求時,將執(zhí)行如下流程.-(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;-(2)如果ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中;-(3)根據(jù)配置信息決定是否需要表單驗證.如果需要驗證,就調(diào)用ActionForm的validate()方法;-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象,就表示表單驗證成功;-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action,如果相應(yīng)的Action實例不存在,就先創(chuàng)建這個實例,然后調(diào)用Action的execute()方法;-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指向的JSP組件;-(7)ActionForward對象指向JSP組件生成動態(tài)網(wǎng)頁,返回給客戶;為什么要用Struts1.xJSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個規(guī)則、一個把這些技術(shù)組織起來的規(guī)則,這就是框架,Struts便應(yīng)運而生?;赟truts開發(fā)的應(yīng)用由3類組件構(gòu)成:控制器組件、模型組件、視圖組件Struts1.x的validate框架是如何驗證的?在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調(diào)用。說下Struts的設(shè)計模式MVC模式:web應(yīng)用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設(shè)置決定是否需要表單驗證,如果需要就調(diào)用ActionForm的Validate()驗證后選擇將請求發(fā)送到哪個Action,如果Action不存在,ActionServlet會先創(chuàng)建這個對象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網(wǎng)頁,返回給客戶。談?wù)勀鉳vc的理解MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。MVC是一種設(shè)計模式,它強制性的把應(yīng)用程序的輸入、處理和輸出分開。MVC中的模型、視圖、控制器它們分別擔負著不同的任務(wù)。視圖:視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并接受用戶的輸入。視圖不進行任何業(yè)務(wù)邏輯處理。模型:模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理。相當于JavaBean。一個模型能為多個視圖提供數(shù)據(jù)。這提高了應(yīng)用程序的重用性控制器:當用戶單擊Web頁面中的提交按鈕時,控制器接受請求并調(diào)用相應(yīng)的模型去處理請求。然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。MVC的處理過程:首先控制器接受用戶的請求,調(diào)用相應(yīng)的模型來進行業(yè)務(wù)處理,并返回數(shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。并通過視圖呈現(xiàn)給用戶。struts1.2和struts2.0的區(qū)別?如何控制兩種框架中的單例模式?struts1.2和struts2.0的對比a、Action類:struts1.2要求Action類繼承一個基類。struts2.0Action要求繼承ActionSupport基類b、線程模式struts1.2Action是單例模式的并且必須是線程安全的,因為僅有一個Action的實例來處理所有的請求。單例策略限制了Struts1.2Action能做的事情,并且開發(fā)時特別小心。Action資源必須是線程安全的或同步的。struts2.0Action為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。c、Servlet依賴struts1.2Action依賴于ServletAPI,因為當一個Action被調(diào)用時HttpServletRequest和HttpServletResponse被傳遞給execut方法。struts2.0Action不依賴于容器,允許Action脫離容器單獨測試。如果需要,Struts2Action仍然可以訪問初始的Request和Response。但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性。d、可測性測試struts1.2Action的一個主要問題是execute方法暴露了ServletAPI(這使得測試要依賴于容器)。一個第三方擴展:strutsTestCase提供了一套struts1.2的模擬對象來進行測試。Struts2.0Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”也使得測試更容易。struts如何實現(xiàn)國際化以下以兩國語言(中文,英文)為例:1.在工程中加入Struts支持2.編輯ApplicationRperties文件,在其中加入要使用國際化的信息,例如:lable.welcome.china=Welcome!!!3.創(chuàng)建英文資源文件ApplicationResource_perites4.創(chuàng)建臨時中文資源文件ApplicationResource_perites例如:lable.welcom.china=中國歡迎您!5.對臨時中文資源文件進行編碼轉(zhuǎn)換??梢允褂胢yeclipse的插件,也可以在dos下執(zhí)行:native2ascii-encodinggb2312ApplicationResource_pertiesApplicationResource_zh_CN.properties6.在jsp中加入struts的bean標記庫<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>顯示信息:<bean:messagekey="label.welcome.china">可以在struts-config.xml文件中定義多個資源包,而每個資源包可使用key屬性指定包的名稱。struts2.0的常用標簽有哪些1.往action里傳值:<inputname="userName"type="text"class="input6"size="15">2.顯示標簽property用于輸出指定值:<s:propertyvalue="userName"/>3.用于從頁面往action中(user)的對象內(nèi)傳值:<s:textname="user.userName"id="username"/>4.判斷<s:if></s:if>用于在頁面中判斷指定數(shù)據(jù)<s:iftest="userName==admin">….</s:if><s:else>….</s:else>5.迭代<s:iterator>用于將List、Map、ArrayList等集合進行循環(huán)遍歷<s:iteratorvalue="userList"id="user"status="u"><s:propertyvalue="userName"/></a></s:iterator>6.URL地址標簽,<s:url>用于生成一個URL地址,可以通過URL標簽指定的<s:param>子元素向URL地址發(fā)送請求參數(shù)<s:urlaction=""><s:paramname=""value=""></s:param></s:url>7.超鏈接<ahref>一般和<s:url>標簽一起使用,用于帶多個參數(shù)。<ahref="<s:urlaction=""><s:paramname=""value=""></s:param><s:paramname=""value=""></s:param><s:paramname=""value=""></s:param></s:url>">超鏈接</a>8.set標簽,用于將某個值放入指定的范圍內(nèi)。例如application,session等。<s:setname="user"value="userName"scope=”request”/>struts中怎么配置form-bean、action、tiles此處配置的是struts1.2的form-bean配置:(在配置文件struts-config.xml中):<form-beans> <form-beanname=""type=""></form-bean></form-beans>name:指定form的名字;type指定form的類型:包名+類名;action配置:(在配置文件struts-config.xml中)<action-mappings> <actionpath="" attribute="" input="" name="" parameter="" scope="request" type="" ></action></action-mappings>path:請求Action的名字;attribute:form的名字,與form-bean中的name對應(yīng);input:輸入頁的路徑;name:如果配置了attribute,name不起作用,與attribute一樣;parameter:使用分發(fā)Action時,指定調(diào)用分發(fā)Action中的方法名;scope:Action的范圍;type:Action的類型:包名+類名;tites配置:1.新建一個tiles-defs.xml文件,并在其中做如下配置:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEtiles-definitionsPUBLIC"-//ApacheSoftwareFoundation//DTDTilesConfiguration1.1//EN""/struts/dtds/tiles-config_1_1.dtd"><tiles-definitions><definitionname="member-definition"path="/Jsp/layout.jsp"><putname="top"value="/mTop.do"/><putname="left"value="/mLeft.do"/><putname="main"value="/defaultMmain.do"/></definition></tiles-definitions>2.在web.xml和struts-config.xml和web.xml中做相應(yīng)配置:在struts-config.xml中配置如下:************<plug-inclassName="org.apache.struts.tiles.TilesPlugin"><set-propertyproperty="definitions-config"value="/WEB-INF/tiles-defs.xml"/><set-propertyproperty="definitions-parser-validate"value="true"/></plug-in>************在web.xml中配置如下:************<init-param><param-name>definitions-config</param-name><param-value>/WEB-INF/tiles-defs.xml</param-value></init-param>*************3.調(diào)用Tiles組件Tiles組件是通過StrutsAction來調(diào)用的,在struts-config.xml中做如下action配置:*************<actionpath="/member"parameter="member-definition"type="org.apache.struts.actions.ForwardAction"/>**************logic標簽有哪幾個?此標簽庫可以分為三種類型:條件、循環(huán)、轉(zhuǎn)發(fā)/重定向。1.條件類型(沒標注的都比較簡單)logic:empty,logic:notEmpty;logic:equal,logic:notEqual,logic:lessThan,logic:greaterThan,logic:lessEqual,logic:greaterEqual;logic:present,logic:notPresent;logic:match,logic:notMatch;比較兩字符串是否相等,可以比較字符串的開始的、結(jié)尾的或其中的某個部分。location屬性:指定從某個位置開始進行比較。2.循環(huán)類型logic:iterate3.轉(zhuǎn)發(fā)/重定向類型logic:forward和logic:redirectlogic:forward標簽和jsp:forward標簽相似,但它可以使用globalforward中的一個ActionForward例如:<logic:forwardname="login"/>與上面相關(guān)的globalforward中的代碼:<global-forwards><forwardname="login"path="/loginForm.jsp"/></global-forwards>logic:redirect標簽和上面的標簽類似,但它默認調(diào)用的方法是response.sendRedirect(),取代了上面的requestDispatcher.forward()。最大的不同是它支持所有html:link標簽的屬性,所以你能夠指定request參數(shù):<logic:redirectname="login"paramId="employeeId"paramName="employee"property="id"/>在MVC框架下,不推薦使用這兩個標簽,你應(yīng)該是從controller中選擇下一個view,而不是從view中選擇.在Jsp頁面中不要過多的使用logic標簽。action是單實例還是多實例,為什么?action是單實例的。當多個用戶訪問一個請求的時候,服務(wù)器內(nèi)存中只有一個與之對應(yīng)的action類對象。因為當服務(wù)器第一次加載struts的配置文件的時候,創(chuàng)建了一個Action后,每發(fā)送一個請求,服務(wù)器都會先去檢索相應(yīng)的范圍內(nèi)(request,session)是否存在這樣一個action實例,如果存在,則使用這個實例,如果不存在,則創(chuàng)建一個action實例。dispatchAction是用什么技術(shù)實現(xiàn)的?DispatchAction是Aciton的一個子類,主要解決了一個請求處理多個功能的問題普通的Action你只能寫execute方法來處理業(yè)務(wù),而想用這一個Action處理多個任務(wù),你必須要請求參數(shù)進行解析,用if語句塊來處理舉一個小例子:有如下一個url:http://localhost:8080/myApp/addUserAction.do如果你處理這個url的是一個普通的Action,那么就只能在execute里面執(zhí)行插入的相關(guān)操作,如果換成一下url:http://localhost:8080/myApp/UserAction.do?method=add你就應(yīng)該根據(jù)method對象的值來執(zhí)行相應(yīng)的操作,如再有一個路徑http://localhost:8080/myApp/UserAction.do?method=delete這個還可以使用那個Action來處理的,只是多判斷一下而已.如果你用DispatchAction,就簡單多了,所以dispatchAction還是用的Action的這么一個技術(shù)。struts2.0的mvc模式?與struts1.0的區(qū)別?struts2的mvc模式:當用戶在頁面提交用戶請求時,該請求需要提交給struts2的控制器處理。struts2的控制器根據(jù)處理結(jié)果,決定將哪個頁面呈現(xiàn)給客戶端。與struts1最大的不同是:struts2的控制器。struts2的控制器不再像struts1的控制器,需要繼承一個Action父類,甚至可以無需實現(xiàn)任何接口,struts2的Action就是一個普通的POJO。實際上,Struts2的Action就是一個包含execute方法的普通Java類該類里包含的多個屬性用于封裝用戶的請求參數(shù)。struts的處理流程。一、ActionServlet的初始化

ActionServlet作為Struts組件的前端控制器,由于web.xml的相應(yīng)配置:<load-on-startup>0</load-on-startup>

在應(yīng)用一加載時即會被實例化并調(diào)用其init方法,init方法所做的主要工作有二:1.加載struts配置文件,并創(chuàng)建用于封裝配置信息的ModuleConfig對象

2.加載資源文件,并創(chuàng)建用于封裝資源文件的MessageResources對象

需要注意兩點:如果web.xml有多模塊配置,將創(chuàng)建多個ModuleConfig對象和MessageResources對象分別用于封裝各個模塊的struts配置文件和資源文件。

針對各個模塊所創(chuàng)建的ModuleConfig對象和MessageResources對象將存儲在ServletContext中,對應(yīng)的屬性名中有該模塊名稱的相應(yīng)標識。

另外,如果有相應(yīng)配置的話,init方法還將初始化數(shù)據(jù)源和PlugIn二、ActionServlet的process

所有形如*.do的請求(根據(jù)web.xml中的相關(guān)配置)將提交給ActionServlet,最終將調(diào)用其process方法。process方法的主要工作有三:1.

根據(jù)請求信息獲知所請求的模塊名稱,從ServletContext中獲得與請求模塊對應(yīng)的的ModuleConfig對象,并存儲到request中。

2.

根據(jù)模塊信息獲得相應(yīng)的RequestProcessor對象,一個模塊對應(yīng)一個RequestProcessor對象,RequestProcessor對象將關(guān)聯(lián)與所屬模塊對應(yīng)的ModuleConfig對象。

3.

調(diào)用RequestProcessor對象的process方法,將request和response作為參數(shù)傳遞給它。三、RequestProcessor的process

RequestProcessor對象的process方法的主要工作有五步:

1.

調(diào)用自己的processPreprocess(request,response)方法,該方法不進行任何操作,用于子類重寫擴展其功能。

2.

獲得與請求地址所匹配的ActionMapping對象,AcionMapping對象用于封裝一個特定acion的配置信息。

3.

根據(jù)ActionMapping中的配置信息獲得ActionForm對象(該對象將緩存到request或session中),并將表單數(shù)據(jù)填充到ActionForm中,然后根據(jù)ActionMapping的配置決定是否驗證ActionForm,如果驗證,將調(diào)用ActionForm的validate方法,若其返回的ActionErros對象中包含ActionMessage對象則表示驗證失敗,將轉(zhuǎn)向action配置信息input屬性所指示的地址。

4.

如果ActionForm無需驗證或驗證通過將創(chuàng)建并緩存與請求地址匹配的Action對象,將ActionMapping對象、ActionForm對象、request和response作為參數(shù)調(diào)用其execute方法。

5.

根據(jù)Action對象的execute方法返回的ActionForward對象,將請求轉(zhuǎn)發(fā)或重定向到該ActionForward所封裝的地址。Struts2.0與Struts1.x有何區(qū)別。Feature特征Struts1Struts的一Struts2Struts的2Actionclasses行動班Struts1requiresActionclassestoextendanabstractbaseclass.Struts的一要求采取行動班,以延長一個抽象的基類。AcommonprobleminStruts1isprogrammingtoabstractclassesinsteadofinterfaces.一個共同的問題在Struts的一,是編程抽象類而不是接口。AnStruts2ActionmayimplementanActioninterface,alongwithotherinterfacestoenableoptionalandcustomservices.12Struts的行動,可能實施一項行動的界面,隨著其他接口,使可選和定制服務(wù)。Struts2providesabaseActionSupportclasstoimplementcommonlyusedinterfaces.Struts的2提供了相應(yīng)的actionsupport一流的執(zhí)行常用的接口。Albeit,theActioninterfaceisnotrequired.雖然,這項行動的界面是不是必需的。AnyPOJOobjectwithaexecutesignaturecanbeusedasanStruts2Actionobject.任何波霍對象與執(zhí)行的簽名可以被用來作為一個Struts的二行動的對象。ThreadingModel線程模型Struts1Actionsaresingletonsandmustbethread-safesincetherewillonlybeoneinstanceofaclasstohandleallrequestsforthatAction.Struts的一行動是單身,必須線程安全的,因為將只有一個實例一類來處理所有的請求采取行動。ThesingletonstrategyplacesrestrictionsonwhatcanbedonewithStruts1Actionsandrequiresextracaretodevelop.單身人士策略地方的限制,可以做些什么與Struts的一行動,并要求加倍小心發(fā)展。Actionresourcesmustbethread-safeorsynchronized.行動的資源,必須線程安全的或同步。Struts2Actionobjectsareinstantiatedforeachrequest,sotherearenothread-safetyissues.2Struts的行動對象是實例對于每個請求,因此沒有線程安全問題。(Inpractice,servletcontainersgeneratemanythrow-awayobjectsperrequest,andonemoreobjectdoesnotimposeaperformancepenaltyorimpactgarbagecollection.)(在實踐中,Servlet的容器,產(chǎn)生許多扔離家出走的對象,每次請求,并多一個對象不施加表現(xiàn)罰款,或影響垃圾收集)。ServletDependencyServlet的依賴Struts1ActionshavedependenciesontheservletAPIsincetheHttpServletRequestandHttpServletResponseispassedtotheexecutemethodwhenanActionisinvoked.Struts的一行動,依賴于該Servlet的空氣污染指數(shù)以來,httpservletrequest和httpservletresponse傳遞給Execute方法,當一個行動是引用。Struts2Actionsarenotcoupledtoacontainer.Struts的行動,二是不耦合的一個貨柜。MostoftentheservletcontextsarerepresentedassimpleMaps,allowingActionstobetestedinisolation.最經(jīng)常的Servlet的背景是派代表作為簡單的地圖,讓行動,以測試陷入孤立的境地。Struts2Actionscanstillaccesstheoriginalrequestandresponse,ifrequired.2Struts的行動仍然可以使用原來的請求和響應(yīng),如果需要。However,otherarchitecturalelementsreduceoreliminatetheneedtoaccesstheHttpServetRequestorHttpServletResponsedirectly.不過,其他建筑元素,減少或消除需要訪問httpservetrequest或httpservletresponse直接。Testability測試AmajorhurdletotestingStruts1ActionsisthattheexecutemethodexposestheServletAPI.一個主要障礙,以測試Struts的一行動是Execute方法暴露了Servlet的空氣污染指數(shù)。Athird-partyextension,StrutsTestCase,offersasetofmockobjectforStruts1.第三黨的擴展,Struts的testcase,提供了一套模擬對象的Struts1。Struts2ActionscanbetestedbyinstantiatingtheAction,settingproperties,andinvokingmethods.2Struts的行動可以測試實例化的行動,設(shè)置屬性,引用的方法。DependencyInjectionsupportalsomakestestingsimpler.依賴注入的支持也使測試更簡單。HarvestingInput收獲的投入Struts1usesanActionFormobjecttocaptureinput.Struts的一使用actionform對象捕獲輸入。LikeActions,allActionFormsmustextendabaseclass.一樣的行動,所有actionforms必須擴大基地,一流的。Since

otherJavaBeanscannotbeusedasActionForms,developersoftencreateredundantclassestocaptureinput.由于其他的JavaBeans不能被用來作為actionforms,開發(fā)商常常造成多余的班,以捕捉的投入。DynaBeanscanusedasanalternativetocreatingconventionalActionFormclasses,but,heretoo,developersmayberedescribingexistingJavaBeans.dynabeans可以用來作為一種替代創(chuàng)造常規(guī)actionform班,但這里太,發(fā)展商可能會redescribing現(xiàn)有的JavaBeans。

Struts2usesActionpropertiesasinputproperties,eliminatingtheneedforasecondinputobject.Struts的2使用性能的行動作為輸入屬性,不再需要第二個輸入對象。Inputpropertiesmayberichobjecttypeswhichmayhavetheirownproperties.輸入屬性可能是豐富的對象類型可能有自己的屬性。TheActionpropertiescanbeaccessedfromthewebpageviathetaglibs.行動性質(zhì)可以從網(wǎng)頁上通過taglibs。Struts2alsosupportstheActionFormpattern,aswellasPOJOformobjectsandPOJOActions.Struts的2還支持actionform模式,以及波霍形式,對象和波霍行動。Richobjecttypes,includingbusinessordomainobjects,canbeusedasinput/outputobjects.豐富的對象類型,其中包括商業(yè)利益或域?qū)ο螅梢员挥脕碜鳛檩斎?輸出對象。TheModelDrivenfeaturesimplifiestaglbreferencestoPOJOinputobjects.該modeldriven功能簡化taglb的提述,波霍投入對象。

ExpressionLanguage語言表達Struts1integrateswithJSTL,soitusestheJSTLEL.Struts的一整合與jstl,所以它使用jstl下午。TheELhasbasicobjectgraphtraversal,butrelativelyweakcollectionandindexedpropertysupport.的El已基本對象圖遍歷,但相對薄弱的收集和索引財產(chǎn)的支持。Struts2canuseJSTL,buttheframeworkalsosupportsamorepowerfulandflexibleexpressionlanguagecalled"ObjectGraphNotationLanguage"(OGNL).Struts的二可以使用jstl,但框架也支持一個更強大和靈活的語言表達所謂的“對象圖形符號語言”(ognl)。Bindingvaluesintoviews有約束力的價值觀納入意見Struts1usesthestandardJSPmechanismforbindingobjectsintothepagecontextforaccess.Struts的一使用標準的JSP機制,有約束力的物體進入該網(wǎng)頁的背景下訪問。Struts2usesa"ValueStack"technologysothatthetaglibscanaccessvalueswithoutcouplingyourviewtotheobjecttypeitisrendering.Struts的2使用“valuestack”技術(shù),使該taglibs可以訪問的價值觀沒有耦合您的看法,以對象類型,這是渲染。TheValueStackstrategyallowsreuseofviewsacrossarangeoftypeswhichmayhavethesamepropertynamebutdifferentpropertytypes.該valuestack策略允許重用的意見覆蓋的類型可能有相同的屬性名稱,但不同的屬性類型。

TypeConversion類型轉(zhuǎn)換Struts1ActionFormpropertiesareusuallyallStrings.Struts的一actionform屬性通常是所有字符串。Struts1usesCommons-Beanutilsfortypeconversion.Struts的一用途的商品-beanutils為類型轉(zhuǎn)換。Convertersareper-class,andnotconfigurableperinstance.轉(zhuǎn)換器每級的,而不是配置的每個實例。Struts2usesOGNLfortypeconversion.Struts的2使用ognl為類型轉(zhuǎn)換。Theframeworkincludesconvertersforbasicandcommonobjecttypesandprimitives.該框架包括轉(zhuǎn)換為基本和共同的對象類型和原始。Validation驗證Struts1supportsmanualvalidationviaavalidatemethodontheActionForm,orthroughanextensiontotheCommonsValidator.Struts的一支持手冊審定通過驗證方法對actionform,或通過一個擴展到商品校驗。Classescanhavedifferentvalidationcontextsforthesameclass,butcannotchaintovalidationsonsub-objects.班級可以有不同的驗證背景為同一階層,但不能鏈,以驗證就分對象。Struts2supportsmanualvalidationviathevalidatemethodandtheXWorkValidationframework.Struts的2支持手冊審定通過驗證的方法和xwork的驗證框架。TheXworkValidationFrameworksupportschainingvalidationintosub-propertiesusingthevalidationsdefinedforthepropertiesclasstypeandthevalidationcontext.該xwork的驗證框架支持鏈接驗證分為分性能的使用驗證的定義為性能一流的類型和驗證。ControlOfActionExecution控制行動的執(zhí)行Struts1supportsseparateRequestProcessors(lifecycles)foreachmodule,butalltheActionsinthemodulemustsharethesamelifecycle.Struts的一支持獨立的請求處理器(生命周期)為每個單元,但所有的行動,在該模塊必須共用相同的生命周期。Struts2supportscreatingdifferentlifecyclesonaperActionbasisviaInterceptorStacks.2Struts的支持,創(chuàng)造不同的生命周期對每行動的基礎(chǔ)上通過攔截堆疊。CustomstackscanbecreatedandusedwithdifferentActions,asneeded.自定義棧,才能創(chuàng)造和使用不同的行動,視需要。Struts/webwork的工作機制,它有哪些標簽Struts2框架的大致處理流程如下:

瀏覽器發(fā)送請求,例如請求/mypage.action、/reports/myreport.pdf等。

核心控制器FilterDispatcher根據(jù)請求決定調(diào)用合適的Action。

WebWork的攔截器鏈自動對請求應(yīng)用通用功能,例如workflow、validation或文件上傳等功能。

回調(diào)Action的execute方法,該execute方法先獲取用戶請求參數(shù),然后執(zhí)行某種數(shù)據(jù)庫操作,既可以是將數(shù)據(jù)保存到數(shù)據(jù)庫,也可以從數(shù)據(jù)庫中檢索信息。實際上,因為Action只是一個控制器,它會調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請求。

Action的execute方法處理結(jié)果信息將被輸出到瀏覽器中,可以是HTML頁面、圖像,也可以是PDF文檔或者其他文檔。此時支持的視圖技術(shù)非常多,既支持JSP,也支持Velocity、FreeMarker等模板技術(shù)。Spring部分spring工作機制1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應(yīng)用系統(tǒng)的其他模塊負責(zé)負責(zé)對請求進行真正的處理工作。2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.3.DispatcherServlet請請求提交到目標Controller4.Controller進行業(yè)務(wù)邏輯處理后,會返回一個ModelAndView5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象6.視圖對象負責(zé)渲染返回給客戶端。使用Spring的好處{AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點,稱為橫切關(guān)注點,并將它們插入到應(yīng)用程序代碼中。使用AOP后,公共服務(wù)(比如日志、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊希瑫r不會增加域?qū)ο蟮膶ο竽P偷膹?fù)雜性。IOC允許創(chuàng)建一個可以構(gòu)造對象的應(yīng)用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞倒置所表明的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個對象都是用其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)。Spring即使一個AOP框架,也是一IOC容器。Spring最好的地方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的協(xié)作對象。}spring是什么?根據(jù)你的理解詳細談?wù)勀愕囊娊?。◆目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性◆功能:使用基本的JavaBea

溫馨提示

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

評論

0/150

提交評論