struts2基本输入校验

来源:互联网 发布:手机淘宝实人认证在哪 编辑:程序博客网 时间:2024/05/21 05:06
输入校验是所有Web应用必须处理的问题,因为Web应用的开放性,网络上所有的浏览者都可以自由使用该应用,因此该应用可以通过输入页面收集的数据是非常复杂的,不仅会包含正常用户的误输入,还可以包含恶意用户的恶意输入。一个健壮的应用系统必须将这些非法输入阻止在应用之外,防止这些非法输入进入系统,这样才能保证系统不受影响。
输入校验分为客户端校验和服务器端校验,客户端校验主要是过滤正常用户的误操作,主要通过JavaScript代码来完成;服务器端校验是整个应用阻止非法数据的最后防线,主要通过在应用中编程实现。
输入校验是表现层数据处理的一种,因此应该由MVC框架提供。Struts2框架提供了非常强大的输入校验体系,通过Struts2内建的输入校验器,Struts2应用无须书写任何输入校验代码,即可完成绝大部分输入验证,并可以同时完成客户端校验和服务器端校验。如果应用的输入校验规则特别负责,Struts2也允许通过重写validate方法来完成自定义校验;除此之外,Struts2的开放性允许开发者提供自定义的校验器。
Struts2提供了基于校验框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts2的校验框架就会负责进行服务器端校验和客户端校验。。
下面举例示范如何利用Struts2的校验框架进行验证
所使用的表单代码如下:
<s:fielderror></s:fielderror>  <form action="regist" method="post">  用户名:<input type="text" name="name"/><br/>  密码:<input type="password" name="password"/><br/>  年龄:<input type="text" name="age"/><br/>  生日:<input type="text" name="birth"/><br/>  <input type="submit" value="注册"/>  </form>
假设表单中的4个请求参数需满足以下规则
1、name和password只能是字母和数字,且长度必须在4到25之间
2、年龄必须是1到150之间的整数
3、生日必须在1900-01-01到2050-02-21之间
使用的Action处理类
package com.test.action;import java.util.Date;import com.opensymphony.xwork2.ActionSupport;public class RegistAction extends ActionSupport{//该请求包含的4个请求参数private String name;private String password;private int age;private Date birth;//此处省略4个属性的set和get方法        ...}
采用Struts2的校验框架时,只需要为该Action指定一个校验文件即可。校验文件是一个XML配置文件,该文件指定了Action的属性必须满足怎样的规则。下面是该应用中Action的校验文件代码。
<!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="regex"><![CDATA[(\w{4,25})]]></param><message>您输入的用户名只能是字母和数字,且长度必须在4到25之间</message></field-validator></field><!-- 校验Action的password属性 --><field name="password"><!-- 指定password属性必须满足必填规则 --><field-validator type="requiredstring"><param name="trim">true</param><message>必须输入密码</message></field-validator><!-- 指定password属性必须满足匹配指定的正则表达式 --><field-validator type="regex"><param name="regex"><![CDATA[(\w{4,25})]]></param><message>您输入的密码只能是字母和数字,且长度必须在4到25之间</message></field-validator></field><!-- 指定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><!-- 指定birth属性必须在指定范围内 --><field name="birth"><field-validator type="date"><!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --><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都有一个校验文件。从这种设计来看,Struts2应用的Action可以非常方便地与校验规则文件同步修改同步升级,非常有利于模块化开发,Struts2的Action与校验规则文件具有如下共性。
1、Action类与校验规则文件保存在同一路径下
2、Action类的类名作为校验规则文件的文件名前缀
Struts2的校验规则文件的文件名应该遵循如下命名规则。
<Action名字>-validation.xml
增加了该校验文件后,系统会自动加载该文件。当用户提交请求时,Struts2的校验框架会根据该文件对用户请求进行校验。
struts.xml添加配置
<action name="regist" class="com.test.action.RegistAction"><result name="input">regist.jsp</result><result>show.jsp</result></action>
返回错误信息页面展示


原创粉丝点击