亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Struts2(十二)使用驗證框架驗證數據較驗

2019-11-14 23:33:52
字體:
來源:轉載
供稿:網友
Struts2(十二)使用驗證框架驗證數據較驗一、數據驗證1.1、為什么要進行數據驗證

對數據的合法性進行檢查,只允許合法的數據進入應用程序

1.2、在哪里實現數據驗證

客戶端驗證:

數據提交前在客戶端驗證

可使用javaScript或者JQuery實現

特點:減少客戶等待時間,減小服務器壓力

服務器端驗證:

在數據提交后服務器端驗證

特點:防止“繞過”客戶端驗證提交非法數據

   可以在服務器端處理數據前確保數據的合法性

1.3、Struts2有兩種方式實現服務器端數據驗證
  • 使用ActionSupport編碼實現驗證
  • 使用驗證框架實現驗證
二、使用ActionSupport實現驗證
  • 在Action類的業務方法中直接驗證
  • 重寫Validate()方法
  • 使用validateXxx()方法
2.1、添加錯誤信息

addFieldError(String fieldName,String errorMessage),添加字段的錯誤信息

addActionError(String anErrorMessage),添加與Action所處理業務相關的錯誤信息

2.2、在頁面輸出驗證結果
  • <s:fielderror/>輸出一個或者所胡字段的錯誤信息
  • <s:actionerror/>輸出所有Action的錯誤信息
2.3、action的配置
<result name="input">xxx.jsp</result>
三、ActionSupport驗證簡單實現3.1、業務方法中較驗

實體類

package com.pb.entity;/* * 用戶類 */public class User {    PRivate String username;    //用戶名    private String passWord;    //密碼    private Integer age;        //年齡    private String email;        //郵箱            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 Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }}

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags"%><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://"            + request.getServerName() + ":" + request.getServerPort()            + path + "/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>注冊頁面</title></head><body><!--  判斷字段是否有錯誤信息--><s:if test="hasFieldErrors()"><h1 align="center">輸出錯誤字段信息</h1><div align="center" style="color:blue;">使用s:fielderror輸出一個指定的錯誤信息<s:fielderror name="user.username" />使用s:fielderror輸出全部的錯誤信息<s:fielderror /></div></s:if><!-- 判斷action是否有錯誤 --><s:if test="hasActionErrors()"><h1 align="center">輸出錯誤Action信息</h1><div  align="center" style="color:gray;">使用s:actionerror輸出action相關的錯誤信息<s:actionerror/></div></s:if><h1>使用execute業務方法直接較驗</h1><s:form action="register.action" method="post" ><s:textfield label="用戶名"  name="user.username"/><s:password  label="密碼" name="user.password"/><s:textfield label="年齡" name="user.age" /><s:textfield  label="郵箱" name="user.email"/><s:submit  value="提交" /><s:reset value="重置" /><br/></s:form><s:debug/></body></html>

UserAction

package com.pb.web.action;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.User;public class UserAction extends ActionSupport {    private User user;    @Override    public String execute() throws Exception {        if(null==user.getUsername() || "".equals(user.getUsername())){            this.addFieldError("user.username", "用戶名不能為空!");        }        if(null==user.getPassword() || "".equals(user.getPassword())){            this.addFieldError("user.password", "密碼不能為空!");        }        String ageStr="^//d{1,3}$";        Pattern ageReg=Pattern.compile(ageStr);        Matcher ageMatcher=ageReg.matcher(user.getAge()+"");        if(!ageMatcher.matches()){            this.addFieldError("user.age", "年齡只能是數字,并只能為1-200之間!");        }        if(null==user.getAge()){            this.addFieldError("user.age", "年齡不能為空!");        }            String emaString="^//w+@//w+(.//w{2,3}){1,2}$";        Pattern emailReg=Pattern.compile(emaString);        Matcher emailMatcher=emailReg.matcher(user.getEmail());        if(!emailMatcher.matches()){            this.addFieldError("user.email", "郵箱格式不正確");        }        if(this.hasErrors()){            this.addActionError("輸入的注冊信息有誤");            return INPUT;        }        return SUCCESS;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }        }

struts.xml

<struts>    <constant name="struts.enable.DynamicMethodInvocation" value="false" />    <constant name="struts.devMode" value="true" />    <package name="default" namespace="/" extends="struts-default">    <action name="register" class="com.pb.web.action.UserAction">    <result name="input">/register.jsp</result>    <result name="success">/registerSuccess.jsp</result>    </action>        </package></struts>

四、在Validate()方法中實現驗證
  • 重寫ActionSupport類的validate()方法
  • 在validate()方法中實現驗證
  • 將數據驗證和業務處理分離
  • 添加與顯示錯誤信息的方式不變

接收參數時,數據轉換失敗也會調用validate()方法

validate()方法驗證不通過不會執行業務方法

4.1、更改之前實現validate()驗證

package com.pb.web.action;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.User;public class UserAction1 extends ActionSupport {    private User user;    @Override    public String execute() throws Exception {        System.out.println("=========完成注冊信息======");        if(this.hasErrors()){            this.addActionError("輸入的注冊信息有誤");            return INPUT;        }        return SUCCESS;    }                @Override    public void validate() {        if(null==user.getUsername() || "".equals(user.getUsername())){            this.addFieldError("user.username", "用戶名不能為空!");        }        if(null==user.getPassword() || "".equals(user.getPassword())){            this.addFieldError("user.password", "密碼不能為空!");        }        String ageStr="^//d{1,3}$";        Pattern ageReg=Pattern.compile(ageStr);        Matcher ageMatcher=ageReg.matcher(user.getAge()+"");        if(!ageMatcher.matches()){            this.addFieldError("user.age", "年齡只能是數字,并只能為1-200之間!");        }        if(null==user.getAge() || "".equals(user.getAge())){            this.addFieldError("user.age", "年齡不能為空!");        }else{            if(0>user.getAge() || 200<user.getAge()){                this.addFieldError("user.age", "年齡1-200之間!!");            }        }                    String emaString="^//w+@//w+(.//w{2,3}){1,2}$";        Pattern emailReg=Pattern.compile(emaString);        Matcher emailMatcher=emailReg.matcher(user.getEmail());        if(!emailMatcher.matches()){            this.addFieldError("user.email", "郵箱格式不正確");        }        super.validate();            }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }        }

