1. 程式人生 > >“玩轉”Java系列—Struts2 面試題分析

“玩轉”Java系列—Struts2 面試題分析

1. 簡述 Struts2 的工作流程:

①. 請求傳送給 StrutsPrepareAndExecuteFilter
②. StrutsPrepareAndExecuteFilter 判定該請求是否是一個 Struts2 請求
③. 若該請求是一個 Struts2 請求,則 StrutsPrepareAndExecuteFilter 把請求的處理交給 ActionProxy
④. ActionProxy 建立一個 ActionInvocation 的例項,並進行初始化
⑤. ActionInvocation 例項在呼叫 Action 的過程前後,涉及到相關攔截器(Intercepter)的呼叫。
⑥. Action 執行完畢,ActionInvocation 負責根據 struts.xml 中的配置找到對應的返回結果。呼叫結果的 execute 方法,渲染結果。
⑦. 執行各個攔截器 invocation.invoke() 之後的程式碼
⑧. 把結果傳送到客戶端

2. Struts2 攔截器和過濾器的區別:

①、過濾器依賴於Servlet容器,而攔截器不依賴於Servlet容器。
②、Struts2 攔截器只能對 Action 請求起作用,而過濾器則可以對幾乎所有請求起作用。
③、攔截器可以訪問 Action 上下文(ActionContext)、值棧裡的物件(ValueStack),而過濾器不能.
④、在 Action 的生命週期中,攔截器可以多次呼叫,而過濾器只能在容器初始化時被呼叫一次。

3. 為什麼要使用 Struts2 & Struts2 的優點:

①. 基於 MVC 架構,框架結構清晰。
②. 使用 OGNL: OGNL 可以快捷的訪問值棧中的資料、呼叫值棧中物件的方法
③. 攔截器: Struts2 的攔截器是一個 Action 級別的 AOP, Struts2 中的許多特性都是通過攔截器來實現的, 例如異常處理,檔案上傳,驗證等。攔截器是可配置與重用的
④. 多種表現層技術. 如:JSP、FreeMarker、Velocity 等

4. Struts2 如何訪問 HttpServletRequest、HttpSession、ServletContext 三個域物件?

①. 與 Servlet API 解耦的訪問方式

 > 通過 ActionContext 訪問域物件對應的 Map 物件
 > 通過實現 Aware 介面使 Struts2 注入對應的 Map 物件

②.  與 Servlet API 耦合的訪問方式
 > 通過 ServletActionContext 直接獲取 Servlet API 物件
 > 通過實現 ServletXxxAware 介面的方式使 Struts2 注入對應的物件

5. Struts2 中的預設包 struts-default 有什麼作用?

①. struts-default 包是 struts2 內建的,它定義了 struts2 內部的眾多攔截器和 Result 型別,而 Struts2 很多核心的功能都是通過這些內建的攔截器實現,如:從請求中把請求引數封裝到action、檔案上傳和資料驗證等等都是通過攔截器實現的。當包繼承了struts-default包才能使用struts2為我們提供的這些功能。  
②.struts-default 包是在 struts-default.xml 中定義,struts-default.xml 也是 Struts2 預設配置檔案。Struts2 每次都會自動載入 struts-default.xml檔案。 
③. 通常每個包都應該繼承 struts-default 包。

6. 說出 struts2 中至少 5 個的預設攔截器

exception;fileUpload;i18n;modelDriven;params;prepare;token;tokenSession;validation 等

7. 談談 ValueStack:

①. ValueStack 貫穿整個 Action 的生命週期,儲存在 request 域中,所以 ValueStack 和 request 的生命週期一樣. 當 Struts2 接受一個請求時,會迅速建立 ActionContext,ValueStack,Action. 然後把 Action 存放進 ValueStack,所以 Action 的例項變數可以被 OGNL 訪問。請求來的時候,Action、ValueStack 的生命開始;請求結束,Action、ValueStack的生命結束 
②. 值棧是多例項的,因為Action 是多例的(和 Servlet 不一樣,Servelt 是單例的),而每個 Action 都有一個對應的值棧,Action 物件預設儲存在棧頂; 
③. ValueStack 本質上就是一個 ArrayList(檢視原始碼得到); 
④. 使用 OGNL 訪問值棧的內容時,不需要y號,而訪問 request、session、application、attr 時,需要加i號; 
⑤. Struts2 重寫了 request 的 getAttribute 方法,所以可以使用 EL 直接訪問值棧中的內容

