struts2校验框架

输入校验的概念

输入校验,从字面上来看好像是指对如输入的密码或者用户名输入错误的校验。其实这个不算输入校验,这个算是业务逻辑的判断了。输入校验是对输入的用户名长度、密码长度、年龄信息等的判断。

输入校验的必要性

所有用户的输入都是邪恶的,为了保证数据的合法性,输入校验就显得尤为重要。

校验的方式

输入校验分为客户端校验和服务器端校验。
----客户端校验可以过滤掉用户的错误操作,是第一道防线,一般使用JavaScript代码实现。
----仅有客户端验证还是不够的。攻击者还可以绕过客户端校验直接进行非法输入,这样可能会引起系统的异常,为了确保数据的合法性,防止用户通过非正常手段提交错误信息。所以必须加上服务器端的验证。

客户端校验

用JavaScript进行客户端校验:
----编写校验方法
----在提交表单的事件中调用校验方法校验
----根据校验方法来判断是否进行表单提交

服务器端校验

服务器端校验对于系统的安全性、完整性、健壮性起到了至关重要的作用。

Struts 2框架是非常强大的,它提供了一套验证框架,通过验证框架能够非常简单和快速地完成输入校验。

Struts2 主要通过验证框架来完成数据验证。

Action必须继承ActionSupport类。

对于输入校验struts2提供了两种实现方法:
1. 采用手工编写代码实现。(手工编程)
2. 基于XML配置方式实现。(Struts2校验框架)

在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。

手动校验编程

  • 手动编程方式:主要是通过在类中编写校验逻辑代码。
  • 手动编程方式
方式一:重写validate()方法: validate()方法会校验action中所有与execute方法签名相同的方法。

方式二:重写validateXxx()方法:validateXxx()只会校验action中方法名为Xxx的方法。

重写validate()方法

  • validate()方法会校验action中所有与execute方法签名相同的方法。
  • 当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport )
  • 如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
public void validate() {
if(username.trim().equals("") || username==null)
{
	this.addFieldError("username", "用户名不能为空");
}
if(password.trim().equals("") || password==null)
{
	this.addFieldError("password", "密码不能为空");
}else
{
if(password.length()<6 || password.length()>12)
{
	this.addFieldError("password", "密码的长度在6--12位之间");
}
}
}

<constant name="struts.devMode" value="true" />

<package name="val" namespace="/val" extends="struts-default">

<action name="val_*" class="com.nuesoft.validate.LoginAction“
 method="{1}">
<result name="message">/index.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
  • Action类继承ActionSupport类,struts.xml中添加input的result视图。
  • 验证失败后,请求转发至input视图

重写validateXxx()方法

  • 通过validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。
  • 当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport )。
  • 如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
public void validateUpdate()
{
//对某个特定的方法进行验证
if(username.trim().equals("") || username==null)
{
	this.addFieldError("username", "用户名不能为空");
}
if(password.trim().equals("") || password==null)
{
	this.addFieldError("password", "密码不能为空");
}else
{
if(password.length()<6 || password.length()>12)
{
	
<constant name="struts.devMode" value="true" />

<package name="val" namespace="/val" extends="struts-default">

<action name="val_*" class="com.nuesoft.validate.LoginAction“
 method="{1}">
<result name="message">/index.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>

this.addFieldError("password", "密码的长度在6--12位之间");}}}


  
  
  • Action类继承ActionSupport类,struts.xml中添加inputresult视图,
  • 验证失败后,请求转发至input视图

输入校验的流程

  1. 类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
  2. 如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
  3. 系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
  4. 再调用action中的validate()方法。
  5. 经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

校验框架后续补充~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值