详解Struts2的输入校验一

简介:

       本文分三个部分:

 


一.输入校验简介

二.为什么需要输入校验

三.输入校验的方式

 四.输入校验实例


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

 

reg.jsp 界面:

 

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

 

 

 

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

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

输入校验的原因:

 

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

三.输入校验的方式:

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

如图所示

校验规则 这个使用的是

②字段校验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 --> 

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







 本文转自 w156445045 51CTO博客,原文链接:http://blog.51cto.com/enetq/545259,如需转载请自行联系原作者


相关文章
|
安全 Java API
Struts2
访问web资源 1》使用servlet API解耦的方式,获取的方法较少   1.使用ActionContext,一个一个获取,效率不高   2.实现XxxAware接口(ApplicationAware,SessionAware.....)推荐,
40 0
|
设计模式 开发框架 安全
Struts,你为何死不悔改!
上篇文章《诡异的字符串问题。。。》的问题已经解决了,我一直相信「团队力量的重要性」,虽然我不能保证加入群的每一个人都是乐于分享的同学,但我始终群里的各位同学总会慢慢被我们这种乐于分享的群氛围所影响。就以上篇文章为例,群里的 Univechige 同学专门给 IntelliJ IDEA 官方发邮件寻求原因,这便是一个好的开端,我相信有各位同学的共同维护,后面群氛围会越来越好。下面给出 IDEA 官方的答复,见下图。
166 0
Struts,你为何死不悔改!
|
Web App开发 Java Apache
struts
运行流程 客户端浏览器通过HTTP请求,访问控制器,然后控制器读取配置文件,然后执行服务器端跳转,执行相应的业务逻辑,然后,在调用模型层,取得的结果展示给jsp页面,最后返回给客户端浏览器 组成部分 struts 视图 标签库 控制器 action 模型层 ActionFrom JavaBean struts maven 安装官网 : https://struts.
1006 0
|
Web App开发 XML Java
JakartaEE Struts2使用
1. Struts2下载 解压后的目录结构如下: 图1.png 从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的: 操作(Actions...
1016 0
|
Java 数据库连接
[Struts]HibernatePlugIn for Struts(转贴)
这个Plugin的作用是在Struts应用程序启动时进行hibernate的初始化操作,原文HibernatePlugIn for Struts,步骤很简单: 1、在struts-config.xml里增加: <plug-in className="org.
1165 0
|
SQL JavaScript 前端开发
|
前端开发 Java 网络安全
|
Web App开发 JavaScript Java