web开发(五)之struts校验

web的校验:

  1. 前端的js校验,用于客户端校验一些非法的,不需要后端数据库查询就可以过滤掉的非法输入。例如输入为空,输入不合法等。
  2. 后端的校验,用于服务端校验一些不合数据库约束的输入,例如用户名重复等。

校验方法:

  1. 前端的js校验,利用字符串的特性以及正则匹配可以实现。
  2. 后端数据库的校验可以使用struts来校验。

struts校验的方法:

在Struts2中,数据校验不需要写任何代码,只需要一个配置文件,配置校验的条件就可以了。

校验规则:
1. 此文件中规定了参数的一些校验条件;
2. 可以包括字段型校验器和非字段型校验器;
3. 命名规则:ActionName-validation.xml,其中ActionName是Action类的名字;这类校验主要是针对该action中所有的方法。
4. 每个Action都有一个validation文件,规则文件放在和Action同目录下;
5. 在前面我们讲到的配置逻辑action中,如果需要对某个逻辑Action配置数据校验文件,则命名规则为:ActionName-LogicActionName-validation.xml; 主要用于对特定的方法进行校验。
6. 注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml文件,则也会对此逻辑Action进行校验;
7. 输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context中,因此在JSP中添加< s:fielderror/>可显示错误,此内容也是我们在数据校验文件中配置的;
8. 当输入校验失败后,和类型转换一样,返回逻辑视图为input,因此在struts.xml中必须配< result name=”input”>< /input>
9. 输入校验失败后,struts表单标签也会自动输出错误提示;

struts的校验分为字段型校验和非字段型校验
1. 字段型校验:
以每个Action属性为每一个属性分别书写校验规则,以属性为主。
示例:

属性1
- 规则1
- 规则2 //规则1和规则2分别是对属性1的约束
属性2
- 规则1
- 规则2 //规则1和规则2分别是对属性2的约束

2. 非字段型校验:
以规则为一个单位,满足这个规则的属性就附加在下面:以规则为主。
示例:

规则1
- 属性 //满足这个规则的属性就附加在其中
规则2
- 属性 //满足这个规则的属性就附加在其中
规则3
- 属性 //满足这个规则的属性就附加在其中

校验文件的书写:

1. 数据校验文件以为根元素
2. 字段型校验器是以属性为单位的

<validators>  //根元素
    <field name="">  //属性名
        <field-validator type="">
            <param name=""></param>  //规则
            <message></message>
        </field-validator>
    </field>
</validators>

3. 非字段型校验器是以校验器为单位的

<validator type="">  //规则
        <param name="fieldName"></param>  //属性
        <param name=""></param>
        <message></message>
</validator>

实例:

//字段型校验器配置
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>
    <field name="name">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>姓名不能为空</message>
        </field-validator>
        <field-validator type="regex">

            <param name="expression"><![CDATA[(\w{4,10})]]></param>
            <message>姓名要在4-10位之间</message>
        </field-validator>
    </field>
    <field name="age">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>年龄不能为空</message>
        </field-validator>
        <field-validator type="int">
            <param name="min">0</param>
            <param name="max">200</param>
            <message>年龄范围在0-200之间</message>
        </field-validator>
    </field>
    <field name="email">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>邮箱不能为空</message>
        </field-validator>
        <field-validator type="email">
            <message>邮箱格式不正确</message>
        </field-validator>
    </field>
    <field name="date">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>日期不能为空</message>
        </field-validator>
        <field-validator type="date">
            <param name="min">2010-01-01</param>
            <param name="max">2010-12-31</param>
            <message>日期在2010-01-01到2010-12-31之间</message>
        </field-validator>
    </field>
