14 Struts2 验证框架

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/82020359 数据校验数据校验是程序中最常见的模块。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/82020359

数据校验

数据校验是程序中最常见的模块。数据校验的目的就是保证用户输入是合法有效的。常见数据校验分三种:
1. 前台通过JavaScript校验(客户端校验);
特点:① 减少客户等待时间;② 减少服务器压力
2. 后台代码校验(服务端校验);
① 防止”绕过”客户端验证提交非法数据。② 可以在服务端处理数据前确保数据的合法性
3. 数据库校验(约束,非空等);在程序中能够使用第一种校验就使用第一种,第一种不能够完全校验采取第二种,尽可能不要用第三种校验;因为数据库资源十分珍贵。

struts2 数据校验

struts2 验证分两种:一种使用ActionSupport 编码实现验证。另外一种使用验证框架实现验证;

1. ActionSupport 实现验证

1.1 在业务方法中实现验证

1. 用ActionSupport实现验证
1. 在Action类的业务方法中直接验证
2. 重写validate()方法
3. 使用validateXxx()方法

2. 添加错误信息
addFieldError(String fieldName,String errorMessage) addFieldError用来添加字段相关的错误信息(用户名字段为空,年龄字段值不合理)

ddActionError(String anErrorMessage) addActionError添加与Action所处理业务相关的错误信息(用户名密码都填了,但填的不正确,无法登录)

3. 在页面输出验证结果

<!-- 输出一个或所有字段错误信息 -->
<s:fielderror/> 
<!-- 输出所有Action的错误信 -->
<s:actionerror/>
<!-- 输出指定某个错误信息 -->
<s:fielderror>
    <s:param>errorKey</s:param>
</s:fielderror>

4. <action>的配置

<result name="input">xxx.jsp</result>

Action 中通过hasErrors() , hasFieldErrors() , hasActionErrors() 来判断是否有错误信息

Action类

public String add1() {

    System.out.println("-------add1----");

    if (perion.getPname() == "") {
        addFieldError("pname", "账号不能为空!");
    }
    if ("" == perion.getPwd() || perion.getPwd().length() < 6) {
        addFieldError("pwd", "密码不能够为空且密码长度不能够小于6");
    }

    if (perion.getAge() < 18 || perion.getAge() > 25) {
        addFieldError("age", "年龄不合法,必须在(18-25)之间");
    }

    if (hasFieldErrors()) {
        return INPUT;
    }

    // 持久化操作
    return SUCCESS;
}

struts.xml

<action name="addPersion" class="com.javaee.struts2.action.PersionAction">
    <result>/show.jsp</result>
    <result name="input">/index.jsp</result>
</action>

JSP

<s:fielderror />
<s:fielderror>
    <s:param>age</s:param>
</s:fielderror>
<s:form action="addPersion!add1" method="post">

    <s:textfield name="pname" value="zhagnsan" label="账号" />
    <s:textfield name="pwd" label="密码" value="123" />
    <s:radio name="sex" list="{'男','女','人妖'}" label="性别" />
    <s:textfield name="age" label="年龄" value="14" />
    <s:select name="city" list="{'北京','天津','上海','重庆'}" label="城市" />

    <s:submit value="注册" />
</s:form>
1.2 使用validate()方法实现验证

使用使用validate() 方法验证步骤
1. 重写ActionSupper 类的 validate()方法
2. 在validate() 方法中实现验证
3. 将数据验证和业务处理分离
4. 添加与现实信息的方式不变

小经验
1. 接收参数时, 数据转换失败也会调用validate()方法。
2. validate()方法验证不通过,不会执行业务方法。

1.3 使用validateXxx()方法实现验证

validate()方法验证会对Action中所有的方法起作用,如果在实际需求中只需要对某个方法进行验证就需要使用validateXxx()方法进行数据校验。

validateXxx()方法验证
1. struts2支持validateXxx()方法针对xxx()方法进行数据验证
2. 使用validateRegister()方法实现针对register方法进行数据验证

