更新時間:2020-10-14 17:14:11 來源:動力節點 瀏覽1475次
Struts2用于接受頁面信息然后通過內部處理,將結果返回,是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet。在java程序員的面試中,會有很大的概率出現,因此struts2面試題是大家在參加java面試前需要學習的內容,這篇文章盤點了常考的基礎struts2面試題,一起來學習吧!
1、Struts2與Struts1的聯系與區別,為什么要用Struts2?
答:二者之間的聯系:struts1與struts2都是mvc框架的經典實現模式。
Struts2不是從Struts1升級而來,而是有WebWork改名而來,而WebWork只是Xwork加了很多WEB攔截器而已。
區別:(1)核心控制器改成了過濾器(過濾器比Servlet的級別要高,因為程序運行時是先進入過濾器再進入Servlet);(2)struts1要求業務類必須繼承Action或dispatchAction,struts2不強制這么做,只需要提供一個pojo類;(3)管理Action時struts1是單例模式,struts2是每個請求產生一個實例;(4)在表達式的支持上struts2不僅有jstl,還有功能更加強大的ognl表達式;(5)struts2支持多種視圖類型,如:jsp,freemaker,velocity,源代碼等。
2、Struts2的核心是什么?體現了什么思想?
答:Struts2的核心是攔截器,基本上核心功能都是由攔截器完成,攔截器的實現體現了AOP(面向切面編程)思想。
3、Struts2是怎樣進行值封裝的?
答:struts2的值封裝實際上是采用了ognl表達式。struts2的攔截器經過模型驅動時會先判斷action是否實現了ModelDriven,如果是則拿到模型的實例放在了棧的頂部,到屬性驅動的時候會從棧里面把棧頂的實例給取出來,從頁面傳進來的值放在一個map集合當中,通過map集合進行迭代會通過ognl技術把值封裝到實例中。
4、談談Struts2 的國際化?
答:在struts2中是使用了攔截器來實現國際化。struts2的國際化分為三部分:(1)Action范圍,這種范圍是用Action的實現類的類名來作為前綴__語言名稱_國家地區名(大寫).properties;(2)包范圍,包范圍是用package作為前綴__語言名稱_國家地區名(大寫).properties;(3)全局范圍,全局范圍的前綴默認的是application,可以通過xml配置文件配置常量(使用constant標簽注冊i18l攔截器)來指定前綴,前綴__語言名稱_國家地區名(大寫).properties。
國際化實現的原理:通過i18n攔截器獲得請求參數request——locale的值(zh或者是en)并把當前的值轉化為locale對象,把locale對象存在ww_trans_i18n_locale的session作用域中,根據struts2的請求處理流程,攔截器只會在進入action的時候才會調用,所有我們一般把對jsp的訪問轉化為對action的訪問。
5、Strust2如何訪問Servlet API?
答:(1)通過ActionContext可以獲得request,application,session三個作用域(struts2實際上是通過適配器來把servlet的api轉換為一個map,
并把這些map放在ActionContext里面);(2)通過ActionContext的子類ServletActionContext去獲取原滋原味的API;(3)可以通過實現ServletRequestAware接口,重寫里面的setServletRequest方法可以獲得request,實際上是通過set的依賴注入。
6、什么是Struts2中的攔截器?
答:攔截器是Struts2 Framework的支柱。Struts2攔截器負責框架完成的大部分處理,例如將請求參數傳遞給動作類,使Servlet API請求,響應,會話可用于Action類,驗證,i18n支持等。
ActionInvocation負責封裝Action類和攔截器并按順序觸發它們。在ActionInvocation中使用的最重要的方法是invoke()方法,它跟蹤攔截器鏈并調用下一個攔截器或動作。這是Java EE框架中責任鏈模式的最佳示例之一。
7、列舉Struts2中引入的一些有用的注釋?
答:Struts2中引入的一些重要注釋是:
@Action創建動作類
@Actions為多個動作配置單個類
@Namespace和@Namespaces用于創建不同的模塊
@Result用于結果頁面
@ResultPath用于配置結果頁面位置
8、怎樣能在動作類中獲得Servlet API請求,響應,HttpSession等對象?
答:Struts2操作類不提供對Servlet API組件的直接訪問,例如Request,Response和Session。但是,有時我們需要在操作類中進行這些訪問,例如檢查HTTP方法或設置響應中的cookie。
這就是為什么Struts2 API提供了一堆* Aware接口,我們可以實現這些接口來訪問這些對象。Struts2 API使用依賴注入在操作類中注入Servlet API組件。一些重要的Aware接口是SessionAware,ApplicationAware,ServletRequestAware和ServletResponseAware。
9、Struts2中令牌攔截器的用途是什么?
答:Web應用程序的主要問題之一是雙表單提交。如果不注意,雙重表單提交可能會導致向客戶收取雙倍金額或兩次更新數據庫值。我們可以使用令牌攔截器來解決雙表格提交問題。這個攔截器是在struts-default包中定義的,但它不是任何攔截器堆棧的一部分,所以我們需要在我們的動作類中手動包含它。
10、開發Struts2應用程序時要遵循哪些最佳實踐?
答:開發Struts2應用程序時的一些最佳實踐是:
(1)在創建程序包時始終嘗試擴展struts-default程序包,以避免在配置攔截器時出現代碼冗余;
(2)對于整個應用程序中的常見任務,例如記錄請求參數,請嘗試使用攔截器;
(3)始終將動作類java bean屬性保存在單獨的bean中以便重用代碼并實現ModelDriven接口;
(4)嘗試使用基于功能區域的命名空間配置在不同模塊中劃分應用程序;
(5)嘗試在結果頁面中使用Struts2標記進行代碼說明,如果需要,可以創建自己的類型轉換器;
(6)使用開發模式可以加快開發速度,但請確保生產代碼不以dev模式運行;
(7)Struts2提供了許多可以擁有資源包的地方,但是嘗試保留一個全局資源包,一個用于動作類以避免混淆;
(8)Struts2提供了許多可以擁有資源包的地方,但是嘗試保留一個全局資源包,一個用于動作類以避免混淆。
上面就是對struts2面試題的整理,并相應的附上了總結好的答案。Struts2是一種重量級的框架,是位于MVC架構中的controller,是java程序員需要掌握的技能。希望大家可以通過這10道struts2面試題來對自己進行一下檢驗,更多的面試題請到java面試題欄目查看,遇到不會或者模糊的知識點及時的通過看java視頻教程或者專業書的方式來查漏補缺。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習