基于Struts2框架数据校验的分析与应用
2011-07-05齐新力郭亚莎邹振宇
齐新力,郭亚莎,邹振宇
(成都理工大学信息科学与技术学院,成都610059)
0 引言
随着社会的发展,计算机技术几乎进入了生活的每个领域,电子商务、电子货币和网上测试等网络业务的兴起,用户数据信息的合法性校验变得越来越重要。对于一个Web应用,所有的用户数据都是通过浏览器收集的[1],如果用户操作不熟练,输入出错,硬件设备不正常,网络传输的不稳定,甚至恶意用户的蓄意破坏等等,这都有可能造成输入异常,轻则导致系统非正常中断,重则导致系统崩溃。所以我们要在提交用户输入的数据前,对数据进行过滤,将异常输入过滤掉。对异常输入的过滤,称为数据校验[2]。
1 Struts2框架数据校验的一般流程
Struts2是一个服务器Java Web开发框架,它采用MVC(模型—视图—控制器)模式[3]。它的数据校验流程[4]如图1所示。
2 客户端校验
客户端校验是比较简单和初级的校验方式,通过在JSP等视图文件中,嵌入JavaScript代码来完成输入数据的过滤。其中JavaScript[5]是一个功能强大的网页脚,我们可以在其中定义校验函数,代码中的过滤条件大多采用正则表达式来作判断。在JavaScript中定义了校验函数后,只需将该校验函数绑定到表单的onSubmit属性即可运行。客户端校验是在用户输入数据提交到后台服务器之前进行的,主要防止由于用户的误操作带来的异常。
3 服务器端校验
只有客户端校验防止异常发生是不够的,有些恶意的用户可以轻易地越过客户端校验,直接向该Action的URL提交数据,这样就会产生很大的安全风险,所以服务器端的校验是很必要的。服务器端校验主要有两种方式:一种是手动完成输入校验[6],即重写validate()和validateXxx()方法,但这种方法要手动编写大量的代码,并且代码复用性不高。这里我们不作讨论。另一种是编写校验规则文件[7],即为Action指定一个XML配置文件用于校验,该文件指定了Action属性必须满足怎样的规则。除了校验规则文件的代码格式外,文件名和文件路径也很重要,其中文件名应遵守一下规则:<Action名字>-validation.xml,并且该文件应该保存在与Action Class文件相同的路径下。
4 实例
下面我们利用一个简单实例向大家展示数据校验,这是一个向简历系统中增加人员信息,要求人员姓名和电话号码不能为空,电话号码必须为4-25位数字。
首先,客户端校验,在addperson.jsp文件中嵌入一段JavaScript代码,该代码为:
<script language=”JavaScript”>
function trim(s){
return s.replace(/^s*/,””).replace(/^s* $/,””);
}
function validate(){
var errStr=””;//保存错误信息
var form=document.getElementById(“myform”);
var name=trim(form.Name.value);
var telephone=trim(form.Telephone.value);
if(name==””||name==null){
errStr+=”姓名必须输入”;
}
if(telephone==””||telephone==null){
errStr+=” 电话号码必须输入”;
}
elseif(!/^w(4,25)$/.test(telephone)){
errStr+=” 电话号码必须是数字,且长度为4到25之间”;
}
if(errStr==””){
return true;
}
else{
alert(errStr);//输出错误信息
return false;
}
</script>
还要在表单标签中调用这个函数:
<form id=”myform”name=”form”onSubmit=”return validate(this);”>
当我们提交表单时,如果没有输入姓名和电话号码,表单将不会提交成功,并弹出如图2对话框:
图2 客户端校验弹出框图
其次,服务器端校验,我们要在相应Action同一目录下,建立一个文件名为addperson-validation.xml,主要代码如下:
<validators>
<field name=”res.name”>
<field-validator type=”requiredstring”short-circuit=”ture”>
<message>请输入姓名! </message>
<field-validator>
</field>
<field name=”res.telephone”>
<field-validator type=”requiredstring”short-circuit=”ture”>
<message>请输入电话号码! </message>
</field-validator>
<field-validator type=”stringlength”short-circuit=”ture”>
<param name=”minlength”>4</param>
<param name=”maxlength”>25</param>
<param name=”trim”>true</param>
<message>电话号码必须介于4到25个字符之间! </message>
</field-validator>
</field>
</validators>
并且还要在Struts2的配置文件中,指定如果输入被拦截,应跳转的页面即可。如果用户跳过客户端校验,没有输入姓名和电话号码的话,将会出现如图3的页面,表单提交不成功。
图3 服务器端校验页面图
以上就是一个完整的校验过程,它可以有效的防止由于用户输入不规范产生的异常情况。
5 结束语
基于Struts2框架的数据校验是很强大的数据校验,它提供了很多常用的校验规则,采用这种校验方式,程序员可以基本上不需要为校验编写太多的代码,并且好扩展。这种方式不仅可以在Struts2的项目开发中应用,它的这种模式思想还可以移植到一般的Java和XML相结合的Web应用开发中,甚至于基于J2EE的大型系统的应用开发中。
[1]彭剑.WEB信息系统中的数据校验问题[J].重庆工商大学学报(自然科学版),2005,22(3):277-280.
[2]TED H.struts in action[M].USA.Manning Publications Co.2002:139-142.
[3]何成万,余秋惠.MVC模型2及软件框架Struts的研究[J].计算机工程,2002,28(6):274-281.
[4]李刚.Struts2权威指南[M].北京:电子工业出版社,2007:242-265.
[5]刘聪.零基础学Java Web开发[M].北京:机械工业出版社,2007:28-34.
[6]刘京华,武冬,郅晓娜,等.Java Web整合开发王者归来[M].北京:清华大学出版社,2010:477-478.
[7]孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社,2004:229-250.