8. ActionContext、ServletContext、pageContext的區別?

①. ActionContext Struts2 的 API:是當前的 Action 的上下文環境
②. ServletContext 和 PageContext 是 Servlet 的 API

9. Struts2 有哪幾種結果型別?

參看 struts-default.xml 中的相關配置:dispatcher、chain、redirect 等.

10. 攔截器的生命週期與工作過程?

每個攔截器都是需要實現 Interceptor 介面 
 > init():在攔截器被建立後立即被呼叫, 它在攔截器的生命週期內只被呼叫一次. 可以在該方法中對相關資源進行必要的初始化; 
 > intercept(ActionInvocation invocation):每攔截一個動作請求,該方法就會被呼叫一次; 
 > destroy:該方法將在攔截器被銷燬之前被呼叫, 它在攔截器的生命週期內也只被呼叫一次; 

11. 如何在 Struts2 中使用 Ajax 功能?

①. JSON plugin
②. DOJO plugin 
③. DWR plugin
④. 使用 Stream 結果型別.

相關推薦

Java系列Struts2 試題分析

1. 簡述 Struts2 的工作流程: ①. 請求傳送給 StrutsPrepareAndExecuteFilter ②. StrutsPrepareAndExecuteFilter 判定該請求是否是一個 Struts2 請求 ③. 若該請求是一個 Struts2

Java系列—Tomcat的設計模式分析

  Tomcat 中運用的許多經典設計模式,如模版模式、工廠模式和單例模式等。通過學習它們的實踐運用能給我們以後的軟體設計起到一定的借鑑作用。 1. 門面設計模式  門面設計模式在 Tomcat 中有多處使用,在 Request 和 Response 物件封裝中、Stan

Java系列—Eclipse 常用快捷鍵

Eclipse的編輯功能非常強大,掌握了Eclipse快捷鍵功能,能夠大大提高開發效率。Eclipse中有如下一些和編輯相關的快捷鍵。 1. 【ALT+/】 此快捷鍵為使用者編輯的好幫手,能為使用者提供內容的輔助,不要為記不全方法和屬性名稱犯愁,當記不全類、方法和屬性的

實戰系列之 Node.js Java

liunx array github cal ddn 公眾 當前 eth pan 這些年以來,Node.js的興起,JavaScript已經從當年的“世界最被誤解的語言”變成了“世界最流行的語言”。且其發展之勢,從語言本身的進

請拿出30分鐘鉆研此文,系統掌握java試題分析技巧

java 面試 架構師 談一談對MySQL InnoDB的認識 介紹: InnoDB引擎是MySQL數據庫的一個重要的存儲引擎,和其他存儲引擎相比,InnoDB引擎的優點是支持兼容ACID的事務(類似於PostgreSQL),以及參數完整性(有外鍵)等。現在Innobase實行雙認證授權.MySQ

jvm系列 01】Java虛擬機器的基本結構

Java虛擬機器架構圖 Java虛擬機器基本結構思維導圖 類載入子系統 類載入子系統負責從檔案系統或者網路中載入Class資訊,載入的類資訊存放於一塊稱為方法區的記憶體空間。 Java堆 Java堆是被所有執行緒共享的一塊記憶體區域,在虛擬機器啟動

阿里java試題分析

