更新時(shí)間:2020-10-30 10:49:06 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3242次
框架一直都是java編程技術(shù)學(xué)習(xí)中的重點(diǎn),Struts2是個(gè)非常優(yōu)秀的開源框架,一名java程序員要求能用Struts2框架進(jìn)行開發(fā),所以在java面試題中也會(huì)經(jīng)常出現(xiàn)對(duì)struts2知識(shí)的考察,下面整理了經(jīng)典struts2面試題,這些題目中包含的是常考struts2框架知識(shí)點(diǎn),有面試需要的朋友們可以看看下面總結(jié)的struts2面試題。
1、描述Struts2的工作原理是怎樣的?
答:客戶端發(fā)送請(qǐng)求→請(qǐng)求經(jīng)過(guò)一系列過(guò)濾器→FilterDispatcher通過(guò)ActionMapper來(lái)決定這個(gè)Request需要調(diào)用哪個(gè)Action→FilterDispatcher把請(qǐng)求的處理交給ActionProxy→通過(guò)ConfigurationManager詢問(wèn)Struts配置文件(Struts.xml),找到需要調(diào)用的Action類→ActionProxy創(chuàng)建一個(gè)ActionInvocation的實(shí)例→調(diào)用Action→執(zhí)行完畢,返回結(jié)果
2、Struts2有哪些優(yōu)點(diǎn)?
答:(1)在軟件設(shè)計(jì)上Struts2的應(yīng)用可以不依賴于Servlet API和struts API,Struts2的這種設(shè)計(jì)屬于無(wú)侵入式設(shè)計(jì);(2)攔截器,實(shí)現(xiàn)如參數(shù)攔截注入等功能;(3)類型轉(zhuǎn)換器,可以把特殊的請(qǐng)求參數(shù)轉(zhuǎn)換成需要的類型;(4)多種表現(xiàn)層技術(shù),如:JSP、freeMarker、Velocity等;(5)Struts2的輸入校驗(yàn)可以對(duì)指定某個(gè)方法進(jìn)行校驗(yàn);(6)提供了全局范圍、包范圍和Action范圍的國(guó)際化資源文件管理實(shí)現(xiàn);(7)實(shí)現(xiàn)MVC模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn),有豐富的tag可以用,大大提高了開發(fā)效率。
3、在struts2中如何實(shí)現(xiàn)轉(zhuǎn)發(fā)和重定向?
答:在struts.xml中配置type="redirect"(重定向);type="redirectAction"(重定向);type="dispatcher";type="chain";(請(qǐng)求轉(zhuǎn)發(fā))
4、Struts2中的type類型有哪些?
答:chain、redirec、,redirectAction、json、dispatcher。
5、struts2默認(rèn)能解決get和post提交方式的亂碼問(wèn)題嗎?
答:不能。struts.i18n.encoding=UTF-8屬性值只能解析POST提交下的亂碼問(wèn)題。
6、攔截器和過(guò)濾器的區(qū)別有哪些?
答:(1)攔截器是基于java反射機(jī)制的,而過(guò)濾器是基于函數(shù)回調(diào)的;(2)過(guò)濾器依賴于servlet容器,而攔截器不依賴于servlet容器;(3)攔截器只能對(duì)Action請(qǐng)求起作用,而過(guò)濾器則可以對(duì)幾乎所有請(qǐng)求起作用;(4)攔截器可以訪問(wèn)Action上下文、值棧里的對(duì)象,而過(guò)濾器不能;(5)在Action的生命周期中,攔截器可以多次調(diào)用,而過(guò)濾器只能在容器初始化時(shí)被調(diào)用一次。
7、ActionContext、ServletContext、pageContext的區(qū)別?
答:(1)ActionContext是當(dāng)前的Action的上下文環(huán)境,通過(guò)ActionContext可以獲取到request、session、ServletContext等與Action有關(guān)的對(duì)象的引用;(2)ServletContext是域?qū)ο螅粋€(gè)web應(yīng)用中只有一個(gè)ServletContext,生命周期伴隨整個(gè)web應(yīng)用;(3)pageContext是JSP中的最重要的一個(gè)內(nèi)置對(duì)象,可以通過(guò)pageContext獲取其他域?qū)ο蟮膽?yīng)用,同時(shí)它是一個(gè)域?qū)ο螅饔梅秶会槍?duì)當(dāng)前頁(yè)面,當(dāng)前頁(yè)面結(jié)束時(shí),pageContext銷毀,生命周期是JSP四個(gè)域?qū)ο笾凶钚〉摹?/p>
8、Struts2中Action配置的注意事項(xiàng)有哪些?
答:需要注意的是(1)name包名稱,在struts2的配置文件中,包名不能重復(fù),name并不是真正包名,只是為了管理Action;(2)namespace和 的name屬性,決定Action的訪問(wèn)路徑 (以/開始 ) ;(3)extends繼承哪個(gè)包,通常開發(fā)中繼承struts-default包(struts-default包在 struts-default.xml 中定義 )。
9、Struts2的封裝方式有哪些?
答:一是屬性封裝:(1)在action中設(shè)置成員變量,變量名與表單中的name屬性值相同;(2)生成變量的set方法。
二是模型驅(qū)動(dòng)(常用):(1)action實(shí)現(xiàn)ModeDriven接口;(2)在action 里創(chuàng)建實(shí)體類對(duì)象;(3)實(shí)現(xiàn)接口的getModel方法并返回所創(chuàng)建的對(duì)象。
三是表達(dá)式封裝:(1)在action中聲明實(shí)體類;(2)生成實(shí)體類的set和get方法;(3)在表單輸入項(xiàng)的name屬性值里面寫表達(dá)式。
10、Action和攔截器線程安全嗎?
答:Struts2的Action類是線程安全的,因?yàn)槊總€(gè)請(qǐng)求一個(gè)實(shí)例。Struts2的攔截器是單例,所以它不是線程安全的,我們需要仔細(xì)地實(shí)現(xiàn)它們,以避免與共享數(shù)據(jù)的任何問(wèn)題。
11、Struts2的名稱空間namespace 有什么用?
答:我們能使用名稱空間基于功能分離我們的Action類,如admin user和客戶等模塊。
12、什么攔截器負(fù)責(zé)將請(qǐng)求參數(shù)映射到action類的java bean屬性?
com.opensymphony.xwork2.interceptor.ParametersInterceptor 配置在struts-default包中,名稱是"params"。這是basicStack和 defaultStack一部分。
13、簡(jiǎn)述Struts2工作流程
答:(1)客戶端瀏覽器發(fā)出HTTP請(qǐng)求;(2)根據(jù)web.xml配置,該請(qǐng)求被FilterDispatcher接收;(3)根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法,并通過(guò)IoC方式,將值注入給Aciton;(4)Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗(yàn)證;(5)Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁(yè)面;(6)返回HTTP響應(yīng)到客戶端瀏覽器
14、攔截器的生命周期與工作過(guò)程?
答:(1)每個(gè)攔截器都是實(shí)現(xiàn)了Interceptor接口的java類;(2)init(): 該方法將在攔截器被創(chuàng)建后立即被調(diào)用, 它在攔截器的生命周期內(nèi)只被調(diào)用一次. 可以在該方法中對(duì)相關(guān)資源進(jìn)行必要的初始化;(3)intercept(ActionInvocation invocation): 每攔截一個(gè)動(dòng)作請(qǐng)求, 該方法就會(huì)被調(diào)用一次;(4)destroy: 該方法將在攔截器被銷毀之前被調(diào)用, 它在攔截器的生命周期內(nèi)也只被調(diào)用一次;(5)struts2中有內(nèi)置了18個(gè)攔截器。
15、Struts2中攔截器有哪些好處?
答:攔截器的一些好處是:攔截器在實(shí)現(xiàn)高度分離關(guān)注方面起著至關(guān)重要的作用。Struts2攔截器是可配置的,我們可以為我們想要的任何動(dòng)作配置它。我們可以創(chuàng)建自己的自定義攔截器來(lái)執(zhí)行一些常見任務(wù),例如請(qǐng)求參數(shù)記錄,身份驗(yàn)證等。這有助于我們?cè)谝粋€(gè)位置處理常見任務(wù),從而降低維護(hù)成本。我們可以創(chuàng)建攔截器堆棧以用于不同的操作。
Struts2 是一個(gè)相當(dāng)強(qiáng)大的javaweb開源框架,框架結(jié)構(gòu)清晰,開發(fā)流程一目了然,開發(fā)人員可以很好的掌控開發(fā)的過(guò)程,是java程序員必須會(huì)使用的框架,所以上面的Struts2面試題大家要認(rèn)真學(xué)習(xí),都是關(guān)于Struts2相關(guān)的基本知識(shí),在java面試題中出現(xiàn)的幾率很大。希望這15道Struts2面試題對(duì)大家的面試可以有所幫助,并通過(guò)java教程中對(duì)Struts2框架的學(xué)習(xí),可以掌握快速搭建好一個(gè)Struts2框架的技能。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)