struts校验

    客户端校验的主要作用是防止正常浏览者的误输入,仅能对输入进行初步过滤;对于恶意用户的恶意行为,客户端校验将无能为力。因此,客户端校验绝不可代替服务器端校验。当然,客户端校验也绝不可少,因为web应用大部分浏览者都是正常浏览者,它们的输入可能包含了大量的误输入,客户端校验把这些误输入阻止在客户端,从而降低了服务器的负载。
    类型转换和数据校验的大致关系如下:类型转换是数据校验的前提。但是在很多时候,类型转换和数据校验是同时完成的。如果要求数据可以正常转换成有效的数据类型,则输入数据必须是合法数据,这就要求用户输入必须是合法数据。可以理解:类型转换的要求是输入校验的子集。
    在struts中需要继承ActionSupport类,并重写validate()方法,一旦发现校验失败,就把校验失败提示通过addFieldError方法添加进系统的fieldError中,这与类型转换失败后的处理是一样的。在input视图对应的jsp页面中输出错误信息,应该在页面中增加如下代码:
<s:fielderror/>
    前提是已加入标签库<%@ taglib prefix="s" uri="/struts-tags"%>
    注意:即使类型转换失败,系统并不是直接返回input逻辑视图,依然会调用Action的validate()方法来进行输入校验。这一点,与前面介绍的类型转换失败处理后的处理是一致的。如果我们重写了Action的validate()方法,则该方法会校验所有的处理逻辑。为了实现校验指定处理逻辑的功能,Struts2的Action允许提供一个validateRXxx()方法,其中xxx即是Action对应的处理逻辑方法。同时需要在struts.xml中指定该方法。比如validateRegist()
<action name="regist" class="..." method="regist">
    <result name="input">/regist.jsp</result>
    <result name="success">/show.jsp</result>
</action>
    不管用户向Action的哪个方法发送请求,Action内的validate()方法都会被调用。如果该Action内还有该方法对应的validateXxx()方法,则该方法会在validate()方法之前被调用。
    Struts2的输入校验流程:
① 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属性值。
② 在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程中没有异常信息,则直接进入第3步。
③ 通过反射调用validateXxx(),其中Xxx是即将处理用户请求的处理逻辑所对应的方法名。
④ 调用Action类里面的validate()。
⑤ 如果经过上面4步都没有出现fieldError,将调用Action里处理用户请求的处理方法;如果出现了fieldError,系统将转入input逻辑视图所指定的视图资源。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值