簡析struts2 x中的輸入校驗

2021-06-09 02:59:11 字數 1943 閱讀 3721

在web中,對於頁面表單的輸入校驗,在客戶端我們可以寫js指令碼來校驗。但如果為了提高應用的安全性通常除了在客戶端利用js來校驗表單,我們通常還會在伺服器端進行再次校驗以提高安全性。而struts的輸入校驗則很好的解決了服務端的校驗,使得開發者只需編寫校驗規則檔案即可,這樣更加方便的管理服務端的校驗規則。除此以外,開發者還可以通過重寫validate方法來完成自定義校驗。

假如有個登入介面login.jsp中有個登入表單如下:

對應該表單,我們有個action類叫loginaction,該類的大致**如下:

public class loginaction extends actionsupprts

}

對應該action我們有乙個loginaction類的校驗檔案。在struts2中,不同於struts1的輸入校驗檔案命名方法,struts2中單獨對每乙個action指定乙個校驗檔案,它的命名方式actionname-validate.xml。他存放在與action相同的保重,校驗只需要配置乙個校驗檔案即可實現。系統的其他地方不需要改動,系統自動載入該檔案。 因此我們對應loginaction類有個loginaction-validation.xml。該校驗檔案**如下:

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

true

使用者名稱不能為空!

true

密碼不能為空!

密碼只能是字母和數字,且長度在4到12之間

在該校驗檔案中,只有乙個而且只能只有乙個validators根元素,該validators根元素可以包含多個field元素,乙個filed元素對應乙個action的屬性,更準確的說應該是對應login.jsp表單中的屬性。那如果再校驗中使用者驗證失敗struts2會怎樣處理呢?在struts2中,如果使用者輸入不符合校驗檔案的規則,即校驗檔案判斷出使用者輸入了不合法的東西,此時struts2會返回名為「input」的result,所以在對應的struts配置檔案中,我們還需要配置乙個名位「input」的result。這裡假如我們有個user-config.xml檔案。該檔案大致**如下:

/login.jsp

如果我們的應用就只我們國人用的話,那就沒有必要弄個什麼國際化資訊咯。但為了體現我們的應用於國際接軌,通常我們都會配置國際化的資訊。那如果配置國際化資訊的話,那我們再驗證檔案中的message屬性中就不能那樣寫中文了,而應該使用乙個value-key對應的方式了。下面我們將改寫校驗檔案loginaction-validation.xml,改寫後的該檔案**如下:

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

true

//請注意這裡的寫法

true

我們還要新建乙個國際化資訊的資源檔案假如名叫:login-cn.properties,該資源檔案中的**如下:

name.requried=使用者名為空

password.requried=密碼不能為空

pass.regex=密碼只能是字母和數字,且長度在4到12之間

由於我們資源檔案中的中文不能被識別,所以我們需要使用比如native2ascii的軟體工具轉化該資源檔案。

還需建乙個英文的資源檔案login-en.properties,該資源檔案中的**如下:

name.requried=name cannot be empty

password.requried=password cannot be empty

pass.regex=the password is only letters and numbers, and length in 4 to 12 between

struts2 x的基本配置

1.先配置xml struts2 org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter 2.在src目錄下面建立並配置struts.xml 之前要在window preference xmlcatalog中新增 w...

Annotation對Struts2 x的支援

struts2.x如要想要使用annotation,則需要匯入asm 3.3.jar asm commons 3.3.jar和struts2 convention plugin 2.3.37.jar。並且修改web.xml檔案,使其支援annotation。在web.xml檔案裡的filter元素裡...

Struts2x對比Struts1x的先進

筆者已經毫不懷疑struts 2x比struts 1x強大,也不辯解struts 1x與2x各自的優點,因為在我看來 struts 2x繼承了struts 1x的優秀特性,並且通過struts在專案中應用的累積,發生了不小的更適用的新功能 下面讓我結合自己的專案應用來揭秘struts 2x的這些偉大...