如果Action中有validate()方法,會先執行驗證,驗證后才執行業務方法,不通過不執行業務方法

五、針對一個業務方法進行數據驗證

使用validateXxx()方法

  • Struts2支持validateXxx()方法針對xxx()方法進行數據驗證
  • 使用validateRegister()方法實現針對register()方法的數據驗證
  • 注冊時通過validateRegister()方法驗證年齡和郵箱等其它字段
  • 注冊和登錄時在validate()方法中驗證用戶名和密碼非空等其它驗證

validate()方法和validateXxx()方法同時存在時都會起作用

ValidateXxx()方法的調用要先于validate()方法

5.1、使用針對注冊的驗證方法
package com.pb.web.action;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.User;public class UserAction2 extends ActionSupport {    private User user;    public String register() throws Exception {        System.out.println("=========完成注冊信息======");        if(this.hasErrors()){            return INPUT;        }        return SUCCESS;    }                @Override    public void validate() {        System.out.println("====執行validate方法驗證====");        if(null==user.getUsername() || "".equals(user.getUsername())){            this.addFieldError("user.username", "用戶名不能為空!");        }        if(null==user.getPassword() || "".equals(user.getPassword())){            this.addFieldError("user.password", "密碼不能為空!");        }    }public void validateRegister(){    System.out.println("====執行validateRegister方法驗證====");    String ageStr="^//d{1,3}$";    Pattern ageReg=Pattern.compile(ageStr);    Matcher ageMatcher=ageReg.matcher(user.getAge()+"");    if(!ageMatcher.matches()){        this.addFieldError("user.age", "年齡只能是數字,并只能為1-200之間!");    }    if(null==user.getAge() || "".equals(user.getAge())){        this.addFieldError("user.age", "年齡不能為空!");    }else{        if(0>user.getAge() || 200<user.getAge()){            this.addFieldError("user.age", "年齡1-200之間!!");        }    }        String emaString="^//w+@//w+(.//w{2,3}){1,2}$";    Pattern emailReg=Pattern.compile(emaString);    Matcher emailMatcher=emailReg.matcher(user.getEmail());    if(!emailMatcher.matches()){        this.addFieldError("user.email", "郵箱格式不正確");    }}    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }        }

struts.xml

<action name="register2" class="com.pb.web.action.UserAction2" method="register">    <result name="input">/register2.jsp</result>    <result name="success">/registerSuccess.jsp</result>    </action>
5.2、三種方法

六、驗證框架

6.1、實現
package com.pb.web.action;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.User;public class UserAction3 extends ActionSupport {    private User user;    public String register() throws Exception {        System.out.println("=========完成注冊信息======");        return SUCCESS;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }        }

