虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > Struts2学习教程之输入校验示例详解

Struts2学习教程之输入校验示例详解
类别:Java编程   作者:码皇   来源:互联网   点击:

这篇文章主要给大家介绍了关于Struts2学习教程之输入校验的相关资料,文中通过示例介绍的非常详细,对大家学习或者使用struts2具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

数据校验几乎是每个应用都要做的工作。用户输入的数据,发送到服务器端,天知道用户输入的数据是否是合法的,是否为恶意输入。所以一个健壮的应用系统必须对用户的输入进行校验,将非法的输入阻止在应用之外,防止这些非法的输入进入系统,从而保证系统的稳定性、安全性。

我们都知道,为了更好的用户体验,以及更高的效率,现在的Web应用都存在以下两重数据校验:

  • 客户端数据校验
  • 服务器端数据校验

对于客户端数据校验主要是通过JavaScript代码来完成;而对于服务器端数据校验是整个应用阻止非法数据的最后防线,主要通过在应用中编程实现。

Struts2框架为了减轻开发人员的工作量,提高工作效率,在数据校验这方面也下了很大功夫,那么Struts2是如何完成数据校验的呢?(由于Struts2框架的客户端校验能力较弱,不予总结,这篇文章主要总结Struts2框架的服务器端数据校验功能)

编写校验规则文件

我们都知道数据校验都是一些繁琐的代码,为了从这些繁琐的代码中抽身出来,Struts2框架提供了基于配置文件的数据校验,只需要编写校验规则文件即可,校验规则文件指定每个表单域应该满足怎样的规则。

下面通过一个Demo示例来说说Struts2框架的输入校验。

前台页面:

    <body> <form action="login" method="post"> 用户名:<input type="text" name="name" /><s:fielderror fieldName="name" /><br> 密码:<input type="password" name="password" /><s:fielderror fieldName="password" /><br> 年龄:<input type="text" name="age" /><s:fielderror fieldName="age" /><br> 生日:<input type="text" name="birthday" /><s:fielderror fieldName="birthday" /><br> <input type="submit" value="提交" /> </form></body>

后台Action处理代码:

    public class LoginAction extends ActionSupport{
    private String name;
    private String password;
    private int age;
    private Date birthday;
    private String tip;
    public void setName(String name) {
    this.name = name;
    }
    public String getName() {
    return name;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getPassword() {
    return password;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public int getAge() {
    return age;
    }
    public void setBirthday(Date birthday) {
    this.birthday = birthday;
    }
    public Date getBirthday() {
    return birthday;
    }
    public void setTip(String tip) {
    this.tip = tip;
    }
    public String getTip() {
    return tip;
    }
    public String execute() throws Exception {
    // 这里简化了操作 return SUCCESS;
    }
    }

通过上面的Action代码可以看到,我并没有为添加任何的字段校验代码,而我们只需要编写一个校验文件,如下:

    <?xml version="1.0" encoding="UTF-8"?><!-- 指定校验配置文件的DTD信息 --><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><!-- 校验文件的根元素 --><validators> <!-- 校验Action的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须填入名字</message> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="regexExpression"><![CDATA[(w{
    4,25}
    )]]></param> <message>您输入的用户名只能是字母和数字,且长度必须在4到25之间</message> </field-validator> </field> <!-- 校验Action的password属性 --> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>必须输入密码</message> </field-validator> <field-validator type="regex"> <param name="regexExpression"><![CDATA[(w{
    4,25}
    )]]></param> <message>您输入的用户名只能是字母和数字,且长度必须在4到25之间</message> </field-validator> </field> <!-- 校验Action的age属性 --> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年龄必须在1到150之间</message> </field-validator> </field> <!-- 校验Action的birthday属性 --> <field name="birthday"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>生日必须在 ${
    min}
    到${
    max}
    之间</message> </field-validator> </field></validators>

Struts2的校验文件规则与Struts1的校验文件设计方式不同,Struts2中每个Action都有一个校验文件,因此该校验文件的文件名应该遵守如下规则:

    <Action名字>-validation.xml

前面的Action名是可以改变的,后面的-validation.xml部分总是固定的,且该校验文件应该被保存在与Action class文件相同的路径下。

与类型转换失败相似的是,当输入校验失败后,Struts2也是自动返回名为"input"的Result,因此需要在struts.xml文件中配置名为"input"的Result。

国际化提示信息

对于校验失败的情况下,就需要给用户提示错误信息,那么现在就出现了个问题,在多语言环境下,如何正确的提示对应语言的提示信息呢?像上面那样直接在校验文件中写死可不行。为了国际化提示信息,为message元素指定key属性,该key属性指定是国际化提示信息对应key。

例如,上述的校验文件,可以大致写成这样:

    <!-- 校验Action的name属性 --><field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="name.required"/> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="regexExpression"><![CDATA[(w{
    4,25}
    )]]></param> <message key="name.regex"/> </field-validator></field>

内建校验器

在上面的校验文件中,可以看到这样的语句:

    <field-validator type="requiredstring"><field-validator type="regex">...

这里的type属性值就是校验器。在Struts2框架内部提供了大量的内建校验器,这些内建的校验器可以满足大部分应用的校验需求,我们只需要使用这些校验器即可。

我们可以使用解压缩工具打开xwork-core-2.3.24.1.jar文件,在xwork-core-2.3.24.1.jarcomopensymphonyxwork2validatorvalidators路径下可以找到一个default.xml文件,这个文件就是Struts2默认的校验器注册文件,内容如下:

    <?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"><!-- START SNIPPET: validators-default --><validators> <!-- 必填校验器 --> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <!-- 必填字符串校验器 --> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <!-- 整数校验器 --> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <!-- 长整数校验器 --> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <!-- 短整数校验器 --> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <!-- 双精度浮点数校验器 --> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <!-- 日期校验器 --> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <!-- 表达式校验器 --> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <!-- 字段表达式校验器 --> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <!-- 电子邮件校验器 --> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <!-- URL校验器 --> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <!-- visitor校验器 --> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <!-- 转换校验器 --> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <!-- 字符串长度校验器 --> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <!-- 正则表达式校验器 --> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators><!-- END SNIPPET: validators-default -->

关于这些校验器的具体使用,这里就不一一举例了。

总结

这篇文章对Struts2框架中的校验器进行了简单的总结,对于这里说的校验器,基础的是如何使用,而最重要的是掌握Struts2校验器这种思想,将写代码来做的事情,通过配置来完成,这种方法很值得我们借鉴,在我们学习其它框架中,我们也会碰到这种方式。学习,痛并快乐着。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

  • Struts2的输入校验实例代码
相关热词搜索: struts2的输入校验 struts输入校验 struts