程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 服務器端輸入驗證,服務器端驗證

服務器端輸入驗證,服務器端驗證

編輯:JAVA綜合教程

服務器端輸入驗證,服務器端驗證


一、沒有使用框架情況下,在目標方法處,通過手動的編寫代碼來進行驗證

二、Struts2

1.支持聲明式驗證,即通過配置的方式來驗證。需要實現接口 ValidationAware,依賴於兩個攔截器 validation 和 workflow 攔截器。

validation 攔截器:進行驗證和創建字段錯誤列表

workflow  攔截器:檢查 validation 攔截器發現的錯誤,如果發現,返回 "input"(默認)result。

如果沒有指定 name=input 對應的 result ,則返回一個錯誤消息告訴我們 "there's no "input" result defined for the action"。

2. Struts2 默認的驗證器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
 
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>

3.驗證規則配置文件

(1)位置:在需要驗證的 Action 同包下。

(2)當前 Action 類所有 action 使用同樣的驗證規則:Action簡單類名-validation.xml

(3)當前 Action 類某個 action 使用具體的驗證規則:Action簡單類名-ActionName-validation.xml

4. 驗證分類

(1)字段驗證(Field Validator Syntax)

e1:驗證 myPurchaseCode 字段長度必須為10

<validators>
    <field name="myPurchaseCode">
        <field-validator type="stringlength">
             <param name="minLength">10</param>
             <param name="maxLength">10</param>
             <param name="trim">true</param>
             <message>Your purchase code needs to be 10 characters long</message>
        </field-validator>
    </field>
</validators>

e1:驗證 age 必須在 20 到 50 之間

<validators>
    <field name="age">
         <field-validator type="int">
             <param name="min">20</param>
             <param name="max">50</param>
             <message>Age needs to be between ${min} and ${max}</message>
         </field-validator>
     </field>
</validators>

(2)類型驗證(Plain Validator Syntax)

e1:驗證 myPurchaseCode 字段長度必須為10:

<validators>
    <validator type="stringlength">
        <param name="fieldName">myPurchaseCode</param>
        <param name="minLength">10</param>
        <param name="maxLength">10</param>
        <param name="trim">true</param>
        <message>Your purchase code needs to be 10 characters long</message>
    </validator>
</validators>

e2:驗證 age 必須在 20 到 50 之間

<validators>
     <validator type="int">
         <param name="fieldName">age</param>
         <param name="min">20</param>
         <param name="max">50</param>
         <message>Age needs to be between ${min} and ${max}</message>
     </validator>
</validators>

(3)表達式驗證

e:判斷密碼和確認密碼輸入是否一致

<validators>
  <validator type="expression">
        <param name="expression"><![CDATA[pwd==pwdConfirm]]></param>
        <message>密碼和確認密碼不一致</message>
    </validator>
</validators>

其中:<param name="expression"> 標簽體中的內容會自動進行 OGNL 解析。

5.短路驗證:

對於同一個字段進行多個規則驗證,如果第一個驗證沒有通過,則後續的規則不進行驗證。

只需要在 validator 或 field-validator 標簽內加入 short-circuit 屬性並設置為 true 即可。

如:

<validators> <field name="email"> <field-validator type="stringlength" short-circuit="true"> <param name="minLength">4</param> <param name="maxLength">10</param> <param name="trim">true</param> <message>email length must between ${minLength} and ${maxLength}</message> </field-validator> <field-validator type="email"> <message>Must provide a valid email</message> </field-validator> </field> </validators> email validate

6.類型轉換失敗提示與驗證出錯提示消息

struts2 默認的攔截器棧為 defaultStack,規定了 conversionError 攔截器在 validation 攔截器之前執行。但是 conversionError 攔截器攔截到類型轉換出錯的消息,並不會返回 "input",而是繼續讓proxy調用後續的攔截器。

這裡的源碼我們不能進行更改,但是我們可以仿造一個,類的加載順序是采取的就近原則。所以我們在項目的 src 目錄下,新建與 conversionError 攔截器對應的目錄結構,然後修改 conversionError 攔截器代碼。

7.對 Action 類的要求

要驗證的字段,必須提供 getXxx() 和 setXxx() 方法,getXxx() 方法用於 validate 攔截器進行比較驗證。

8.一個簡單的例子:

<s:form action="/validateNum"> <s:textfield name="age" label="age"/> <s:submit label="submit"/> </s:form> form 表單 <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <field name="age"> <field-validator type="int"> <param name="min">20</param> <param name="max">50</param> <message>Age needs to be between ${min} and ${max}</message> </field-validator> </field> </validators> ValidateAction-validation.xml <struts> <package name="default" namespace="/" extends="struts-default"> <action name="validateNum" class="com.nucsoft.struts.ValidateAction"> <result>/success.jsp</result> <result name="input">/index.jsp</result> </action> </struts> struts.xml

9.自定義驗證器

(1)普通的驗證器繼承 ValidatorSupport 類,字段驗證程序繼承 FieldValidatorSupport。如需要提供參數,提供 setXxx() 方法,如錯誤消息要獲取驗證器類中的屬性,提供對應的 getXxx() 方法。

(2)注冊驗證器類:在類路徑根目錄下新建 validators.xml ,內容可以參考 default.xml 文件裡的配置信息。(驗證框架首先在根目錄下查找validators.xml文件,找不到則調用默認的驗證設置)

(3)正常使用

10.編程式驗證:

Struts2提供了一個 Validateable 接口,Action 類可以實現這個接口中的 validate() 方法,在其中編寫驗證邏輯。ActionSupport 類已經實現了 Validateable 接口。

 

 

 

 

 

 

 

未完,待續

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved