博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2(十二)使用验证框架验证数据较验
阅读量:4652 次
发布时间:2019-06-09

本文共 9795 字,大约阅读时间需要 32 分钟。

一、数据验证

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的配置

xxx.jsp

三、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 + "/";%>
注册页面

输出错误字段信息

使用s:fielderror输出一个指定的错误信息
使用s:fielderror输出全部的错误信息

输出错误Action信息

使用s:actionerror输出action相关的错误信息

使用execute业务方法直接较验

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

/register.jsp
/registerSuccess.jsp

 

四、在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

如果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

struts.xml

/register2.jsp
/registerSuccess.jsp

 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

true
用户名不能为空!
4
16
true
用户名必须为${minLength}至${maxLength}个字符!,当前为${user.username}
true
密码不能为空!
true
6
20
密码必须为${minLength}至${maxLength}个字符,当前为${user.password}
true
年龄不能为空
true
1
200
年龄为${min}---${max}岁之间
true
邮箱不能为空
true
邮箱格式不正确!

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 + "/";%>
注册页面

输出错误字段信息

使用s:fielderror输出全部的错误信息

ActionName-validation.xml较验

struts.xml

/register3.jsp
/registerSuccess.jsp

 

七、针对一个业务编写配置文件

 7.1、更改实现

将上面的年龄验证和邮箱验证独立出来

struts.xml

/register3.jsp
/registerSuccess.jsp

 

UserAction3-validation.xml

true
用户名不能为空!
4
16
true
用户名必须为${minLength}至${maxLength}个字符!,当前为${user.username}
true
密码不能为空!
true
6
20
密码必须为${minLength}至${maxLength}个字符,当前为${user.password}

UserAction3-register3-validation.xml   中间的名称要与action名字相同

true
用户名不能为空!
4
16
true
用户名必须为${minLength}至${maxLength}个字符!,当前为${user.username}
true
密码不能为空!
true
6
20
密码必须为${minLength}至${maxLength}个字符,当前为${user.password}

 7.2、验证顺序

八、以上

转载于:https://www.cnblogs.com/liunanjava/p/4383237.html

你可能感兴趣的文章
NSTimeZone
查看>>
gsp 换行
查看>>
【DWM1000】 code 解密8一 TAG接收blink response 信号
查看>>
添加跟反射
查看>>
uva 1451(树形结合)
查看>>
在C#环境中动态调用IronPython脚本(二)
查看>>
ASP.Net 重写IHttpModule 来拦截 HttpApplication 实现HTML资源压缩和空白过滤
查看>>
javascript时间格式转换
查看>>
wireshark in ubuntu
查看>>
为什么利率上升,债券价格下降?
查看>>
Linux常用的网络命令
查看>>
mysql的唯一索引
查看>>
Notepad++
查看>>
c语言第一次作业--分支 顺序结构
查看>>
一个PPT转H5的小工具
查看>>
java string 全角半角转换
查看>>
spring-boot:run启动报错
查看>>
多入参加法
查看>>
js 表单非空验证
查看>>
WebSocket是什么原理,为什么可以实现持久连接
查看>>