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:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26