UserAction3-validation.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><!--  用戶名驗證--><field name="user.username"><field-validator type="requiredstring"><param name="trim">true</param><message>用戶名不能為空!</message></field-validator><field-validator type="stringlength"><param name="minLength">4</param><param name="maxLength">16</param><param name="trim">true</param><message>用戶名必須為${minLength}至${maxLength}個字符!,當前為${user.username}</message></field-validator></field><!--密碼  --><field name="user.password"><field-validator type="requiredstring"><param name="trim">true</param><message>密碼不能為空!</message></field-validator><field-validator type="stringlength"><!--去掉前后的空格  --><param name="trim">true</param><param name="minLength">6</param><param name="maxLength">20</param><message>密碼必須為${minLength}至${maxLength}個字符,當前為${user.password}</message></field-validator></field><!--年齡  --><field name="user.age"><field-validator type="required"><param name="trim">true</param><message>年齡不能為空</message></field-validator><field-validator type="int"><param name="trim">true</param><param name="min">1</param><param name="max">200</param><message>年齡為${min}---${max}歲之間</message></field-validator></field><field name="user.email"><field-validator type="requiredstring"><param name="trim">true</param><message>郵箱不能為空</message></field-validator><field-validator type="email"><param name="trim">true</param><message>郵箱格式不正確!</message></field-validator></field></validators>

jsp頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags"%><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://"            + request.getServerName() + ":" + request.getServerPort()            + path + "/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>注冊頁面</title></head><body><!--  判斷字段是否有錯誤信息--><s:if test="hasFieldErrors()"><h1 align="center">輸出錯誤字段信息</h1><div align="center" style="color:blue;">使用s:fielderror輸出全部的錯誤信息<s:fielderror /></div></s:if><h1>ActionName-validation.xml較驗</h1><!-- 必須加上namespace不然不起作用--><s:form action="register3.action" method="post" namespace="/" ><s:textfield label="用戶名"  name="user.username"/><s:password  label="密碼" name="user.password"/><s:textfield label="年齡" name="user.age" /><s:textfield  label="郵箱" name="user.email"/><s:submit  value="提交" /><s:reset value="重置" /><br/></s:form><s:debug/></body></html>

struts.xml

<action name="register3" class="com.pb.web.action.UserAction3" method="register">    <result name="input">/register3.jsp</result>    <result name="success">/registerSuccess.jsp</result>    </action>

七、針對一個業務編寫配置文件

7.1、更改實現

將上面的年齡驗證和郵箱驗證獨立出來

struts.xml

<action name="register3" class="com.pb.web.action.UserAction3" method="register">    <result name="input">/register3.jsp</result>    <result name="success">/registerSuccess.jsp</result>    </action>

UserAction3-validation.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><!--  用戶名驗證--><field name="user.username"><field-validator type="requiredstring"><param name="trim">true</param><message>用戶名不能為空!</message></field-validator><field-validator type="stringlength"><param name="minLength">4</param><param name="maxLength">16</param><param name="trim">true</param><message>用戶名必須為${minLength}至${maxLength}個字符!,當前為${user.username}</message></field-validator></field><!--密碼  --><field name="user.password"><field-validator type="requiredstring"><param name="trim">true</param><message>密碼不能為空!</message></field-validator><field-validator type="stringlength"><!--去掉前后的空格  --><param name="trim">true</param><param name="minLength">6</param><param name="maxLength">20</param><message>密碼必須為${minLength}至${maxLength}個字符,當前為${user.password}</message></field-validator></field></validators>

UserAction3-register3-validation.xml 中間的名稱要與action名字相同

<?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><!--  用戶名驗證--><field name="user.username"><field-validator type="requiredstring"><param name="trim">true</param><message>用戶名不能為空!</message></field-validator><field-validator type="stringlength"><param name="minLength">4</param><param name="maxLength">16</param><param name="trim">true</param><message>用戶名必須為${minLength}至${maxLength}個字符!,當前為${user.username}</message></field-validator></field><!--密碼  --><field name="user.password"><field-validator type="requiredstring"><param name="trim">true</param><message>密碼不能為空!</message></field-validator><field-validator type="stringlength"><!--去掉前后的空格  --><param name="trim">true</param><param name="minLength">6</param><param name="maxLength">20</param><message>密碼必須為${minLength}至${maxLength}個字符,當前為${user.password}</message></field-validator></field></validators>
7.2、驗證順序

