Struts2學習筆記

2021-06-18 01:27:18 字數 3414 閱讀 2595

一 概述 

1  struts2是webwork和struts1的結合,其核心來自webwork。比struts1更靈活,更優雅。

2  struts2的核心控制器是dispafliter 和action,而struts2的核心是***interceptor。

3  ion.extension" value="htm"/>可以完成請求字尾為htm。

二 資料型別轉換(converter)和資料校驗(validate)

1  基本資料轉換是struts2自動完成的,對於物件其他複雜型別轉換,可繼承strutstypeconverter類重寫convertvalue()來完成,但是還需要配置放在校驗action同目錄的***action-conversion.properties檔案,其寫法如下:   

被校驗屬性=包名.校驗器名

全域性的檔名稱則為: xwork-converter.properties

其實strutstypeconverter類是繼承了ognl.dufaulttypeconverter這個類,當然我們也可以直接來實現convertvalue()來完成。

2  資料校驗 在單獨的方法裡可使用validate()來校驗,但是往往在開發中乙個action類中有很多方法,這時候validate()就成了全域性的校驗,導致每個方法都校驗,這並不是我們想要的,struts2有個解決的方法就是用validate***()來校驗***()方法,從而使每個校驗對應乙個方法。

3   用struts2的標籤的時候會自動給出錯誤提示,但是有時候並不是我們想要的,我們可以在表單中增加 theme="******" 讓表單的當前html樣式失效,從而我們自己定義樣式。錯誤提示有兩種 和 ,在validat()的時候由我們自己選擇,把錯誤資訊放入actionerror還是:fielderror。

4  如果我們用fielderror級別的輸出,最好配置 :

然後再寫個message.properties檔案 裡面寫這樣的xwork.default.invalid.fieldvalue= error,

來說明我們那個屬性輸入有誤,或者用區域性的***.properties,其中***是action名字。裡面配置如下面這樣的內容

invalid.fieldvalue.age=\年\齡\輸\入\不\正\確

invalid.fieldvalue.birthday=\生\日\輸\入\有\誤

invalid.fieldvalue.graduation=\畢\業\日\期\輸\入\有\誤

其中前面是校驗的屬性,後面是中文字元的unicode編碼,至於這個怎麼來的,看看jdk給我們提供了native2ascii 這個工具 可以直接在自己安裝的jdk bin目錄下找到,執行後輸入漢字,回車就可以看到unicod編碼了,同時支援檔案轉換。

5 除了編碼方式校驗外,struts2還提供了xml配置檔案的校驗,更得情況下我們採用配置檔案的校驗,配置檔案的校驗和編碼方式的校驗一樣有兩種方式,全域性的和區域性的,全域性的就是對整個action校驗,區域性的則只對某個方法校驗,寫如下配置檔案,都放在action相同的目錄下:

a.全域性的如:registeraction-validation.xml

b.區域性的如:registeraction-test-validation.xml

第乙個事對registeraction中的所有方法都校驗,第二個則只對registeraction中的test方法做校驗,大多數情況下我們的乙個action類中又很多業務所以一般都做區域性校驗。xml的校驗分欄位校驗和非欄位校驗兩種,其實不管哪種底層實現都是一樣的。具體配置可檢視dtd文件和default.xml,如下,

<?xml version="1.0" encoding="utf-8"?>

">

username

username requred!

username

6 10

username should be between $ and $ !

username requred! 6

10 username should be between $ and $ !

6 資料校驗總結,struts2的資料校驗是xwork來的,我們可以通過檢視原始碼得到,field級別的錯誤是封裝在乙個linkedhashmap裡的,而action級別的錯誤是封裝在乙個arraylist裡的,並且linkedhashmap得key是stirng,value是乙個arraylist。校驗順序是先從xml配置校驗開始到編碼校驗,從全域性校驗到區域性校驗。

三 ***(interceptor)和***(listener)

1 struts2的攔截其是基於動態**實現的,和spring的aop機制很像,源於xwork,所有的父介面com.opensymphony.xwork.interceptor,結構和servlet的過濾器一樣,有個init(),destroy() ,主要的就是string interceptor(actioninvocation invation)方法。actioninvocation中有個invocke(),用於鏈式呼叫,com.opensymphony.xwork2.interceptor.abstractinterceptor和com.opensymphony.xwork2.interceptor.methodfilterinterceptor抽象方法部分實現了父介面。methodfilterinterceptor方法用於在攔截的時候過濾某些方法,excludemethods和includmethods用來設定包含和排除那些方法,包含優先於排除的設定。

2 所有的系統預設***都定義在了struts-default.xml中,我們可以重新定義預設配置,如果我們在action中引入自己定義的***,那麼系統預設***將不再引入,所以要手動引入,在實際開發中,更多的是把預設***引入我們自己定義的***中,再使用我們自定義的***,從而達到目的。***棧裡配置引入的***是有順序的,那個在前那個先執行,在特定的情況下會影響結果。

3 ***在struts2中的配置如下:

ion name="register" class="com.shunwang.test.action.registeraction" method="test">

/success.jsp

/register2.jsp

ion>

都放在struts.xml中的元素裡面。和action並列。具體配置可檢視struts2.0 dtd檔案,在

和    裡還可以配置引數,在執行時送到interceptor中。

4 ***是通過時***註冊實現的,要實現介面preresultlistener,來實現介面

void beforeresult(actioninvation in***tion, string resultcode); 來完成某些動作的,在action方法後在試圖渲染前執行。

1 struts2的檔案上傳是基於apache自己的元件common-fileupload-1.x和common-io-1.x來實現的,而struts2封裝了相關的api,使得上傳更簡單,更方便。

Struts2學習筆記

1.不繼承,不介面 2.繼承actionsupport類 3.介面action介面 4.我們可以使用modeldriven模式 5.我們可以自己編寫bean進行struts2的擴充套件,但是 一般不需要,因為struts2的功能已經很強大了!6.我們可以將default.properties檔案中的...

Struts2學習筆記

structs修改後自動更新 action執行的時候並不一定要執行execute方法 method add user add success.jsp user add success.jsp 可以在配置檔案中配置action的時候用method 來指定執行哪個方法 user useradd 新增使用...

struts2學習筆記

xml 配置大都是通過 複製 貼上 修改 得到。其中此處 永遠是 url pattern url pattern struts.xml 內 action name hello action 一般用小寫。xml 內寫 時內自動提示設定 原始檔路徑不能有中文。此處複製了乙份dtd檔案到d myeclii...