Struts2入門(四)——數(shù)據(jù)輸入驗證

一、前言

1.1、什么是輸入驗證?為什么需要輸入驗證?

在上一篇文章中,我們學(xué)習(xí)了數(shù)據(jù)類型轉(zhuǎn)換,我們提到了表示層數(shù)據(jù)處理的兩個方法,也提到了用戶輸入數(shù)據(jù)需要進行類型轉(zhuǎn)換才能得到我們想要的數(shù)據(jù),那么,我們怎么確定類型轉(zhuǎn)換后的數(shù)據(jù),是我們想要的數(shù)據(jù)呢?這里有點繞。你可以這樣想:一個成年男子年齡是18歲,你現(xiàn)在想要得到18這個數(shù)據(jù),但是,用戶輸入32,經(jīng)過類型轉(zhuǎn)換也是對的,但是數(shù)據(jù)不是你想要的。這時候,我們要怎么辦?所以輸入驗證在這里就有用處了。

類型轉(zhuǎn)換和輸入驗證的關(guān)系是:類型轉(zhuǎn)換是輸入驗證的前提,如果類型轉(zhuǎn)換都出錯了,那就不用再進行輸入驗證了。但是很多時候類型轉(zhuǎn)換和輸入驗證是同時完成的。

輸入驗證有兩種:

1、客戶端驗證;

2、服務(wù)端驗證。這里主要講解的是服務(wù)端驗證(重寫ValidateXxx方法和xml配置文件驗證)

1.2、重寫ValidateXxx方法的驗證流程

1、類型轉(zhuǎn)換器負(fù)責(zé)對字符串的請求參數(shù)進行類型轉(zhuǎn)換,并將這些值設(shè)置成Action的屬性值

2、在執(zhí)行類型轉(zhuǎn)換過程中可能出現(xiàn)異常,如果出現(xiàn)異常,異常信息會自動保存到ActionContext中,conversionError攔截器負(fù)責(zé)將其封裝到fieldError中

3、通過反射調(diào)用ValidateXxx()方法,其中Xxx是即將處理用戶請求的處理邏輯所對應(yīng)的方法名

4、調(diào)用Action類的Validate方法

5、如果上面的步驟沒有出現(xiàn)fieldError,將調(diào)用Action里處理用戶請求的處理方法,如果出現(xiàn)fieldError,系統(tǒng)將轉(zhuǎn)入input邏輯視圖所指定的視圖。

二、輸入驗證

2.1、輸入驗證這里講解的有兩種方式:

1、重寫Validate方法或者自定義ValidateXxx方法(其中的Xxx是自己定義的名字,會先執(zhí)行該方法,在執(zhí)行Validate方法)

2、新建xml進行驗證

2.2、重寫Validate方法

在MVC框架,都會提供規(guī)范的數(shù)據(jù)驗證部分,Struts2在這里提供的是一個Validate方法,我們重寫Validate方法就可以進行輸入驗證,但是,重寫Validate方法有兩個點需要知道:1、Validate方法會在execute方法之前被執(zhí)行;2、Validate方法對所有的Action都會執(zhí)行校驗規(guī)則,為了區(qū)別某一個Action,我們可以使用ValidateXxx方法。

注意:以下的例子是局部類型轉(zhuǎn)換和輸入驗證一起使用的例子。

簡單的注冊驗證例子:

新建實體類User: