本文分三个部分:

 


一.输入校验简介

二.为什么需要输入校验

三.输入校验的方式

 四.输入校验实例


一 .输入校验简介:几乎所有的JAVA开发者都会遇到输入校验的问题,输入校验简单的说就是对前台页面文本框中输入的值进行判断,比如用户名、密码不能为空,二次输入密码不正确,输入长度不合格,日期不正确等的验证。比如

 

reg.jsp 界面:

详解Struts2的输入校验一_输入校验 

如果直接点注册,而不输入任何数据的话,则出现下面的错误提示。

 

 

详解Struts2的输入校验一_输入校验_02

 

如果输入的数据不合法,则出现如下错误提示:

详解Struts2的输入校验一_校验器_03

 通过上面的两个截图,详细读者已经大概明白的输入校验的作用了。

输入校验的原因:

 

详解Struts2的输入校验一_Struts2_04

二.为什么需要输入校验:输入校验直接影响了系统的稳定性。因为不能保证每个用户都按照开发者的意图来输入数据,而往往有些用户喜欢恶意的输入些非法数据来进行测试和破坏,如上图中所示,生日这样的字段,格式虽然正确,但是在逻辑上缺是错误的!所以必须对用户输入的信息进行校验。良好的输入校验,是一个项目的必不可少的环节!

三.输入校验的方式:

1.JavaScript完成客户端校验

2.validate(),validateXxx()方法进行输入校验

3.基于框架的输入校验

4.AJAX输入校验

四.输入校验实例


本文写的是 基于框架的输入校验:

①业务控制器Action:UserReg.action

 

  1. package com.yaxing.register;  
  2.  
  3. import java.util.Date;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5.  
  6. public class UserReg extends ActionSupport{  
  7.     private String username;  
  8.     private String password1;  
  9.     private String password2;  
  10.     private Date birthday;  
  11.     public String getUsername() {  
  12.         return username;  
  13.     }  
  14.     public void setUsername(String username) {  
  15.         this.username = username;  
  16.     }  
  17.     public String getPassword1() {  
  18.         return password1;  
  19.     }  
  20.     public void setPassword1(String password1) {  
  21.         this.password1 = password1;  
  22.     }  
  23.     public String getPassword2() {  
  24.         return password2;  
  25.     }  
  26.     public void setPassword2(String password2) {  
  27.         this.password2 = password2;  
  28.     }  
  29.     public Date getBirthday() {  
  30.         return birthday;  
  31.     }  
  32.     public void setBirthday(Date birthday) {  
  33.         this.birthday = birthday;  
  34.     }  
  35.     public String execute() throws Exception{  
  36.         return SUCCESS;  
  37.     }     
  38. }  
  39.       
  40.  
  41.  

这就是一个普通JAVA类(POJO),execute()方法只是简单的返回一个SUCCESS 字符串。

为了使用Struts2的框架校验规则文件进行输入校验,需要建立一个特定的校验规则文件。此文件是一个xml格式的配置文件。该文件的命名规则为

Action名称-validation.xml 保存在Action实现类相同的目录下面。 本文的校验文件就是UserReg-validation.xml

如图所示

详解Struts2的输入校验一_职场_05

校验规则 这个使用的是

②字段校验UserReg-validation.xml

