更新時(shí)間:2022-12-21 16:05:01 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1487次
Struts工作機(jī)制?
工作機(jī)制:
Struts的工作流程:
在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從
struts-config.xml文件中讀取配置信息,把它們存放到各種配置對(duì)象
當(dāng)ActionServlet接收到一個(gè)客戶請(qǐng)求時(shí),將執(zhí)行如下流程.
-(1)檢索和用戶請(qǐng)求匹配的ActionMapping實(shí)例,如果不存在,就返回請(qǐng)求路徑無(wú)效信息;
-(2)如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對(duì)象,把客戶提交的表單數(shù)據(jù)保存到ActionForm對(duì)象中;
-(3)根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一個(gè)不包含ActionMessage的ActuibErrors對(duì)象, 就表示表單驗(yàn)證成功;
-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法;
-(6)Action的execute()方法返回一個(gè)ActionForward對(duì)象,ActionServlet在把客戶請(qǐng)求轉(zhuǎn)發(fā)給 ActionForward對(duì)象指向的JSP組件;
-(7)ActionForward對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè),返回給客戶;
說(shuō)下Struts的設(shè)計(jì)模式
MVC模式: web應(yīng)用程序啟動(dòng)時(shí)就會(huì)加載并初始化ActionServler。用戶提交表單時(shí),一個(gè)配置好的ActionForm對(duì)象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設(shè)置決定是否需要表單驗(yàn)證,如果需要就調(diào)用ActionForm的Validate()驗(yàn)證后選擇將請(qǐng)求發(fā)送到哪個(gè)Action,如果Action不存在,ActionServlet會(huì)先創(chuàng)建這個(gè)對(duì)象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對(duì)象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回一個(gè)ActionForward對(duì)象,ActionServlet再把客戶請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指定的jsp組件,ActionForward對(duì)象指定的jsp生
成動(dòng)態(tài)的網(wǎng)頁(yè),返回給客戶。
攔截器和過(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)用一次。
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)
struts2是如何啟動(dòng)的?
struts2框架是通過(guò)Filter啟動(dòng)的,即StrutsPrepareAndExecuteFilter,此過(guò)濾器為struts2的核心過(guò)濾器;
StrutsPrepareAndExecuteFilter的init()方法中將會(huì)讀取類路徑下默認(rèn)的配置文件struts.xml完成初始化操作。struts2讀取到struts.xml的內(nèi)容后,是將內(nèi)容封裝進(jìn)javabean對(duì)象然后存放在內(nèi)存中,以后用戶的每次請(qǐng)求處理將使用內(nèi)存中的數(shù)據(jù),而不是每次請(qǐng)求都讀取struts.xml文件。
struts2框架的核心控制器是什么?它有什么作用?
1)Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。
2)作用:
負(fù)責(zé)攔截由/*指定的所有用戶請(qǐng)求,當(dāng)用戶請(qǐng)求到達(dá)時(shí),該Filter會(huì)過(guò)濾用戶的請(qǐng)求。默認(rèn)情況下,如果用戶請(qǐng)求的路徑
不帶后綴或者后綴以.action結(jié)尾,這時(shí)請(qǐng)求將被轉(zhuǎn)入struts2框架處理,否則struts2框架將略過(guò)該請(qǐng)求的處理。
可以通過(guò)常量”struts.action.extension”修改action的后綴,如:
如果用戶需要指定多個(gè)請(qǐng)求后綴,則多個(gè)后綴之間以英文逗號(hào)(,)隔開。
struts2配置文件的加載順序?
struts.xml ——> struts.properties
常量可以在struts.xml或struts.properties中配置,如果在多個(gè)文件中配置了同一個(gè)常量,則后一個(gè)文件中配置的常量值會(huì)覆蓋前面文件中配置的常量值.
struts.xml文件的作用:通知Struts2框架加載對(duì)應(yīng)的Action資源
struts2常量的修改方式?
常量可以在struts.xml或struts.properties中配置,兩種配置方式如下:
1)在struts.xml文件中配置常量
2)在struts.properties中配置常量(struts.properties文件放置在src下):
struts.action.extension=do
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>
result的type屬性中有哪幾種結(jié)果類型?
一共10種:
dispatcher
struts默認(rèn)的結(jié)果類型,把控制權(quán)轉(zhuǎn)發(fā)給應(yīng)用程序里的某個(gè)資源不能把控制權(quán)轉(zhuǎn)發(fā)給一個(gè)外部資源,若需要把控制權(quán)重定向到一個(gè)外部資源, 應(yīng)該使用
redirect結(jié)果類型
redirect 把響應(yīng)重定向到另一個(gè)資源(包括一個(gè)外部資源)
redirectAction 把響應(yīng)重定向到另一個(gè) Action
freemarker、velocity、chain、httpheader、xslt、plainText、stream
攔截器的生命周期與工作過(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è)攔截器。
以上就是“面試總能碰到的三大框架最新面試題”,你能回答上來(lái)嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
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í)