struts2基本输入校验

输入校验是所有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>
返回错误信息页面展示


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值