126.Struts2中的攔截器有什麼用?列舉框架提供的攔截器名稱? 127.Struts2有哪些優點? 128.ActionContext和ValueStack什麼時候創建?是否是線程安全的? 129.一個請求在Struts2框架中的處理大概分為幾個步驟? 130.介紹一下Struts的Actio ...
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實例。