八、以上


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产又爽又黄的激情精品视频| 亚洲色图35p| 日韩精品久久久久| 黄色成人在线免费| 欧美视频一二三| 国产精品视频地址| 欧美视频在线视频| 亚洲自拍偷拍福利| 正在播放国产一区| 欧美激情区在线播放| 日韩视频中文字幕| 亚洲国产美女精品久久久久∴| 中文字幕亚洲一区在线观看| 狠狠操狠狠色综合网| 日韩av电影在线网| 日韩成人中文字幕在线观看| 国产日韩在线播放| 国内精品久久久久影院 日本资源| 国产精品一区二区三区免费视频| 欧美亚洲国产日本| 亚洲精品久久久久久久久久久久| 51色欧美片视频在线观看| 久久久久久久久久国产| 亚洲国内精品视频| 日韩中文在线中文网在线观看| 久久精品这里热有精品| 国产女精品视频网站免费| 91亚洲午夜在线| 日韩免费电影在线观看| 久久天天躁狠狠躁夜夜躁| 久久久久久香蕉网| 成人午夜在线视频一区| 2021久久精品国产99国产精品| 亚洲性线免费观看视频成熟| 国产自产女人91一区在线观看| 欧美成人精品一区二区| 久久免费国产视频| 国产精品嫩草影院久久久| 国内伊人久久久久久网站视频| 亚洲男人的天堂在线| 亚洲福利在线播放| 欧美诱惑福利视频| 亚洲精品日韩丝袜精品| 国产精品va在线播放我和闺蜜| 国产一区二中文字幕在线看| 欧美专区国产专区| 欧美精品国产精品日韩精品| 日本亚洲欧洲色α| 亚洲欧美视频在线| 91精品国产乱码久久久久久久久| 欧美高清在线视频观看不卡| 日韩av大片在线| 国产精品福利观看| 久久夜精品香蕉| 精品久久香蕉国产线看观看亚洲| 日韩欧美国产骚| 91精品国产777在线观看| 青青草成人在线| 欧美亚洲国产成人精品| 欧美乱大交做爰xxxⅹ性3| 欧美一级片一区| 精品美女永久免费视频| 国产精自产拍久久久久久蜜| 欧美日韩精品国产| 国产欧美va欧美va香蕉在线| 国产男人精品视频| 欧美福利视频在线观看| 2019国产精品自在线拍国产不卡| 亚洲国产精品yw在线观看| 91免费视频网站| 欧美日韩国产黄| 久久伊人精品视频| 色视频www在线播放国产成人| 成人啪啪免费看| 久久综合网hezyo| 亚洲精品美女在线观看播放| 日韩av综合网| 国产精品美女www爽爽爽视频| zzijzzij亚洲日本成熟少妇| 国产亚洲欧美aaaa| 欧美大奶子在线| 国产成+人+综合+亚洲欧美丁香花| 国产小视频91| 日韩动漫免费观看电视剧高清| 久久久国产精品一区| 亚洲福利视频网站| 这里只有精品在线观看| 日本一欧美一欧美一亚洲视频| 在线中文字幕日韩| 亚洲欧美激情另类校园| 亚洲视频一区二区| 亚洲天堂成人在线视频| 亚洲一级黄色片| 成人午夜激情免费视频| 国内精品视频在线| 亚洲精品国产欧美| 91在线观看欧美日韩| 欧美老女人www| 亚洲深夜福利视频| 久久精品亚洲精品| 久久久久亚洲精品成人网小说| 亚洲xxx视频| 色先锋资源久久综合5566| 欧美在线视频导航| 黑人巨大精品欧美一区二区免费| 精品一区二区亚洲| 成人免费xxxxx在线观看| 国产成人小视频在线观看| 亚洲天堂av在线播放| 久久全球大尺度高清视频| 亚洲国产福利在线| 日韩精品在线观看一区二区| 日韩美女在线看| 最近2019好看的中文字幕免费| 亚洲第一精品久久忘忧草社区| 国产精品美女久久久免费| 亚洲免费视频在线观看| 亚洲一区二区三区四区视频| 欧美激情国产日韩精品一区18| 日韩高清电影免费观看完整版| 精品久久香蕉国产线看观看gif| 久久视频在线播放| 久久在线视频在线| 在线亚洲男人天堂| 欧美大胆在线视频| 91国产精品91| 欧美成年人视频网站| 国产乱人伦真实精品视频| 91av在线视频观看| 青青草精品毛片| 久久影视免费观看| 中文字幕亚洲欧美日韩高清| 亚洲爱爱爱爱爱| 久久久久久国产三级电影| 国产欧美va欧美va香蕉在线| 午夜精品蜜臀一区二区三区免费| 亚洲嫩模很污视频| 国产脚交av在线一区二区| 亚洲色图日韩av| 精品欧美aⅴ在线网站| 国产视频在线观看一区二区| 国产成+人+综合+亚洲欧美丁香花| 日韩精品免费在线| 久久久久免费精品国产| 最新日韩中文字幕| 亚洲3p在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品91一区| 欧美视频专区一二在线观看| 日韩欧美在线字幕| 国产精品女主播| 欧美男插女视频| 日韩一区二区福利| 日韩精品中文字幕有码专区| 亚洲福利视频网站| 色香阁99久久精品久久久| 国产专区欧美专区| 国产精品欧美激情在线播放| 国产精品夫妻激情| 精品国产户外野外| 成人黄色影片在线| 中文字幕日韩av| 亚洲奶大毛多的老太婆| 色99之美女主播在线视频|