小经验
1. validate()方法和validateXxx()方法同时存在时都会起作用
2. validateXxx()方法的调用优先于validate()方法

总结
1. 在Action中添加错误信息
     addFielError(errorKey,errorValue);
     addActionError(errorValue);
2. 在页面显示错误信息
     输出一个或所有字段的错误信息
     输出所有Action的错误信息
3. 实现验证位置
     在业务方法中直接实现数据校验
     在validate() 方法中实现数据校验
     在validateXxx() 方法中实现数据校验

2. 使用验证框架进行验证

使用验证框架验证优点
1. 验证部分复用、扩展容易
2. 验证和业务处理分离

使用验证框架步骤
1. 编写JSP页面
2. 编写Action及其配置文件
3. 在Action类同目录下创建ActionName-validation.xml文件
     ActionName 必须与Action类的名字一致
     -validation.xml 属于固定写法
4. 编写验证规则

2.1 使用ActionName-validation.xml 实现验证

struts2的几个常用的验证类

验证规则 规则说明
required 字段不能为空
requiredstring 字符串不能为空
int int类型(可指定范围)
long long类型(可指定范围)
short short类型(可指定范围)
double double类型(可指定范围)
date 时间格式(可指定范围)
expression ognl表达式判断
fieldexpression ognl表达式判断
email 邮箱判断
url url路径判断
visitor 把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)
conversion 格式转换
stringlength 字符串长度
regex 正则表达式判断
2.2 使用ActionName-alias-validation.xml进行证

ActionName-validation.xml 对Action类中所有的业务方法都生效。如果只想验证某一个业务方法就需要使用ActionName-alias-validation.xml 进行验证

注意:alias 是struts.xml配置的Action的name名字不是方法名称

小结
1. ActionName-validation.xml 可对Action类中所有业务方法起作用
2. ActionName-alias-validation.xml 只针对Action类中某一个业务方法起作用
3. 以上两个文件都存在时,两个验证都起作用

验证顺序
1. Action父类-validation.xml
2. Action父类-alias-validation.xml
3. Action类-validation.xml
4. Action类-alias-validation.xml

总结
1. 使用ActionSupper实现验证有三种方式
     1. 在业务方法里面实现数据校验
     2. 在validate()方法中实现数据校验
     3. 在validateXxx()方法中实现数据校验
2. Action类中添加错误信息有两种方式
     1. 使用addFieldError() 添加字段错误信息
     2. 使用addActionError() 方法添加Action业务相关的错误信息
3. 使用验证框架验证
     1. ActionName-validation.xml
     2. ActionName-alias-validation.xml
     3. 验证框架规则看考帮助文档
4. 显示错误信息
     1. 输出一个或所有字段错误
     2. 输出所有Action的错误信息

相关文章
|
5月前
|
设计模式 JSON 前端开发
Struts2框架知识分享
【6月更文挑战第7天】Struts2框架知识分享
64 0
|
6月前
|
XML 前端开发 Java
外文翻译:Struts框架介绍
外文翻译:Struts框架介绍
|
前端开发 Java 网络安全
《SSH框架》Struts2
Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的。
|
前端开发 Java
|
前端开发 JavaScript 数据安全/隐私保护
Struts2利用验证框架实现数据验证(十一)上
Struts2利用验证框架实现数据验证(十一)
188 0
Struts2利用验证框架实现数据验证(十一)上
|
XML 前端开发 Java
Struts2利用验证框架实现数据验证(十一)下
Struts2利用验证框架实现数据验证(十一)
115 0
Struts2利用验证框架实现数据验证(十一)下
|
XML 前端开发 数据安全/隐私保护
Struts2利用验证框架实现数据验证(十一)中
Struts2利用验证框架实现数据验证(十一)
168 0
Struts2利用验证框架实现数据验证(十一)中
|
Java 数据安全/隐私保护 应用服务中间件