這道題來源於阿里巴巴的面試 public class Text {                    &

Java試題】之類載入:從試題分析Java類載入機制

 “載入”(Loading)階段是“類載入”(Class Loading)過程的第一個階段,在此階段,虛擬機器需要完成以下三件事情:        1、 通過一個類的全限定名來獲取定義此類的二進位制位元組流。        2、 將這個位元組流所代表的靜態儲存結構轉化為方法區的執行時資料結

Java面試----2018年最新Struts2試題

1、描述Struts2的工作原理答:客戶端傳送請求--》請求經過一系列過濾器--》FilterDispatcher通過ActionMapper來決定這個Request需要呼叫哪個Action --》FilterDispatcher把請求的處理交給ActionProxy--》通

java常見的試題系列(JDBC)

持久性 第一步 資源 manager 通過反射 撤回 語句 ive 面試題 1.說一下通過JDBC操作數據庫的步驟   第一步:通過反射註冊並加載驅動Driver,驅動類會自動註冊到DriverManager類,並加載到內存中。   第二步:通過DriverManage

螞蟻金服初級Java電話面試 試題

ringbuf str eem 螞蟻 ren 電話 什麽 死鎖 hashmap 1.String, StringBuffer, StringBuilder 的區別,為什麽String 不可改變,StringBuilder可以改變? 2.HashMap 是不是有序的,有哪些有

JS系列之代碼加載篇

關系 mage 如何 安裝 lan 單單 ejs lec 重要 從前我們這樣寫js <script type="text/javascript"> function a(){  console.log(‘a init‘);}function b(){

Java線程試題 Top 50

pos 很難 設置 edt 維護 initial ips 有意 缺少 Java線程面試題 Top 50不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就是內置了對並發的支持,讓Java大受企業和程序員的歡迎。大多數待遇豐厚的Java開

Java線程試題

linux下 rand 競態 java多線 答案 固定 枚舉類型 隨機 發現 不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就是內置了對並發的支持,讓Java大受企業和程序員的歡迎。大多數待遇豐厚的Java開發職位都要求開發者精通多

大公司喜歡問的Java集合類試題

排序 ger stack cap out strong factor ack 繼承 大公司喜歡問的Java集合類面試題 看了一些所謂大公司的JAVA面試問題,發現對於JAVA集合類的使用都比較看重似的,而自己在這方面還真的是所真甚少,抽空也學習學習吧。 java.uti

.NeterLinux系列之二:Linux下的文件目錄及文件目錄的權限

pac linux 在那 用戶 目錄結構 重要 bsp 樹狀 hub 一、Linux下的文件目錄 簡介:linux的文件系統是采用級層式的樹狀目錄結構,在此 結構中的最上層是根目錄“/”,然後在此目錄下再創建 其他的目錄。深刻理解linux文件目錄是

Java常考試題(三)

請求 其中 默認 查找 重新 技術分享 block 知識 logs     序言        說說今天遇到的一件小事吧,在遇到問題,查找答案時,看到很多人的博客裏面都有提到關鍵字眼,可讓人覺得可恨的是,大多數人寫的博文中,基本上都是照著書上的語言發表的,看了跟沒看一樣,沒

Java常考試題(一)

div 並且 功能 不出 共享 情況 字符型 對象 java字節碼       序言         我是一只亂飛亂撞的菜鳥,寫的文章目前是以記錄自己學習,和方便以後查看,期待日後不久能通過自己的努力,獲得一點小小的成功,然後寫出我的學習經驗總結性文章來。         

入我新美大的Java後臺開發試題總結

情況 查詢優化 做什麽 工作 我認 人的 方便 xpl 別人   靜兒最近在總結一些面試題,那是因為做什麽事情都要認真。面試也一樣,靜兒作為新美大金融部門的面試官,負責任的告訴大家,下面的問題回答不上來,面試是過不了的。不過以下絕不是原題,你會發現自己實力不過硬,最終肯定是

2017年終巨獻阿裏、騰訊最新Java程序員試題,準備好進BAT了嗎

電商 als 下載 坐標 序列化 equals 比較 通過 研究 Java基礎 進程和線程的區別; Java的並發、多線程、線程模型; 什麽是線程池,如何使用? 數據一致性如何保證;Synchronized關鍵字,類鎖,方法鎖,重入鎖; Java中實現多態的機制是什麽; 如