1. 程式人生 > >19-撩課-Java面試寶典-第十九篇

19-撩課-Java面試寶典-第十九篇

126.Struts2中的攔截器有什麼用?列舉框架提供的攔截器名稱?

 1)攔截器是struts2核心組成部分,
它提供了一種機制,使得開發者
可以定義一個特定的功能模組,
這個模組會在Action執行之前或者之後執行
也可以在Action執行之前阻止Action執行。 

 2)常用的攔截器有: 

 chain:在不同請求之間將請求引數在不同名字件轉換,
請求內容不變 

 fileUpload:提供檔案上傳。 

 ​i18n:記錄使用者選擇的區域環境 

 logger:輸出Action的名字

 params:將請求中的引數設定到Action中去。

127.Struts2有哪些優點?

1)在軟體設計上Struts2的應用
可以不依賴於Servlet API和struts API。 
Struts2的這種設計屬於無侵入式設計; 

 2)攔截器,
實現如引數攔截注入等功能;

 3)型別轉換器,
可以把特殊的請求引數轉換成需要的型別; 

 4)多種表現層技術,
如:JSP、freeMarker、Velocity等;

 5)Struts2的輸入校驗
可以對指定某個方法進行校驗;

 6)提供了全域性範圍、
包範圍和Action範圍的
國際化資原始檔管理實現 

 7) 實現MVC模式,結構清晰,
使開發者只關注業務邏輯的實現。
有豐富的tag可以用,
大提高了開發效率。(簡要)

128.ActionContext和ValueStack什麼時候建立?是否是執行緒安全的?

明確:
動作類是多例的,
每次動作訪問,
動作類都會例項化。
所以是執行緒安全的。
與Struts1的區別是,
struts1的動作類是單例的。

在每次動作執行前,
核心控制器StrutsPrepareAndExecuteFilter
都會建立一個ActionContext和ValueStack物件。
且每次動作訪問都會建立。

 這兩個物件儲存了整個動作
訪問期間用到的資料。
並且把資料繫結到了執行緒區域性變數
ThreadLocal上了。
所以是執行緒安全的。

129.一個請求在Struts2框架中的處理大概分為幾個步驟?

1) 客戶端初始化一個
指向Servlet容器(例如Tomcat)的請求

2 )這個請求經過一系列的過濾器Filter
這些過濾器中有一個叫做
ActionContextCleanUp的可選過濾器,
這個過濾器對於Struts2和
其他框架的整合很有幫助,
例如:SiteMesh Plugin)

3 )接著FilterDispatcher被呼叫,
FilterDispatcher詢問ActionMapper
來決定這個請是否需要呼叫某個Action

4 )如果ActionMapper決定需要呼叫某個Action,
FilterDispatcher把請求的處理交給ActionProxy

5 )ActionProxy通過Configuration Manager
詢問框架的配置檔案,
找到需要呼叫的Action類

6 )ActionProxy建立一個ActionInvocation的例項。

7 )ActionInvocation例項使用命名模式來呼叫,
在呼叫Action的過程前後,
涉及到相關攔截器(Intercepter)的呼叫。

 8 )一旦Action執行完畢,
ActionInvocation負責根據struts.xml中的配置
找到對應的返回結果。
返回結果通常是一個需要
被表示的JSP或者FreeMarker的模版。
在表示的過程中可以使用Struts2 框架中
繼承的標籤。
在這個過程中需要涉及到ActionMapper

130.介紹一下Struts的ActionServlet類

ActionServlet繼承自
javax.servlet.http.HttpServlet類,
其在Struts framework中扮演的角色
是中心控制器。
它提供一箇中心位置來處理全部的終端請求。
控制器ActionServlet主要
負責將HTTP的客戶請求資訊組裝後,
根據配置檔案的指定描述,
轉發到適當的處理器。
按照Servelt的標準,
所有得Servlet必須在
web配置檔案(web.xml)宣告。
同樣,ActoinServlet必須在
Web Application配置檔案(web.xml)中描述
當用戶向伺服器端提交請求的時候,
實際上資訊是首先發送到控制器ActionServlet,
一旦控制器獲得了請求,
其就會將請求資訊傳交給一些輔助類(help classes)處理。
這些輔助類知道如何去處理與請求資訊所對應的業務操作。
在Struts中,
這個輔助類就是org.apache.struts.action.Action。
通常開發者需要自己繼承Aciton類,
從而實現自己的Action例項。