Struts 的数据校验和验证框架

Struts 2 的数据校验

 

对于一个web应用而言,所有的用户数据都是通过浏览器收集的,用户的输入信息非常复杂的,用户操作不熟练,输入出错,硬件设备不正常。网络传输的不稳定,甚至恶意用户的蓄意的破坏,这些都有等,这些都能可能导致输入异常。

 

异常输入,轻则导致系统非正常中断,重则导致系统崩溃,应用程序化必须能正确表现层接收的异常数据,通常的做法是遇到异常数输入时应用程序直接返回,提示浏览者必须重新输入,也就是将那些异常过滤掉,对异常输入的过滤就是数据检验。

 

通过struts2的数据验证机制。Action extends ActionSupport类。

com.opensymphony.xwork2.ActionSupport.

ActionSupport类:

execute() 直接返回 SUCCESS ;

验证,本地化的支持: 提供 validate(), addActionError(String errorMesage) ; addFiledError(String filedName, String  errorMessage)等,来完成数据验证。

 

本地化支持,可以通过各种getText()方法来获取本地化文本。

 

一般的情况下的Action 类 的开发,均会选择继承此类,

下面就使用.ActionSupport 类继续完成登录功能。

第一步:将验证逻辑移至validate()方法

第二步:修改login.jsp 页面

 

缺点:1.当验证比较复杂时,需要些繁琐的代码进行实现。Action 臃肿

           2.验证规则无法进行复用 扩展型低.


鉴于数据验证的重要性和重复性,Struts 2 中内置了一个验证框架,将常用的验证规则进行编程实现。使用验证框架时,用户无需再进行编码,只要在外部配置文件中指定某个字段需要进行验证类型,并提供错误信息即可,从而大大减轻了开发者的负担。提高了开发效率。


Struts 2验证框架

-----客服需求---------------------------------------

 需求:用户注册功能使用验证框架进行验证。

1.用户名:不能为空,长度在6到10之间;

2.密码: 不能为空,密码长度不小于6

3.确认密码:必须和密码相同。

4.电话:不能为空,符合电话号码格式

5.用户姓名:不能为空,长度2到4之间。


