在Action中通過(guò)代碼執(zhí)行數(shù)據(jù)校驗(yàn)

請(qǐng)求參數(shù)的輸入校驗(yàn)途徑一般分兩種:客戶端校驗(yàn) :通過(guò)JavaScript 完成 (jquery validation插件),目的:過(guò)濾正常用戶的誤操作。

服務(wù)器校驗(yàn) :通過(guò)java代碼完成 ,目的:整個(gè)應(yīng)用阻止非法數(shù)據(jù)的最后防線

列如:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

<h1>登錄:請(qǐng)求數(shù)據(jù)校驗(yàn)--代碼手動(dòng)校驗(yàn)</h1>
    <s:fielderror/>
    <form action="${pageContext.request.contextPath }/login.action" method="post">
        用戶名:<input type="text" name="username"/><s:fielderror fieldName="username" /><br/>
        密    碼:<input type="password" name="password"/><br/>
        <input type="submit" value="登錄"/>
    </form>

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

1.全局校驗(yàn) (對(duì)當(dāng)前Action的所有方法進(jìn)行校驗(yàn) )

如果要執(zhí)行校驗(yàn) ,Action必須繼承ActionSupport 類 (因?yàn)樗鼘?shí)現(xiàn) Validateable接口

 

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

//手動(dòng)校驗(yàn)public void validate() {//StringUtils.isBlank()方法判斷輸入是否為空
    if(StringUtils.isBlank(username)){  /*將錯(cuò)誤信息寫入Map<String,List<String>> fieldErrors;
    當(dāng)遇到workflow攔截器時(shí),會(huì)判斷錯(cuò)誤集合的size的大于0,
    如果大于0,則向input的視圖跳轉(zhuǎn)*/
    super.addFieldError("username", "用戶不能為空");
      }
}

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

StringUtils 方法的操作對(duì)象是 java.lang.String 類型的對(duì)象,是 JDK 提供的 String 類型操作方法的補(bǔ)充,并且是 null 安全的(即如果輸入?yún)?shù) 
String 為 null則不會(huì)拋出 NullPointerException ,而是做了相應(yīng)處理。

JSP顯示錯(cuò)誤信息
配置Struts2的特有標(biāo)簽S標(biāo)簽
seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

在jsp增加顯示錯(cuò)誤信息 <s:fielderror />

校驗(yàn)機(jī)制原理分析:


2.局部校驗(yàn) (校驗(yàn)Action中指定業(yè)務(wù)方法—校驗(yàn)一個(gè)方法 )

 在Action 添加 validateXxx 方法(約定), 這里XXX 是要校驗(yàn)?zāi)繕?biāo)方法名 (只會(huì)對(duì)指定方法校驗(yàn))

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

提示:

1.被校驗(yàn)方法首字母 要大寫。

2.全局校驗(yàn)一直會(huì)執(zhí)行,即使有局部校驗(yàn)。且先走的局部校驗(yàn)。

-----------------------------------------------------------------------------------------------------------------------------

 基于XML配置實(shí)現(xiàn)校驗(yàn)

 

 

1.  全局校驗(yàn) (校驗(yàn)當(dāng)前Action 所有方法-是針對(duì)某一個(gè)action中的所有方法)----在Action類所在包,創(chuàng)建 Action類名-validation.xml

JSP頁(yè)面同上

Action代碼: Action 必須繼承ActionSupport 類 (為了實(shí)現(xiàn) Validateable接口 )

 

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

public class LoginAction extends ActionSupport {    private static final long serialVersionUID = 1L;    private String username;    private String password;    public String getUsername() {        return username;
    }    public void setUsername(String username) {        this.username = username;
    }    public String getPassword() {        return password;
    }    public void setPassword(String password) {        this.password = password;
    }    public String execute() throws Exception {
        System.out.println(this);        return INPUT;
    }
    @Override    public String toString() {        return "LoginAction [username=" + username + ", password=" + password                + "]";
    }

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

 

XML代碼:(必須和 action在容一個(gè)包下,Action類名-validation.xml

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

<!DOCTYPE validators PUBLIC
          "-//Apache Struts//XWork Validator 1.0.3//EN"
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
 <validators>
 <!-- 校驗(yàn)用戶 -->
   <field name="username">
     <field-validator type="requiredstring">
       <message>用戶不能為空</message>
     </field-validator>
   </field>
   <!-- 校驗(yàn)密碼 -->
   <field name="password">
     <field-validator type="requiredstring">
       <message>密碼不能為空</message>
     </field-validator>
   </field>
 </validators>

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

 局部校驗(yàn) (校驗(yàn)當(dāng)前Action 指定方法 

在Action類所在包,創(chuàng)建 Action類名-<action>name屬性-validation.xml

JSP頁(yè)面代碼:

 

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

<h1>登錄:請(qǐng)求數(shù)據(jù)校驗(yàn)--xml配置校驗(yàn)--局部</h1>
    <s:fielderror/>
    <form action="${pageContext.request.contextPath }/login3.action" method="post">
        用戶名:<input type="text" name="username"/>(非空,且長(zhǎng)度為3-10位)<br/>
        密    碼:<input type="password" name="password"/>(必須,且長(zhǎng)度為6-12)<br/>
        重復(fù)密碼:<input type="password" name="repassword"/>(必須和密碼一致)<br/>
        年齡:<input type="text" name="age"/>(數(shù)字,且必須是18-100)<br/>
        手機(jī)號(hào)碼:<input type="text" name="mobile"/>(手機(jī)號(hào)規(guī)則,11位數(shù)字)<br/>
        郵箱:<input type="text" name="email"/>(郵箱格式)<br/>
        <input type="submit" value="登錄"/>
    </form>

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

 

Action代碼:

 

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

public class User2Action extends ActionSupport{    private static final long serialVersionUID = 1L;    private String username;    private String password;    private String repassword;    private int age;    private String mobile;    private String email;    
    public String login2(){
        System.out.println(this);        return NONE;
    }/*

       GET和SET 方法略去...............
       toString方法略去..................*/

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

XML代碼:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

<!DOCTYPE validators PUBLIC
          "-//Apache Struts//XWork Validator 1.0.3//EN"
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators>
    <field name="username">
        <field-validator type="stringlength">
            <param name="minLength">3</param>
            <param name="maxLength">10</param>
            <message>用戶名必須在3-10位</message>
        </field-validator>
    </field>
    <field name="password">
        <field-validator type="stringlength">
            <param name="minLength">6</param>
            <param name="maxLength">12</param>
            <message>密碼必須在6-12位</message>
        </field-validator>
    </field>
    <field name="repassword">
        <field-validator type="fieldexpression">
            <param name="expression">password==repassword</param>
            <message>兩次輸入密碼不一致</message>
        </field-validator>
    </field>
    <field name="age">
        <field-validator type="int">
            <param name="min">18</param>
            <param name="max">100</param>
            <message>年齡必須是18-100</message>
        </field-validator>
    </field>
    <field name="mobile">
        <field-validator type="regex">
            <param name="regex"><![CDATA[^1[3|5|8|4]\d{9}$]]></param>
            <message>用戶名必須在3-10位</message>
        </field-validator>
    </field>
    <field name="email">
        <field-validator type="email">
            <message>郵箱格式不正確</message>
        </field-validator>
    </field></validators>

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

 

如果檢測(cè)錯(cuò)誤Action會(huì)自動(dòng)跳轉(zhuǎn)到input視圖。

其他校驗(yàn)器可參考:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

http://www.cnblogs.com/lxp503238/p/7147587.html