非字段校验在后面会有介绍

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator Config 1.0//EN"  
  4.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 
  5. <validators> 
  6.   <!-- username字段校验 --> 
  7.   <field name="username"> 
  8.     <field-validator type="stringlength"> 
  9.       <param name="minLength">4</param> 
  10.       <param name="maxLength">10</param> 
  11.       <message>用户名长度为${minLength}到${maxLength}之间!</message>     
  12.     </field-validator> 
  13.     <field-validator type="requiredstring"> 
  14.           <message >用户名不能为空!</message> 
  15.     </field-validator> 
  16.   </field> 
  17.   <!-- password1字段校验 --> 
  18.   <field name="password1"> 
  19.     <field-validator type="requiredstring"> 
  20.       <param name="trim">true</param> 
  21.       <message>错误,密码不能为空!</message>     
  22.     </field-validator> 
  23.     <field-validator type="stringlength"> 
  24.       <param name="minLength">4</param> 
  25.       <param name="maxLength">20</param> 
  26.       <message>用户密码长度为${minLength}到${maxLength}之间!</message>     
  27.     </field-validator> 
  28.  </field> 
  29.   <!-- password2字段校验 --> 
  30.   <field name="password2"> 
  31.     <field-validator type="requiredstring"> 
  32.       <param name="trim">true</param> 
  33.       <message>错误,确认密码不能为空!</message> 
  34.     </field-validator> 
  35.     <field-validator type="stringlength"> 
  36.       <param name="minLength">4</param> 
  37.       <param name="maxLength">20</param> 
  38.       <message>用户密码长度为${minLength}到${maxLength}之间!</message>     
  39.     </field-validator> 
  40.     <field-validator type="fieldexpression"> 
  41.        <param name="expression">password1==password2</param> 
  42.        <message>两次输入密码不一样!</message> 
  43.     </field-validator> 
  44.   </field> 
  45.    <!-- birthday字段校验 --> 
  46.   <field name="birthday"> 
  47.     <field-validator type="date"> 
  48.       <param name="min">1990-01-01</param> 
  49.       <param name="max">2011-04-14</param> 
  50.       <message>错误:生日应该在一个范围内!</message>    
  51.     </field-validator> 
  52.   </field> 
  53. </validators> 

③JSP视图:reg.jsp

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  2. <%@ taglib prefix="s" uri="/struts-tags" %> 
  3. <%@ taglib uri="/struts-dojo-tags" prefix="sx"%> 
  4.  
  5.  
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  8. <html> 
  9.   <head> 
  10.      
  11.       
  12.     <title>My JSP 'reg.jsp' starting page</title> 
  13.       
  14. <s:head/>    
  15. <sx:head/>    
  16.  
  17.  
  18.   </head> 
  19.     
  20.   <body>   
  21.     <s:form action="UserReg"> 
  22.         <s:textfield name="username" label="用户名"></s:textfield> 
  23.         <s:password name="password1" label="密码"></s:password>   
  24.         <s:password name="password2" label="确认密码"></s:password>   
  25.         <sx:datetimepicker name="birthday" label="生日:" displayFormat="yyyy-MM-dd"></sx:datetimepicker> 
  26.         <s:submit value="注册"/> 
  27.         <s:reset value="重置"></s:reset> 
  28.     </s:form> 
  29.       
  30.   </body> 
  31. </html> 

④reg_success.jsp成功页面

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  2. <%@ taglib uri="/struts-tags" prefix="s" %> 
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  4. <html> 
  5.   <head> 
  6.    
  7.     <title>注册成功</title> 
  8.       
  9.     <meta http-equiv="pragma" content="no-cache"> 
  10.     <meta http-equiv="cache-control" content="no-cache"> 
  11.     <meta http-equiv="expires" content="0">      
  12.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
  13.     <meta http-equiv="description" content="This is my page"> 
  14.     <!--  
  15.     <link rel="stylesheet" type="text/css" href="styles.css">  
  16.     --> 
  17.  
  18.   </head> 
  19.     
  20.   <body> 
  21.     欢迎<s:property value="username"/>,注册成功!  
  22.     <h1><s:text name="username" ></s:text></h1> 
  23.     <h1><s:text name="password1"></s:text></h1> 
  24.     <h1><s:text name="password2"></s:text></h1> 
  25.     <h1><s:text name="birthday"></s:text></h1> 
  26.       
  27.   </body> 
  28. </html> 

⑤struts.xml 配置文件:

 

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 
  3. <struts> 
  4. <package name="test" extends="struts-default"> 
  5.     <action  name="UserReg" class="com.yaxing.register.UserReg" method="execute"> 
  6.            <result name="success">/reg_success.jsp</result> 
  7.            <result name="input">/reg.jsp</result> 
  8.     </action> 
  9.       
  10. </package> 
  11. </struts>      

说下字段校验和非字段校验的区别:作用一样,配置风格不一样而已。

