struts2小記

1 Struts2與Struts1的聯繫與區別 爲什麼要用Struts2

Struts2不是從Struts1升級而來,而是有WebWork改名而來,

區別:
Struts2核心控制器是過濾器,面向切面編程,Struts1核心控制器是Servlet

具體區別可以看圖形,點擊這裏

2.Struts2的核心是什麼,體現了什麼思想

Struts2的核心是攔截器,基本上核心功能都是由攔截器完成,攔截器的實現體現了AOP(面向切面編程)思想 

3 爲何繼承ActionSupport

答:因爲ActionSupport實現了Action接口,提供了國際化,校驗功能。

4 Struts2 如何定位action中的方法

答:
1 感嘆號定位方法(動態方法)。
2 在xml配置文件中通過配置多個action,使用action的method指定方法。
3 使用通配符(*)匹配方法。

5 模型驅動與屬性驅動是什麼 模型驅動使用時注意什麼問題

答:模型驅動與屬性驅動都是用來封裝數據的。
1.模型驅動:在實現類中實現ModelDriven<T>接口使用泛型把屬性類封裝起來,重寫getModel()方法,
2.屬性驅動:在實現類裏定義屬性,生成get與set方法,通過屬性來拿值。

3.Struts2是怎樣進行值封裝的?

struts2的值封裝實際上是採用了ognl表達式.以壓棧的方式封裝數據

6 Struts2如何進行校驗

編程校驗
1 繼承ActionSupport,重寫validate方法(針對所有方法)(服務器端編程,不推薦)。
2 校驗框架

每個Action類有一個校驗文件,命名 Action類名-validation.xml,且與Action類同目錄,這是對action裏面所有的方法進行校驗。

7 談談Struts2 的國際化

答:
在struts2中是使用了攔截器來實現國際化。一般用全局範圍
struts2的國際化分爲三部分:
1.Action範圍,
2.包範圍,
3.全局範圍,一般屬性文件的名字是 前綴__語言名稱_國家地區名(大寫).properties。

8 OGNL是什麼? 你在項目中如何使用它

OGNL是:對象圖形導航語言。
Struts2中默認的表達式語言就是OGNL,任何取值默認都是OGNL中以壓棧方式取值

9 Strust2如何訪問Servlet API

答:
1:通過ActionContext可以獲得request,application,session三個作用域
2:ServletActionContext去獲取原生的API。

10 什麼是攔截器 說說Struts2用攔截器來幹什麼 說出3個攔截器來,

在訪問類的某個方法或者屬性之前執行,攔截的是Action的請求,進行攔截然後在方法的執行前或者之後加入某些操作,
如:國際化,權限,效驗等與源代碼無關的操作。
國際化,表單重複提交,處理類型轉換錯誤,日誌攔截器,等等..

11. 如何實現自定義攔截器?

答:可以繼承MethodFilterInterceptor重寫doIntercept方法指定某個方法進行攔截,或者繼承AbstractInterceptor,重寫intercept方法,


14.爲什麼要繼承默認的包?

     因爲在Strtus2裏面默認有很多的常量,攔截器,還有一些bean,如果繼承默認的包,這些默認值和常量就會繼承過來, 

15 .常見的有那些有十幾種結果集類型,

常見的結果集類型有dispatcher,redirect,redirectAction,stream等

默認的是dispatcher,是轉發

redirect指重定向,

16 開發項目時struts2在頁面怎樣拿值?

從值棧中或者是OGNL

17.怎麼樣用Struts2進行文件的上傳或者下載

   Struts2裏面已經提供了默認的攔截器來處理上傳,只要在jsp用了s:file標籤,然後在Action和Form中做些配置對應即可

下載是用了result爲stream的類型,然後在action定義默認值是是InputStream,從硬盤上面讀取文件到這個流賦值即可.

18.簡單講下struts裏面的標籤,說不少於5個

s:iterater  s:property s:form s:url s:if 等等

19.默認struts2裏面的標籤取值都是從那裏取值的

默認都是從OGNL值棧裏面取值的 

21.ValueStack分爲那兩部分,組成部分是什麼,分別怎麼訪問

 分爲對象棧和ContextMap ,對象棧裏面放入的是Action及其用戶定義的對象,在前臺可以直接訪問,在contextMap裏面放入的是Servlet對象轉化後map,譬如requestMap,sessionMap,訪問的時候前面加#即可. 

22.標籤<s:property>和el表達式有什麼區別,

它們都可以從值棧裏面取值,但是el表達式只能取屬性有get set方法的簡單數據類型,如果要取得數組的一些方法等複雜數據對象類型,那麼就要用s:property標籤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章