



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
非常有用的SSH框架面試題Hibernate工作原理及為什么要用?原理:.讀取并解析配置文件.讀取并解析映射信息,創(chuàng)建SessionFactory.打開Sesssion.創(chuàng)建事務(wù)Transation.持久化操作.提交事務(wù).關(guān)閉Session.關(guān)閉SesstionFactory為什么要用:對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。Hibernate是ー個(gè)基于JDBC的主流持久化框架,是ー個(gè)優(yōu)秀的0RM實(shí)現(xiàn)。他很大程度的簡化DA0層的編碼工作hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從ー對一到多對多的各種復(fù)雜關(guān)系。2.Hibernate是如何延遲加載?Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對象b)集合(Collection)Hibernate3提供了屬性的延遲加載功能當(dāng)Hibernate在査詢數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒有存在與內(nèi)存中,當(dāng)程序真正對數(shù)據(jù)的操作時(shí),對象オ存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。Hibernate中怎樣實(shí)現(xiàn)類之間的關(guān)系?(如:ー對多、多對多的關(guān)系)類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都市對對象進(jìn)行操作,我們程序中把所有的表與類都映射在ー起,它們通過配置文件中的many-to-one>one-to-many、many-to-many>說下Hibernate的緩存機(jī)制.內(nèi)部緩存存在Hibernate中又叫一級緩存,屬于應(yīng)用事物級緩存.二級緩存:a)應(yīng)用及緩存b)分布式緩存條件:數(shù)據(jù)不會(huì)被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同ー數(shù)據(jù)被系統(tǒng)頻繁使用、非關(guān)鍵數(shù)據(jù)c)第三方緩存的實(shí)現(xiàn).Hibernate的査詢方式Sql、Criteria,objectcomptositionHql:1、屬性查詢2、參數(shù)查詢、命名參數(shù)査詢3、關(guān)聯(lián)査詢4、分頁査詢5、統(tǒng)計(jì)函數(shù).如何優(yōu)化Hibernate?.使用雙向ー對多關(guān)聯(lián),不使用單向ー對多.靈活使用單向一對多關(guān)聯(lián).不用ー對ー,用多對ー取代.配置對象緩存,不使用集合緩存.ー對多集合使用Bag.多對多集合使用Set.繼承類使用顯式多態(tài).表字段要少,表關(guān)聯(lián)不要怕多,有二級緩存撐腰Struts工作機(jī)制?為什么要使用Struts?工作機(jī)制:Struts的工作流程:在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當(dāng)ActionServlet接收到ー個(gè)客戶請求時(shí),將執(zhí)行如下流程.(1)檢索和用戶請求匹配的ActionMapping實(shí)例,如果不存在,就返回請求路徑無效信息;(2)如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對象中;(3)根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate。方法;(4)如果ActionForm的validate。方法返回nul!或返回一個(gè)不包含ActionMessage的ActuibErrors對象,就表示表單驗(yàn)證成功;(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法;(6)Action的execute。方法返回ー"t*ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指向的JSP組件;-(7)ActionForward對象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁,返回給客戶:為什么要用:JSP、Servlet.JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個(gè)規(guī)則、ー個(gè)把這些技術(shù)組織起來的規(guī)則,這就是框架,Struts便應(yīng)運(yùn)而生?;赟truts開發(fā)的應(yīng)用由3類組件構(gòu)成:控制器組件、模型組件、視圖組件Struts的validate框架是如何驗(yàn)證的?在struts配置文件中配置具體的錯(cuò)誤提示,再在FormBean中的validate。方法具體調(diào)用。說下Struts的設(shè)計(jì)模式MVC模式:web應(yīng)用程序啟動(dòng)時(shí)就會(huì)加載并初始化ActionServler。用戶提交表單時(shí),ー個(gè)配置好的ActionForm對象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xm!文件配置好的設(shè)置決定是否需要表單驗(yàn)證,如果需要就調(diào)用ActionForm的Validate〇驗(yàn)證后選擇將請求發(fā)送到哪個(gè)Action,如果Action不存在,ActionServlet會(huì)先創(chuàng)建這個(gè)對象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回ー1bAetionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動(dòng)態(tài)的網(wǎng)頁,返回給客戶。spring工作機(jī)制及為什么要用?springmvc請所有的請求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)責(zé)對請求進(jìn)行真正的處理工作。DispatcherServlet査詢ー個(gè)或多個(gè)HandlerMapping?找到處理請求的Controller.DispatcherServlet請請求提交到目標(biāo)ControllerController進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回ー個(gè)ModelAndViewDispathcher査詢ー個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象視圖對象負(fù)責(zé)渲染返回給客戶端。為什么用:{AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn),稱為橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。使用A0P后,公共服務(wù)(比如日志、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊?同時(shí)不會(huì)增加域?qū)ο蟮膶ο竽P偷膹?fù)雜性。I0C允許創(chuàng)建一個(gè)可以構(gòu)造對象的應(yīng)用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞倒置所表明的,I0C就像反過來的JNDIo沒有使用ー堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每ー個(gè)對象都是用其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)〇Spring即使ー個(gè)AOP框架,也是ーI0C容器。Spring最好的地方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對象)。然后可以很容易地在需要時(shí)替換具有類似接口的協(xié)作對象。}其它知識(shí)點(diǎn):不會(huì)涉及到2級緩存以及hql.Configuration讀取hibernate,cfg.xml,并把.hbm.xml文件交給HbmBinder做第一次處理,HbmBinder根據(jù).hbm.xm!解析出PersistentClass,Collection,然后在創(chuàng)建SessionFactory的時(shí)候,會(huì)對Collection做第2次處理塞入關(guān)聯(lián)PersistentClass根據(jù).hbm.xm!產(chǎn)生的描述要持久化的類的信息的類.主要的實(shí)例變量包括List<Property>propertiesProperty對象里的有個(gè)Value屬性value,通過value來描述該property和數(shù)據(jù)庫里的哪些列對應(yīng)以及獲得該property對應(yīng)的typeValue主要分為SimpleValue,Collection,Component,ToOneSimpleValue主要包括Table和Columns屬性,用于描述簡單屬性或單主鍵Collection主要屬性包括collectionTable表示Collection里面element對象所對應(yīng)的Tablekey表示CollectionTable里的哪幾列和Collectionowner所對應(yīng)的表的主鍵做關(guān)聯(lián)element,描述了主表(referencingTable),從表的EnityName,以及從表對應(yīng)的PersistentClassComponent可以用來描述多主鍵,通過屬性properties來表示ToOne包括被引用的屬性名,被引用的實(shí)體名,columns,(被引用的屬性名不能和columns同時(shí)設(shè)置),用于OneToOne,ManyToOneSessionFactory在創(chuàng)建SessionFactory的時(shí)候,會(huì)根據(jù)Configuration里Classes和Collections,創(chuàng)建EntityPersister和CollectionPersister.SessionFactory會(huì)緩存這些persisters.EnityPersistenter的key是EntityName,CollectionPersister的key是entityName+propertyNameEntityPersister分為SingleTableEntityPersister(ー個(gè)實(shí)體ー個(gè)表/ー個(gè)類繼承結(jié)構(gòu)ー個(gè)表)通過一個(gè)字段做標(biāo)識(shí)JoinedSubclassEntityPersister(每個(gè)子類ー個(gè)表)UnionSubclassEntityPersister(每個(gè)具體類ー個(gè)表)CollectionPersister封裝對ー個(gè)Collection的crud操作.不過做insert,update,delete,recreate的時(shí)候,會(huì)判Inverse是否為false.如果為falseオ會(huì)執(zhí)行相應(yīng)的操作,表示是由Collection維護(hù)關(guān)系.如果!nverse==true,表示關(guān)聯(lián)關(guān)系是由多端來維護(hù)(即直接通過操作Collection里的element來維護(hù),而不是通過操作Collection來維護(hù))則該CollectionPersister不會(huì)做任何操作Type主要包括對SqlTypes的封裝,以及CollectionType,EntityType(ManyToOneType,OneToOneType),主要接口有nullSafeGet(從ResultSet拼裝出對象),nullSafeSet(給PreparedStatementsetParameter).可以通過Value.getType()獲得Type對于EntityType,CollectionType,就是通過resolve方法從ResultSet中拼裝出對象EntityType的nullSafeSet,就是獲取One端對象的主鍵所對應(yīng)的Type進(jìn)行nullSafeSetCollectionType沒有實(shí)現(xiàn)nullSafeSet,通過保存時(shí)的Cascade或者CollectionPersister,將Collection的Element一個(gè)ー個(gè)的set也可以自定義Type,實(shí)現(xiàn)UserType接口具體見/framework/hibernate/reference_v3_zh-cn/inheritance.html封裝對ー個(gè)entity的crud操作,在創(chuàng)建EntityPersister實(shí)例過程中,會(huì)產(chǎn)生crud的sql,可以在以后的操作提高效率。不過如果是DynamicInsert,DynamicUpdate,則會(huì)根據(jù)對象修改的屬性動(dòng)態(tài)的生成sqlDAS不支持類繼承的映射,因此只會(huì)用到SingleTableEntityPersisterStatefulPersistenceContextStatefulPersistenceContext和Sessionlmpl是 對應(yīng)的,會(huì)緩存通過Sessionlmp!操作過的對象,包括entity和collection,主要屬性有EntitiesByKeykey=EntityKey,value=entity.(EntityKey=id+EntityPersister+EntityModeentityMode))entityEntrieskey=entity,value=EntityEntry.EntityEntry用于描述ー個(gè)對象的持久化狀態(tài),如DELETED,MANAGED等等CollectionsByKeykey=CollectionKey,value=PersistentCollectionCollectionKey=CollectionPersister+key+EntityMode,這個(gè)Key是通過Collection,value.getType.nullSafeGet()得到的PersistentCollection是hibernate對于Collection的封裝,主要用于實(shí)現(xiàn)延遲加載collectionEntrieskey=PersistentCollection,value=CollectionEntryStatefulPersistenceContext的主要用途可以實(shí)現(xiàn)對象之間的關(guān)聯(lián)關(guān)系的設(shè)置,動(dòng)態(tài)的更新,以及對緩存的數(shù)據(jù)無需顯示調(diào)用save,update,delete的方法就可以實(shí)現(xiàn)這些操作,是因?yàn)樵赥ransaction,commit()的時(shí)候會(huì)調(diào)用session,flush。,會(huì)保證內(nèi)存對象狀態(tài)和數(shù)據(jù)庫的一致性Cascade,CascadeStyle,CascadingAction在Cascade執(zhí)行級聯(lián)操作的時(shí)候,會(huì)通過CascadeStyle.doCascade(CascadingAction)來判斷是否可以執(zhí)行cascade,并且當(dāng)要保存的對象有外鍵約束的關(guān)聯(lián)對象時(shí)候會(huì)通過ForeignKeyDirection來判斷是應(yīng)該在保存該對象之前要保存關(guān)聯(lián)對象還是在保存該對象之后再保存關(guān)聯(lián)對象Loader,CriteriaQueryTranslator,Criteria,QueryParameters,CriteriaJoinWalker用于Criteriaapi對實(shí)體的查詢Criteria是ー個(gè)査詢entity的api??梢栽O(shè)置類似where條件的表達(dá)式,Select字段,order等等當(dāng)使用Criteria査詢時(shí),首先會(huì)創(chuàng)建CriteriaLoader,CriteriaLoader會(huì)通過CriteriaQueryTranslator從Criteria中得到査詢參數(shù)QueryParameters,通過CriteriaJoinWalker把Criteria變成sql,然后執(zhí)行査詢ActionQueue當(dāng)調(diào)用session對實(shí)體進(jìn)行insert,update,delete的時(shí)候,只是會(huì)創(chuàng)建相應(yīng)的action放入ActionQueue,然后在session,flush。的時(shí)候オ會(huì)真正操作數(shù)據(jù)庫ActionQueue的執(zhí)行順序:executeActions(insertions);executeActions(updates);executeActions(collectionRemovals);executeActions(collectionUpdates);executeActions(collectionCreations):executeActions(deletions);Tuplizer用于根據(jù)entityname實(shí)例化出對象,以及set/getpropertyhibernate內(nèi)置的有PojoEntityTuplizer,Dom4jEntityTuplizerDAS是在hibernate基礎(chǔ)之上實(shí)現(xiàn)了DataObject的持久化,支持DataObject對象之間的關(guān)聯(lián),延遲加載,級聯(lián),控制反轉(zhuǎn),不支持DataObject的繼承1.新實(shí)現(xiàn)了一個(gè)SDOEntityTuplizer支持創(chuàng)建DataObject,以及set/getDataObject的屬性SDOEntityTuplizer實(shí)現(xiàn)抽象類中規(guī)定的如下方法SDOEntityTuplizer類的buiIdinstantiator方法用來根據(jù)mapping信息來為相應(yīng)的實(shí)體建立不同的構(gòu)造器,我們用SDOEntitylnstantiator來實(shí)現(xiàn)SDO的構(gòu)造器:2其中SDOComponentlnstantiator是用來當(dāng)實(shí)體有復(fù)合主鍵用于實(shí)例化表示主鍵的類3PropertyAccessor是Hibernate中定義的ー個(gè)接口,用來表達(dá)在訪問mapping的實(shí)體對象的屬性的時(shí)候使用的“屬性訪問器”。它有兩個(gè)相關(guān)的接口:Getter接口和Setter接口。DASPropertyAccessor的內(nèi)部結(jié)構(gòu)如下圖所示:其中g(shù)etGetter方法和getSetter方法是PropertyAccessor接口定的規(guī)格。DASGetter實(shí)現(xiàn)Getter接口,DASSetter類實(shí)現(xiàn)Setter接口。4自定義type?支持blob,clob的存儲(chǔ)BlobFileType:從ー個(gè)文件路徑讀取文件存入數(shù)據(jù)庫blob字段.從數(shù)據(jù)庫讀取blob字段,生成文件放在臨時(shí)目錄,返回路徑BlobByteArrayType:把ー個(gè)byte口數(shù)組存入blob字段.從數(shù)據(jù)庫讀取blob字段放入byte[]ClobFileType:從ー個(gè)文件路徑讀取文件存入數(shù)據(jù)庫clob字段.從數(shù)據(jù)庫讀取clob字段,生成文件放在臨時(shí)目錄,返回路徑ClobStringType:把ー個(gè)String存入blob字段.從數(shù)據(jù)庫讀取blob字段放入String5對査詢實(shí)體的支持增加一個(gè)査詢實(shí)體定義文件.dbquery.因?yàn)闁嗽儗?shí)體沒有唯一標(biāo)識(shí),所以默認(rèn)的id的是"$queryEntityId$”.用戶也可以自己指定一個(gè)列做唯一標(biāo)識(shí).在Loader.prepareQueryStatement()里增加轉(zhuǎn)換帶査詢實(shí)體的Sql.SelectFragment.addColumn()做了判斷,如果列名是"$queryEntityId$”,査詢的column就替換成‘queryEntityld,常量.在Loader.getRowO增加判斷如果key.getldentifier()是queryEntityld的話,則不做檢査,看內(nèi)存是否存在.AbstractEntityPersister.getDatabaseSnapshot()里修改生成的査詢語句,如果有QueryEntity,則用定義的sql替換QueryEntityJava一一SSH(MVC)1.談?wù)勀鉳vc的理解MVC是Model—View—Controler的簡稱。即模型一視圖ー控制器。MVC是ー種設(shè)計(jì)模式,它強(qiáng)制性的把應(yīng)用程序的輸入、處理和輸出分開。MVC中的模型、視圖、控制器它們分別擔(dān)負(fù)著不同的任務(wù)。視圖:視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并接受用戶的輸入。視圖不進(jìn)行任何業(yè)務(wù)邏輯處理。模型:模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理。相當(dāng)于JavaBean。ー個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。這提高了應(yīng)用程序的重用性控制器:當(dāng)用戶單擊Web頁面中的提交按鈕時(shí),控制器接受請求并調(diào)用相應(yīng)的模型去處理請求。然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。MVC的處理過程:首先控制器接受用戶的請求,調(diào)用相應(yīng)的模型來進(jìn)行業(yè)務(wù)處理,并返回?cái)?shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。并通過視圖呈現(xiàn)給用戶。Strutsstrutsl.2和struts2.0的區(qū)別?如何控制兩種框架中的單例模式?strutsl.2和struts2.0的對比a、Action類:strutsl.2要求Action類繼承一個(gè)基類。struts2.0Action要求繼承ActionSupport基類b、線程模式strutsl.2Action是單例模式的并且必須是線程安全的,因?yàn)閮H有一個(gè)Action的實(shí)例來處理所有的請求。單例策略限制了Strutsl.2Action能做的事情,并且開發(fā)時(shí)特別小心。Action資源必須是線程安全的或同步的。struts2.0Action為每ー個(gè)請求產(chǎn)生一個(gè)實(shí)例,因此沒有線程安全問題。c、Servlet依賴strutsl.2Action依賴于ServletAPI,因?yàn)楫?dāng)ー個(gè)Action被調(diào)用時(shí)HttpServletRequest和HttpServletResponse被傳遞給execut方法。struts2.0Action不依賴于容器,允許Action脫離容器單獨(dú)測試。如果需要,Struts2Action仍然可以訪問初始的Request和Response。但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性。d、可測性測試strutsl.2Action的ー個(gè)主要問題是execute方法暴露了ServletAPI(這使得測試要依賴于容器)。一個(gè)第三方擴(kuò)展:strutsTestCase提供了一套strutsl.2的模擬對象來進(jìn)行測試。Struts2.0Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”也使得測試更容易。項(xiàng)目中為什么使用SSH.使用Struts是因?yàn)閟truts是基于MVC模式的,很好的將應(yīng)用程序進(jìn)行了分層,使開發(fā)者更關(guān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn);第二,struts有著豐富的taglib,如能靈活運(yùn)用,則能大大提高開發(fā)效率。.使用Hibernate:因?yàn)閔ibernate為Java應(yīng)用提供了一個(gè)易用的、高效率的對象關(guān)系映射框架。hibernate是個(gè)輕量級的持久性框架,功能豐富。.使用Spring:因?yàn)閟pring基于IoC(InversionofControl,反向控制)和AOP構(gòu)架多層j2ee系統(tǒng)的框架,但它不強(qiáng)迫你必須在每ー層中必須使用Spring,因?yàn)樗K化的很好,允許你根據(jù)自己的需要選擇使用它的某ー個(gè)模塊:采用IoC使得可以很容易的實(shí)現(xiàn)bean的裝配,提供了簡潔的A0P并據(jù)此實(shí)現(xiàn)事務(wù)管理(TranscationManagment)?等等struts與spring是如何繼承的不懂題目之意:是否是說的struts的action都繼承自org.apache,struts,action.Action而Spring中的維承就不清楚了。struts如何實(shí)現(xiàn)國際化以下以兩國語言(中文,英文)為例:1,在工程中加入Struts支持.編輯ApplicationRperties文件,在其中加入要使用國際化的信息,例如:lable.welcome,china=Weicome!!!.創(chuàng)建英文資源文件ApplicationRperites.創(chuàng)建臨時(shí)中文資源文件ApplicationResource_perites例如:lable.welcom.china=中國歡迎您!.對臨時(shí)中文資源文件進(jìn)行編碼轉(zhuǎn)換。可以使用myeclipse的插件,也可以在dos下執(zhí)行:native2ascii -encoding gb2312ApplicationResource_pertiesApplicationResource_zh_CN.properties.在jsp中加入struts的bean標(biāo)記庫く%?tagliburi=*/WEB-INF/struts_bean.tld*prefix="bean"%>顯不信息:<bean:messagekey="label,welcome.china*>可以在struts-config.xm!文件中定義多個(gè)資源包,而每個(gè)資源包可使用key屬性指定包的名稱。struts2.0的常用標(biāo)簽.往action里傳值:<inputname="userNametype="text"class二input6*size="15">.顯示標(biāo)簽property用于輸出指定值:<s:propertyvalue="userName"/>.用于從頁面往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>.迭代くs:iterator)用于將List、Map、ArrayList等集合進(jìn)行循環(huán)遍歷<s:iteratorvalue=userList"id二"user"status=*u"><s:propertyvalue二"userName"/X/a>く/s:iterator>.URL地址標(biāo)簽,くs:url〉用于生成一個(gè)URL地址,可以通過URL標(biāo)簽指定的くs:param>子元素向URL地址發(fā)送請求參數(shù)<s:urlaction=**><s:paramname= value=></s:param></s:url>.超鏈接<ahref>?般和くs:url>標(biāo)簽ー起使用,用于帶多個(gè)參數(shù)。<ahref="<s:urlaction=**><s:paramname=""value=*"></s:param><s:paramname二 value=></s:param><s:paramname二""value=""></s:param></s:url>つ超鏈接く/a>.set標(biāo)簽,用于將某個(gè)值放入指定的范圍內(nèi)。例如application,session等。<s:setname="user"value="userName"scope="request"/>struts中怎么配置form-bean、action、tiles此處配置的是strutsl.2的form-bean配置:(在配置文件struts-config.xml中):<form-beans><form-beanname二 type二X/form-bean>く/form-beans〉name:指定form的名字;type指定form的類型:包名+類名;action配置:(在配置文件struts-config.xm!中)<action-mappings><actionpatハニ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時(shí),指定調(diào)用分發(fā)Action中的方法名;scope:Action的范圍;type:Action的類型:包名+類名:tites配置:.新建一個(gè)tiles-defs.xml文件,并在其中做如下配置:<?xmlversion="l.0"encoding二"UTF-8"?><!DOCTYPEtiles-definitionsPUBLIC"-//ApacheSoftwareFoundation//DTDTilesConfiguration1.1//EN*Ahttp://Jakarta,apache,org/struts/dtds/tiles-config_l_l.dtd"><tiles_definitions><definitionname二"member-definitionpath二/Jsp/layout.jsp"><putname二topvalue二"/mTop.d〇"/〉<putname二'left"value二"/mLeft.d〇"/〉<putname二"main"value二"/defaultMmain.do/></definition></tiles_definitions>.在web.xm!和struts-config.xm!和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_va1idate"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>.調(diào)用Tiles組件Tiles組件是通過StrutsAction來調(diào)用的,在struts-config.xml中做如下action配置:<actionpath=/member"parameter="member-definition"type="org.apache,struts,actions.ForwardAction*/>logic標(biāo)簽有哪幾個(gè)?此標(biāo)簽庫可以分為三種類型:條件、循環(huán)、轉(zhuǎn)發(fā)/重定向。.條件類型(沒標(biāo)注的都比較簡單)logic:empty,logic:notEmpty;Iogic:equal,logic:notEqual,logic:lessThan,logic:greaterThan,logic:lessEqual,logic:greaterEqual;logic:present,logic:notPresent;logic:match,logic:notMatch:比較兩字符串是否相等,可以比較字符串的開始的、結(jié)尾的或其中的某個(gè)部分。location屬性:指定從某個(gè)位置開始進(jìn)行比較。.循環(huán)類型logic:iterate.轉(zhuǎn)發(fā)/重定向類型logic:forward和logic:redirectlogic:forward標(biāo)簽和jsp:forward標(biāo)簽相似,但它可以使用globalforward中的ー個(gè)ActionForward例如:くlogic:forwardname=*login"/>與上面相關(guān)的globalforward中的代碼:くglobal-forwards)<forwardname="login"path=*/loginForm,jsp"/></globa1-forwards>logic:redirect標(biāo)簽和上面的標(biāo)簽類似,但它默認(rèn)調(diào)用的方法是response.sendRedirect(),取代了上面的requestDispatcher.forward()〇最大的不同是它支持所有html:Iink標(biāo)簽的屬性,所以你能夠指定request參數(shù):くlogic:redirectname="loginparamId="employeeId"paramName="employee"property="id"/>在MVC框架下,不推薦使用這兩個(gè)標(biāo)簽,你應(yīng)該是從controller中選擇下ー個(gè)view,而不是從view中選擇.在Jsp頁面中不要過多的使用!ogic標(biāo)簽。action是單實(shí)例還是多實(shí)例,為什么?action是單實(shí)例的。當(dāng)多個(gè)用戶訪問ー個(gè)請求的時(shí)候,服務(wù)器內(nèi)存中只有一個(gè)與之對應(yīng)的action類對象。因?yàn)楫?dāng)服務(wù)器第一次加載struts的配置文件的時(shí)候,創(chuàng)建了一個(gè)Action后,每發(fā)送ー個(gè)請求,服務(wù)器都會(huì)先去檢索相應(yīng)的范圍內(nèi)(request,session)是否存在這樣ー個(gè)action實(shí)例,如果存在,則使用這個(gè)實(shí)例,如果不存在,則創(chuàng)建一個(gè)action實(shí)例。dispatchAction是用什么技術(shù)實(shí)現(xiàn)的?DispatchAction是Aciton的ー個(gè)子類,主要解決了一個(gè)請求處理多個(gè)功能的問題普通的Action你只能寫execute方法來處理業(yè)務(wù),而想用這ー個(gè)Action處理多個(gè)任務(wù),你必須要請求參數(shù)進(jìn)行解析,用訐語句塊來處理舉ー個(gè)小例子:有如下ー個(gè)url:h11p://1oca1host:8080/myApp/addllserAction.do如果你處理這個(gè)url的是ー個(gè)普通的Action,那么就只能在execute里面執(zhí)行插入的相關(guān)操作,如果換成一下url:http://loca1host:8080/myApp/UserAction.do?method=add你就應(yīng)該根據(jù)method對象的值來執(zhí)行相應(yīng)的操作,如再有一個(gè)路徑http://localhost:8080/myApp/UserAction.do?method=delete這個(gè)還可以使用那個(gè)Action來處理的,只是多判斷一下而已.如果你用DispatchAction,就簡單多了,所以dispatchAction還是用的Action的這么ー個(gè)技術(shù)。struts2.0的mvc模式?與strutsl.0的區(qū)別?struts2的mvc模式:當(dāng)用戶在頁面提交用戶請求時(shí),該請求需要提交給struts2的控制器處理。struts2的控制器根據(jù)處理結(jié)果,決定將哪個(gè)頁面呈現(xiàn)給客戶端。與strutsl最大的不同是:struts2的控制器。struts2的控制器不再像strutsl的控制器,需要繼承一個(gè)Action父類,甚至可以無需實(shí)現(xiàn)任何接口,struts2的Action就是ー個(gè)普通的POJO。實(shí)際上,Struts2的Action就是ー個(gè)包含execute方法的普通Java類該類里包含的多個(gè)屬性用于封裝用戶的請求參數(shù)。STRUTS的配置文件是什么?struts-config.xml請寫出Struts的工作原理。struts的處理流程。ー、ActionServlet的初始化ActionServlet作為Struts組件的前端控制器,由于web.xml的相應(yīng)配置:く!oad-on_startup>0</1oad-on-startup)在應(yīng)用ー加載時(shí)即會(huì)被實(shí)例化并調(diào)用其init方法,init方法所做的主要工作有二:.加載struts配置文件,并創(chuàng)建用于封裝配置信息的ModuleConfig對象.加載資源文件,并創(chuàng)建用于封裝資源文件的MessageResources對象需要注意兩點(diǎn):如果web.xml有多模塊配置,將創(chuàng)建多個(gè)ModuleConfig對象和MessageResources對象分別用于封裝各個(gè)模塊的struts配置文件和資源文件。針對各個(gè)模塊所創(chuàng)建的ModuleConfig對象和MessageResources對象將存儲(chǔ)在ServletContext中,對應(yīng)的屬性名中有該模塊名稱的相應(yīng)標(biāo)識(shí)。另外,如果有相應(yīng)配置的話,init方法還將初始化數(shù)據(jù)源和Plugin二、ActionServlet的process所有形如?.do的請求(根據(jù)web.xml中的相關(guān)配置)將提交給ActionServlet,最終將調(diào)用其process方法〇process方法的主要工作有三:根據(jù)請求信息獲知所請求的模塊名稱,從ServletContext中獲得與請求模塊對應(yīng)的的ModuleConfig對象,并存儲(chǔ)到request中。根據(jù)模塊信息獲得相應(yīng)的RequestProcessor對象,ー個(gè)模塊對應(yīng)ー個(gè)RequestProcessor對象,RequestProcessor對象將關(guān)聯(lián)與所屬模塊對應(yīng)的ModuleConfig對象。調(diào)用RequestProcessor對象的process方法,將request和response作為參數(shù)傳遞給它。二、RequestProcessor的processRequestProcessor對象的process方法的主要工作有五步:調(diào)用自己的processPreprocess(request,response)方法,該方法不進(jìn)行任何操作,用于子類重寫擴(kuò)展其功能。獲得與請求地址所匹配的ActionMapping對象,AcionMapping對象用于封裝ー個(gè)特定acion的配置信息0根據(jù)AclionMapping中的配置信息獲得ActionForm對象(該對象將緩存到request或session中),并將表單數(shù)據(jù)填充到ActionForm中,然后根據(jù)ActionMapping的配置決定是否驗(yàn)證ActionForm?如果驗(yàn)證,將調(diào)用ActionForm的validate方法,若其返冋的ActionErros對象中包含ActionMessage對象則表示驗(yàn)證失敗,將轉(zhuǎn)向action配置信息input屬性所指示的地址。如果ActionForm無需驗(yàn)證或驗(yàn)證通過將創(chuàng)建并緩存與請求地址匹配的Action對象,將ActionMapping
對象、ActionForm對象、request和response作為參數(shù)調(diào)用其execute方法。根據(jù)Action對象的execute方法返回的ActionForward對象,將請求轉(zhuǎn)發(fā)或重定向到該ActionForward所封裝的地址。用struts+hibernate做ー個(gè)增刪査改(機(jī)試)Struts2.0與Strutsl.x有何區(qū)別。特征 Struts特征 Struts的一Struts的2Struts的Struts的ー要求采取行動(dòng)班,以延長ー個(gè)抽
行動(dòng)班象的基類。ー個(gè)共同的問題在Struts的ー,
是編程抽象類而不是接口。12Struts的行動(dòng),す龐實(shí)施ー項(xiàng)行動(dòng)的界面,
隨著其他接口,使可選和定制服務(wù)。Struts的
2提供了相應(yīng)的actionsupport一流的執(zhí)行常用
的接口。雖然,這項(xiàng)行動(dòng)的界面是不是必需的。
任何波霍對象與執(zhí)行的簽名可以被用來作為一
個(gè)Struts的二行動(dòng)的對象。線程模型Struts的一行動(dòng)是單身,必須線程安全的,因?yàn)閷⒅挥幸粋€(gè)實(shí)例ー類來處理所有的請求采取行動(dòng)。單身人士策略地方的限制,可以做些什么與線程模型Struts的一行動(dòng)是單身,必須線程安全的,因?yàn)閷⒅挥幸粋€(gè)實(shí)例ー類來處理所有的請求采取行動(dòng)。單身人士策略地方的限制,可以做些什么與Struts的一行動(dòng),并要求加倍小心發(fā)展。行動(dòng)的資源,必須線程安全的或同步。2Struts的行動(dòng)對象是實(shí)例對于每個(gè)請求,因
此沒有線程安全問題。(在實(shí)踐中,Servlet
的容器,產(chǎn)生許多扔離家出走的對象,每次請求,
并多一個(gè)對象不施加表現(xiàn)罰款,或影響垃圾收
集)。Struts的一行動(dòng),依賴于該Struts的一行動(dòng),依賴于該Servlet的空氣Servlet污染指數(shù)以來,httpservletrequest和的依賴httpservletresponse傳遞給Execute方法,當(dāng)ー個(gè)行動(dòng)是引用。Struts的行動(dòng),二是不耦合的ー個(gè)貨柜。最經(jīng)常的Servlet的背景是派代表作為簡單的地圖,讓行動(dòng),以測試陷入孤立的境地。2Struts的行動(dòng)仍然可以使用原來的請求和響應(yīng),如果需
要。不過,其他建筑元素,減少或消除需要訪
問httpservetrequest或httpservletresponse
直接。測試ー個(gè)主要障礙,以測試Struts的一行動(dòng)是
Execute方法暴露了Servlet測試ー個(gè)主要障礙,以測試Struts的一行動(dòng)是
Execute方法暴露了Servlet的空氣污染指
數(shù)。第三黨的擴(kuò)展,Struts/
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高中化學(xué)新教材同步 必修第一冊 第3章 第2節(jié) 實(shí)驗(yàn)活動(dòng)2 鐵及其化合物的性質(zhì)
- 【四川卷】四川省德陽市高中2022級(2025屆)高三質(zhì)量監(jiān)測考試(二)(德陽二診)(2.21-2.23)英語試卷答案
- 傾廢航行數(shù)據(jù)記錄儀戰(zhàn)略市場規(guī)劃報(bào)告
- 鎳精礦戰(zhàn)略市場規(guī)劃報(bào)告
- 信鴿教練合同范本
- 加盟 轉(zhuǎn)讓合同范本
- 值守合同范本
- 中國學(xué)生發(fā)展核心素養(yǎng)心得體會(huì)
- 臺(tái)車出售合同范本
- 水利工程師水力學(xué)試題(附參考答案)
- 2025天津市安全員-B證考試題庫附答案
- 二年級下冊數(shù)學(xué)口算題-可打印
- 新風(fēng)施工合同
- 2025-2030年園藝修剪機(jī)器人行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 人教版四年級數(shù)學(xué)下冊第四單元測試卷(含答案)
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑工程測量》模擬練習(xí)試題庫(含答案)
- 2023年中國綜合社會(huì)調(diào)查調(diào)查手冊
- 2024-2027年中國網(wǎng)絡(luò)安全評估行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報(bào)告
- 失智老年人照護(hù)X證書制度試點(diǎn)工作養(yǎng)老護(hù)理職業(yè)和失智老人照護(hù)員工種的發(fā)展講解
- 2025年湖南食品藥品職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 北師大版二年級數(shù)學(xué)下冊各單元測試卷
評論
0/150
提交評論