字段校验文件格式:

  1. <validators> 
  2.   <field name="校验字段名称"> 
  3.     <field-validator type="校验类型"> 
  4.       <param name="参数1">参数值1</param> 
  5.       <param name="参数2">参数值2</param> 
  6.            ..........  
  7.       <message>校验失败后的错误信息</message>     
  8.     </field-validator> 
  9.     <field-validator type="校验类型"> 
  10.         ........  
  11.     </field-validator> 
  12.   </field> 
  13. </validators> 

非字段校验文件:

  1. <validators> 
  2.       <validator type="校验类型"> 
  3.           <param name="fieldName">字段名称</param> 
  4.           <param name="参数1">参数1</param> 
  5.           <param name="参数2">参数2</param> 
  6.              .............  
  7.  
  8.           <message >校验异常信息message> 
  9.     </validator> 
  10. ............  
  11. </validators> 

非字段校验配置:UserReg-validation.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator Config 1.0//EN"  
  4.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 
  5.  
  6. <validators> 
  7.   <!-- username字段校验 --> 
  8.     
  9.     <validator type="stringlength"> 
  10.       <param name="fieldName">username</param> 
  11.       <param name="minLength">4</param> 
  12.       <param name="maxLength">10</param> 
  13.       <message>用户名长度为${minLength}到${maxLength}之间!</message>     
  14.     </validator> 
  15.     <validator type="requiredstring"> 
  16.           <param name="fieldName">username</param> 
  17.           <message >用户名不能为空!</message> 
  18.     </validator> 
  19.     
  20.   <!-- password1字段校验 --> 
  21.     
  22.     <validator type="requiredstring"> 
  23.       <param name="fieldName">password1</param> 
  24.       <message>错误,密码不能为空!</message>     
  25.     </validator> 
  26.     <validator type="stringlength"> 
  27.       <param name="fieldName">password1</param> 
  28.       <param name="minLength">4</param> 
  29.       <param name="maxLength">20</param> 
  30.       <message>用户密码长度为${minLength}到${maxLength}之间!</message>     
  31.     </validator> 
  32.  
  33.   <!-- password2字段校验 --> 
  34.    
  35.     <validator type="requiredstring"> 
  36.       <param name="fieldName">password2</param> 
  37.       <param name="trim">true</param> 
  38.       <message>错误,确认密码不能为空!</message> 
  39.     </validator> 
  40.     <validator type="stringlength"> 
  41.       <param name="fieldName">password2</param> 
  42.       <param name="minLength">4</param> 
  43.       <param name="maxLength">20</param> 
  44.       <message>用户密码长度为${minLength}到${maxLength}之间!</message>     
  45.     </validator> 
  46.     <validator type="fieldexpression"> 
  47.        <param name="fieldName">password1</param> 
  48.        <param name="fieldName">password2</param> 
  49.        <param name="expression">password1==password2</param> 
  50.        <message>两次输入密码不一样!</message> 
  51.     </validator> 
  52.    
  53.    <!-- birthday字段校验 --> 
  54.     
  55.     <validator type="date"> 
  56.       <param name="fieldName">birthday</param> 
  57.       <param name="min">1990-01-01</param> 
  58.       <param name="max">2011-04-14</param> 
  59.       <message>错误:生日应该在一个范围内!</message>    
  60.     </validator> 
  61.     
  62. </validators> 

其他均不用修改,运行结果与前面相同!

 

上面配置文件中的type 即校验类型如下 这几个类型,是在com.opensymphony.xwork2.validator.validators.下面

default.xml文件里面 Struts2自带的校验器,代码如下:

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator Config 1.0//EN"  
  4.         "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"> 
  5.  
  6. <!-- START SNIPPET: validators-default --> 
  7. <validators> 
  8.     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> 
  9.     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> 
  10.     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> 
  11.     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> 
  12.     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> 
  13.     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> 
  14.     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> 
  15.     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> 
  16.     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> 
  17.     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> 
  18.     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> 
  19.     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> 
  20.     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> 
  21.     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> 
  22.     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> 
  23.     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> 
  24. </validators> 
  25. <!--  END SNIPPET: validators-default --> 

关于这几个校验器会在下文介绍。