资源描述
最近在自学struts2,基本的配置了解以后又学习了 struts2强大 的检验功能,不仅内置的校验器非常丰富,而且也提供自定义校验。 本人做了些学习笔记,与大家分享,虽然有点水,也希望能帮到人。首先,为什么要使用 struts2 的 validate 验证框架。使用struts2的验证框架,能够提高客户端提交的数据的安全性。 通过验证,确保保存进数据库的信息是正确的,包括数据的格式(日 期、e-mail、数字等)判空等逻辑。在现在javascript横行的时代, 可能有人会说,我可以使用js,没必要非用后台校验的方式那样不仅 增加服务器压力,而且与用户的交互也不好。是的,js确实能完成这 样的操作,但是你有没有想过,js是可以被人改掉了,可以通过很多 方式来绕过客户端验证,比如模拟请求等。(打开F12加一条js就可 以取消掉校验的执行至于具体如何操作,本人还不知道),有些复杂 的校验脚本语言是无法完成的呀。所以不管服务器校验也好,客户端 校验也好,我们都是需要的。客户端验证的好处是快捷,用户体验好, 减少服务器端的压力。服务器端验证更可靠安全,可以做一些客户端 验证做不到的,但是服务器端验证占用服务资源。所以两者的使用要 根据具体的场景,应该合理应用。下面,是我本人亲手写的程序调试,重点出场啦在struts2中,我们可以实现对action的所有方法进行校验或者 对 action 的指定方法进行校验。对于输入校验 struts2 提供了两种实现方法:1. 基于 XML 配置方式实现。2. 采用手工编写代码实现。一、基于XML配置方式实现1、XML 文件规定了参数的一些校验条件, XML 命名规则:ActionName-validation.xml 其中 ActionName 是 Action 类的名字, 文件放在和 Action 同目录下;注意:当需要对逻辑 action 进行校验 时,如果存在一般形式的 ActionName-validaton.xml 文件,则也会 对此逻辑 Action 进行校验;2. 输入校验失败后,和类型转换一样,会将错误封装成 fieldError, 并放入Action Con tex t中,因此在JSP中添加可显示 错误,此内容也是我们在数据校验文件中配置的;3. 当输入校验失败后,和类型转换一样,返回逻辑视图为 input,因此在 struts.xml 中必须配 ;4. 输入校验失败后, struts 表单标签也会自动输出错误提示; XML 配置文件格式:表单界面 JSP:s:form actionLoginddUser5;textfield name= t,u5ernamer, label-,T/s:tex1fiefd 1=点对象*1 Action 逻辑处理界面:世Valid stionOl.jspzI* stniKxmlJjL ValidationOHAction jeiwa 申洛世 ValidationOIAction-validstion.Km 11 jf indexjs-ppackage comJb.action;fmport javu. u tfL Du fey慝Srno紳1214public class VaHdaTJonOlAction extends ActfonSupportf private String name;private 5tr/ns email;private Snregeraqe;private Dore dale;public5trrn exeuufetbrows xception return SUCCESS;publicString getNrvef) return name;)1public void setName(String name) this.name = name;public String getEmoiiO return email;public void setEmcii!(Stnng emoil) this.email = email;洒D-puhlic Dote getDatef return date,public void setDGteDate date this.dfffe = datefpublic integergetAgef) return age;puhlic void sexAgeifiteger age) this.cre - age;Struts2的XML配置文件:从此struts配置文件可以看出,上面的表单jsp同时也是,出现错误之后返回的物理视图。面是运行效果:固 ttp: .I oca lh st 3 3 3 O/lbOTI 3_&tnrt5/Va IkiatioiiOtPdJMy JSP Validate.jsp start., x邮箱.帶:日期:lib in|bino utlD 年龄不直謝空日期不肓级空struts2 提供的校验器列表如下:required (必填校验器,要求 field 的值不能为 null)requiredstring (必填字符串校验器,要求 field 的值不能为 null, 并且长度大于 0,默认情况下会对字符串去前后空格)stringlength(字符串长度校验器,要求field的值必须在指定的范 围内,否则校验失败,minLength参数指定最小长度,maxLength参数 指定最大长度,trim参数指定校验f ield之前是否去除字符串前后的空 格)regex(正则表达式校验器,检查被校验的field是否匹配一个正则 表达式.expression参数指定正则表达式,caseSensitive参数指定进行 正则表达式匹配时,是否区分大小写,默认值为 true)int(整数校验器,要求field的整数值必须在指定范围内,min指定 最小值,max指定最大值)double(双精度浮点数校验器,要求field的双精度浮点数必须在 指定范围内,min指定最小值,max指定最大值)fieldexpression(字段OGNL表达式校验器,要求field满足一个 ognl表达式expression参数指定ognl表达式,该逻辑表达式基于 ValueStack进行求值,返回true时校验通过,否则不通过)email(邮件地址校验器,要求如果field的值非空,则必须是合法的 邮件地址)url(网址校验器,要求如果field的值非空,则必须是合法的url地 址)date(日期校验器,要求field的日期值必须在指定范围内,min指 定最小值,max指定最大值)conversion转换校验器,指定在类型转换失败时,提示的错误信 息)visitor(用于校验action中的复合属性,它指定一个校验文件用于 校验复合属性中的属性)expression(OGNL表达式校验器,expression参数指定ognl表达 式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否 则不通过,该校验器不可用在字段校验器风格的配置中)二、手工编写代码实现对action指定方法输入校验如果要按照具体的业务校验表单的话,可以通过重写 validateXxx()方法实现,validateXxx()只会校验action中方法名为 Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时, 我们应该调用addFieldError()方法往系统的fieldErrors添加校验失 败 信 息 ( 为 了 使 用 addFieldError() 方 法 , action 可 以 继 承 ActionSupport ),如果系统的 fieldErrors 包含失败信息, struts2会将请求转发到名为input的result。在input视图中可以通过显示失败信息。valida teXxx()方法使用例子: Z* ValidationOi.jap 凶 struts.xml !T| ValidationOIActio-n.java 3 _JjJ VaIidatiqn01 3,+ import java. utif.Date;心 7 public class VctiidutionOlAction extends Actionsupport 8 private String name;9 private String emait;10 private (nteger age;11 private Date date;1213- public String execcftef) throws Exception 14 return 5 ACCESS;15 菁1 金 public void vafidateExecutef) 117 f(name= null & .equulsfname.trrmO)118 this.addFieidErrorCnume ”用户虽不能为空21 public String QetNamef) 22 return name;23 2425这里实现了对特定方法的校验,若要实现对 action 中所有方法输入校验,需要重写validate()方法实现,此处需要注意的是,如果 逻辑Action的校验函数是validateXxx(),则validate()样也会被调 用,因为只要对此物理Action进行校验,则validate()方法总会起作 用。
展开阅读全文