</validators>
//非字段校验器
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>
    <validator type="requiredstring" short-circuit="true">
        <param name="fieldName">name</param>
        <param name="trim">true</param>
        <message key="aa"></message>
    </validator>
    <validator type="requiredstring" short-circuit="true">
        <param name="fieldName">age</param>
        <param name="trim">true</param>
        <message>年龄不能为空</message>
    </validator>
    <validator type="requiredstring" short-circuit="true">
        <param name="fieldName">email</param>
        <param name="trim">true</param>
        <message>邮箱不能为空</message>
    </validator>
    <validator type="requiredstring" short-circuit="true">
        <param name="fieldName">date</param>
        <param name="trim">true</param>
        <message>日期不能为空</message>
    </validator>
    <validator type="regex">
        <param name="fieldName">name</param>
        <param name="expression"><![CDATA[(\w{4,10})]]></param>
        <message>姓名要在4-10位之间</message>
    </validator>
    <validator type="int">
        <param name="fieldName">age</param>
        <param name="min">0</param>
        <param name="max">200</param>
        <message>年龄范围在0-200之间</message>
    </validator>
    <validator type="email">
        <param name="fieldName">email</param>
        <message>邮箱格式不正确</message>
    </validator>
    <validator type="date">
        <param name="fieldName">date</param>
        <param name="min">2010-01-01</param>
        <param name="max">2010-12-31</param>
        <message>日期在2010-01-01到2010-12-31之间</message>
    </validator>
</validators>

这些配置文件可以用于客户端的校验,但是在JSP的元素中添加属性 validate=”true”;添加后,在校验规则文件的规则会转变为客户端校验规则,即任何校验都不需要接触服务器;
需要注意的是:如果直接访问JSP页面,并不能体现出客户端校验,只有通过访问某个action然后跳转到JSP页面才可以让客户端校验生效;

短路校验器的规则:

1.当非字段校验器校验失败,则其后的所有字段校验器都不会执行,而不会影响其他非字段校验器;
2.字段校验器校验失败时,其后的所有字段校验器都不会执行;

校验器的运行顺序

1.非字段校验器比字段校验器先执行;
2.从前往后执行;

内建校验器:
在xwork包下com/opensymphony/xwork2/validator/validators/default.xml中定义了内建的校验器

1.required校验器

此校验器要求字段必须为非空;

2.requiredstring校验器

此校验器要求检验字符串非空并且必须长度大于0,即不能是””
可选参数为:
(1)trim:如果为true,则将前后的空白去掉,类似于String的trim函数;

3.int校验器

此校验器要求整数限定在一定范围之内;
可选参数为:
(1)min:最小值;
(2)max:最大值;

4.date校验器

要求日期在一定范围之内;
可选参数:
(1)min:最小日期;
(2)max:最大日期;

5.fieldexpression校验器

要求此校验器满足指定的逻辑表达式;
可选参数:
(1)expression:逻辑表达式;格式为:< ! [CDATA[(逻辑表达式)]] >

6.email校验器

要求字段一定要满足电子邮箱格式;

7.url校验器

要求字段格式满足URL格式;

8.stringlength校验器

要求字段是string,并且长度在一定范围之内;
可选参数:
(1)trim:删除前后空白;
(2)minLength:最小长度;
(3)maxLength:最大长度;

9.regex校验器

要求满足给定的正则表达式;
可选参数:
(1)expression:给出正则表达式;格式如:< ! [CDATA[(正则表达式)]] >
(2)caseSensitive:是否区分大小写;

手动校验:
如果内建校验器不满足要求,可以自定义校验器,方法是在Action类中重写public void validate()方法;并且如果不满足条件,调用addFieldError(“name”,”message”),然后返回input逻辑视图;

当然如果一个Action类中有多个逻辑Action,则validate方法就不管用,因此需要定义validateXxx()方法;比如:
如果逻辑Action的处理方法是fun(),则定义validateFun()方法,实现和validate方法一样;

注意:如果逻辑Action的校验函数是validateXxx(),则validate()一样也会被调用,因为只要对此物理Action进行校验,则validate()方法总会起作用。这和前面输入校验规则文件时一样的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值