-----分析-----------------------------------------------------

 (1)创建RegisterAction,实现对用户注册的处理

 (2 在 struts.xml 中配置 action 验证成功的跳转到首页,验证失败返回register.jsp,并显示错误信息

 (3)创建注册页面register.jsp.

   (4)创建验证文件RegisterAction-validation.xml使用验证框架编写验证规则。

------

我们按安照分析的总实现步骤,

(1) 创建RegisterAction ,实现对用户注册处理;

[html]  view plain copy print ?
  1. package action;  
  2.   
  3.   
  4. import bean.User;  
  5.   
  6. import com.opensymphony.xwork2.ActionSupport;  
  7. /**  
  8.  * 用户注册  
  9.  * @author   
  10.  */  
  11. public class RegisterAction extends ActionSupport {  
  12.   
  13.     private User user;  //用户对象  
  14.     private String repassword;  //确认密码  
  15.     public String getRepassword() {  
  16.         return repassword;  
  17.     }  
  18.     public void setRepassword(String repassword) {  
  19.         this.repassword = repassword;  
  20.     }  
  21.     public User getUser() {  
  22.         return user;  
  23.     }  
  24.     public void setUser(User user) {  
  25.         this.user = user;  
  26.     }  
  27.     public String execute() {  
  28.         return SUCCESS;  
  29.     }  
  30. }  
bean.User.java

[html]  view plain copy print ?
  1. package bean;  
  2.   
  3. public class User {  
  4.       
  5.     private String usnername;  
  6.     private String password;  
  7.     private String name;  
  8.     private String telephone;  
  9.     public String getUsnername() {  
  10.         return usnername;  
  11.     }  
  12.     public void setUsnername(String usnername) {  
  13.         this.usnername = usnername;  
  14.     }  
  15.     public String getPassword() {  
  16.         return password;  
  17.     }  
  18.     public void setPassword(String password) {  
  19.         this.password = password;  
  20.     }  
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.     public void setName(String name) {  
  25.         this.name = name;  
  26.     }  
  27.     public String getTelephone() {  
  28.         return telephone;  
  29.     }  
  30.     public void setTelephone(String telephone) {  
  31.         this.telephone = telephone;  
  32.     }  
  33.   
  34.       
  35.   
  36. }  

2.在struts2.xml配置action

[html]  view plain copy print ?
  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.   
  5.     <constant name="struts.custom.i18n.resources" value="message"/>  
  6.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  7.       
  8.     <package name="struts2" extends="struts-default" namespace="/page">  
  9.         <action name="register" class="action.RegisterAction">  
  10.             <result name="success">index.jsp</result>  
  11.             <result name="input">/page/register1.jsp</result>  
  12.         </action>       
  13.     </package>  
  14. </struts>      

因为进行数据验证,所以需要指定验证失败后的返回页面。Struts 2中 通过"input"字符串来指定当输入出现验证错误时需要返回的错误时到页面。

3.创建注册页面register.jsp 

 

[html]  view plain copy print ?
  1.   
[html]  view plain copy print ?
  1.               <h2>新用户注册</h2>  
  2. lt;s:form action="register">  
  3. <s:textfield name="user.name" label="用户名" />  
  4. <s:password name="user.password" label="密码" />  
  5. <s:password name="repassword" label="确认密码" />  
  6. <s:textfield name="user.telephone" label="电话号码" />  
  7. <s:textfield name="user.username" label="用户姓名" />  
  8. <s:submit value="提交"></s:submit>  
  9. <s:reset value="重置"></s:reset>  
  10. lt;/s:form>  

4. 创建验证文件,

使用验证框架编制验证规则。

验证文件和验证的Action放在同一个包下,并且采用ClassName-validate.xml 或者ClassName-alias-validate.xml的方式命名。其中ClassName表示Action的类名,而alias表示在struts.xml 中配置 action的名字,

创建验证文件 RegisterAction-validation.xml

validators 标签是验证文件的跟标签。

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.  <!DOCTYPE validators PUBLIC   
  3.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <?xml version="1.0" encoding="UTF-8"?>  
  6.  <!DOCTYPE validators PUBLIC   
  7.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  8.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  9. <validators>  
[html]  view plain copy print ?
  1. </validators>  


struts  2 提供验证器

1.requiredstring 验证器 用来规定一个字符串字不能为null,且不能为空字符串。

2.stringlength 验证器用来检查一个字符的长度范围,可以通过minLength和maxLength 两个参数才指定字段的最小长度和最长长度。

3.fiedexpression 验证器使用OGNL 表达式来验证字段,通过expression。参数来指定要计算的ONGL表达式,计算结果必须为boolean值,如果为true,验证通过 否则验证失败.

4.regex 验证器 使用正则表达式验证一个字符串,提供了expression 参数来指定具体的正则表达式。

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.  <!DOCTYPE validators PUBLIC   
  3.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <validators>  
  6.    <field name="user.name">  
  7.         <field-validator type="requiredstring">  
  8.             <param name="trim">true</param>  
  9.             <message key ="name.null"/>  
  10.         </field-validator>  
  11.         <field-validator type="stringlength">  
  12.             <param name="maxLength">10</param>  
  13.             <param name="minLength">6</param>  
  14.             <message key ="name.length"/>  
  15.         </field-validator>  
  16.     </field>  
  17.     <field name="user.password">  
  18.         <field-validator type="requiredstring">  
  19.             <message key="password.null"/>  
  20.         </field-validator>  
  21.         <field-validator type="stringlength">  
  22.             <param name="minLength">6</param>             
  23.             <message key="password.length"/>  
  24.         </field-validator>  
  25.     </field>  
  26.     <field name="repassword">  
  27.         <field-validator type="requiredstring">  
  28.             <message key="repassword.null"/>  
  29.         </field-validator>          
  30.         <field-validator type="fieldexpression">  
  31.             <param name="expression">user.password==repassword</param>  
  32.             <message key="repassword.same"/>  
  33.         </field-validator>  
  34.     </field>    
  35.     <field name="user.telephone">       
  36.         <field-validator type="requiredstring">  
  37.             <message key="telephone.null"/>  
  38.         </field-validator>          
  39.         <field-validator type="regex">  
  40.             <param name="expression">^(\d{3,4}-){0,1}(\d{7,8})$</param>  
  41.             <message>电话号码格式不正确</message>  
  42.         </field-validator>  
  43.     </field>  
  44.     <field name="user.username">  
  45.         <field-validator type="requiredstring">  
  46.             <param name="trim">true</param>  
  47.             <message key="username.null"/>  
  48.         </field-validator>  
  49.         <field-validator type="stringlength">  
  50.             <param name="maxLength">4</param>  
  51.             <param name="minLength">2</param>  
  52.             <message key="username.length" />  
  53.         </field-validator>  
  54.     </field>  
  55. </validators>           

你可能感兴趣的:(struts,struts校验,的数据校验和验证框架)