zoukankan      html  css  js  c++  java
  • 十三、用户输入数据的校验

    十三、用户输入数据的校验

    1、校验方式:

    a:客户端校验。(防君子不防小人)在页面中写js脚本。

    输入错误的话提醒比较及时;

    减轻服务器的压力

    b、服务器端校验。

    数据安全

    开发中:a+b

    2、服务器端校验:

    • 编程式校验:自己编写一个校验代码(缺点:验证规则都写在了代码中)

    前提:动作类继承ActionSupport

    1、针对动作类中的所有动作进行校验

    //针对所有的动作方法进行校验

        public void validate() {

            //校验规则:如果出现不符合条件的,向一个Map<String, String>

            // key:字段名 value:错误消息

            if (StringUtils.isEmpty(username)) {//null 或者"",都返回true

                this.addFieldError("username", "用户名不能为空");

            }

        }

     

    1. 针对指定的动作进行校验

      方式一:写了一个validate方法,可以在不需要验证的动作方法前,使用

      @SkipValidation//带有此注解的动作方法会被忽略验证

          public String registUI() {

              return SUCCESS;

          }

       

      方式二:validate方法有一定的书写规范。public void validate动作方法名(首字母大写)

      public void validateRegist() {

              //校验规则:如果出现不符合条件的,向一个Map<String, String>

              // key:字段名 value:错误消息

              if (StringUtils.isEmpty(username)) {//null 或者"",都返回true

                  this.addFieldError("username", "用户名不能为空");

              }

          }

       

      总结:所有验证不通过或转换不同的过的,框架都会转向name="input"的结果视图。要显示错误提示,

      使用<s:fieldError/>标签,显示字段有关的错误提示

    • 声明式校验:通过xml配置文件(方便)

    1、针对动作类中的所有动作进行校验

    在动作类所在的包中,建立一个名称为:"动作类名-validation.xml"配置文件:

    <?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>

        <!--验证字段名是哪个 -->

        <field name="username">

            <!--指定验证器:requiredstring:不能是null,也不能是"",还不能全部是空格 -->

            <field-validator type="requiredstring">

                <message>用户名不能为空</message>

            </field-validator>

        </field>

     

    </validators>

     

    说明:dtd约束在何处--->xwork-core-**.jar包中

    校验器的类型:也就是代码:以下代码中type的值

    <field-validator type = "requirestring"> <field-validator>

    常用的校验器有以下几种类型:

    1.require:要求被校验的属性值不能为null

    2.requiredstring:要求被校验的属性值不能为null,也不能为空字符串,

    默认情况下会先去除属性的前后空格之后再进行判断

    3.stringlength(字符串长度校验器,要求被校验的属性值必须在指定的范围内,

    否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)

    4. email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址) 5. regex(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,

    expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)

    6. int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)

    7. double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

    8. date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值) 等等……

    9. expression(OGNL表达式校验器,它是一个非字段校验器,

    expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,

    返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)

     

    1. 针对指定的动作进行校验

      方式一:使用@SkipValidation

      方式二:声明文件遵循一定的书写规范:

      动作类名-动作名(struts.xml配置文件中的)-validation.xml

    2. struts2框架内置的声明式类型验证器

      xwork-core-**.jar

      com.opensymphony.xwork2.validator.validators中的default.xml

       

      给验证器注入参数:

      <field name="username">

              <field-validator type="requiredstring">

                  <message>用户名不能为空</message>

              </field-validator>

              <field-validator type="stringlength">

                  <param name="maxLength">8</param>

                  <param name="minLength">6</param>

                  <message>用户名长度介于${minLength}~${maxLength}个字符之间</message>

              </field-validator>

          </field>

       

    3. 自定义声明式校验

      验证密码的强度

      开发步骤:

    4. 编写一个类:实现Validator接口或者继承ValidatorSupport。如果是验证表单字段有关,建议继承FieldValidatorSupport

      public class StrongPasswordValidator extends FieldValidatorSupport {

          // object 就是动作类

          @Override

          public void validate(Object object) throws ValidationException {

              // 字段名

              String fieldName = getFieldName();

              // 获取封装到动作类中的对应的字段值

              Object fieldValue = getFieldValue(fieldName, object);

              if (fieldValue == null) {

                  return;

              }

              // 如果该字段不够强壮,就添加错误信息

              if (!isStrong((String) fieldValue)) {

                  addFieldError(fieldName, object);

              }

          }

      }

       

    5. 要注册校验器

      在WEB-INFclasses目录下,建立一个固定名称为validators.xml的配置文件

      <?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="strongpassword"

              class="com.itheima.validator.StrongPasswordValidator" />

      </validators>

       

    6. 可以像使用requiredstring这样的验证器来使用了

      <field name="password">

              <field-validator type="requiredstring">

                  <message>密码不能为空!</message>

              </field-validator>

              <field-validator type="stringLength">

                  <param name="maxLength">8</param>

                  <param name="minLength">5</param>

                  <message>密码长度介于${minLength}~${maxLength}个字符之间</message>

              </field-validator>

              <!-- 使用自定义的校验器 -->

              <field-validator type="strongpassword">

                  <message>密码不够强壮</message>

              </field-validator>

          </field>

       

  • 相关阅读:
    linux 内核定时器 timer_list详解
    linux2.6源码分析之解压内核映像 head.s
    [C#]我自己写的一个对字节中每位进行修改值的函数
    Android Intent调用大全
    proguard 原理
    何为夫妻?何为家?何为幸福?
    生命只是瞬间,而有些人终究是过客?(转)
    bind端口复用
    在android开发中应该如何管理内存或者是在开发过程中应该注意哪些问题来较少OOM?
    W/ActivityManager( 1419): Activity is launching as a new task, so cancelling activity result.
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5886435.html
Copyright © 2011-2022 走看看