服務器端表單校驗
表單校驗有兩種:
- 客戶端校驗:js,優點(校驗無延遲,速度快)缺點(數據不安全)
- 服務端校驗:服務器的程序校驗。優點(數據安全)缺點(校驗需要走服務端程序,在網絡延遲較高的情況下速度過慢)
服務端表單校驗,是表單安全的最後一道防線。
對於Struts2如何實現服務端校驗:
我們有三種方式:
- java編碼方式
- xml配置方式
- 註解方式
推薦 xml配置方式方式:代碼與校驗配置解耦合。
xml配置校驗表單:
業務:登錄的時候,用戶名或密碼不能爲空。如果爲空,提示用戶。
操作:
第一步:在action類所在的包中,建立一個xml文件,
名字必須滿足規則:
action的類名-action的名字-validation.xml
ps:想對UserAction的login方法進行表單校驗。
那麼這裏應該寫成:
UserAction-userAction_login-validation.xml
第二步:引入xml頭信息(約束)
從包中的dtd文件中複製:
複製後的效果:
在未聯網的情況下,需要導入本地提示:
第三步:配置校驗規則,進行表單校驗
default.xml裏面定義了很多內置的校驗器:
我們的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 用戶名 -->
<!-- name:字段名(屬性名) -->
<field name="name">
<!-- 指定校驗器 :內置,也可以自定義'
type:校驗器的名字,字段值不能爲空
-->
<field-validator type="requiredstring">
<!-- 校驗沒有通過的提示信息,底層代碼相當於:addFieldError(xxx,msg)-->
<message>用戶名不能爲空</message>
</field-validator>
</field>
<!-- 密碼 -->
<field name="password">
<!-- 指定校驗器 :內置,也可以自定義'
type:校驗器的名字,字段值不能爲空
-->
<field-validator type="requiredstring">
<!-- 校驗沒有通過的提示信息,底層代碼相當於:addFieldError(xxx,msg)-->
<message>密碼不能爲空</message>
</field-validator>
</field>
</validators>
第四步:配置input結果集視圖:
在測試表單校驗不通過的時候,頁面異常:
原因:workflow攔截器自動會判斷三個錯誤集合是否有數據,有則,跳轉到input結果集視圖。
在struts.xml中配置:
頁面對應回顯信息:
測試:
表單校驗提示信息的國際化(可選)
在上篇博客中說道國際化的問題,在這裏順便提一下表單校驗提示信息的國際化
校驗的文件中配置:
國際化文件中配置: