1. 输入校验是web应用必须处理的问题,要防止用户的误输入和恶意非法输入。struts2给我们提供了非常强大的输入校验体系。
  2.  
  3. 输入校验分为客户端校验和服务器端校验。一般开发中两者都用,但是服务端校验必须使用。
  4.  
  5. 客户端校验是通过javascript在表单页面进行初步过滤。客户端校验并不安全,攻击者有很多方法可以绕过客户端校验,所以服务端校验是必不可少的。
  6.  
  7. 但是客户端校验必不可少,因为大多数浏览者都是正常用户,可以阻止一些误操作,降低了服务器的负载。
  8.  
  9. 服务端校验:
  10. 我们以前在servlet中增加校验。是通过获取参数,然后判断参数是否为空和长度等等来进行校验。
  11. servlet中使用硬编码进行输入校验乏味而又繁琐,struts2提供了基于校验框架的输入校验,只需要指定简单的配置文件即可。

一、声明式验证:通过xml配置文件进行验证

  1. -校验规则文件与Action类放在同一目录下
  2. -校验配置文件名称为 ActionClassName-validation.xml 例如 UserAction-validation.xml
  3.  
  4. 增加校验文件后,系统会自动加载该文件。当用户提交请求时,struts2会根据该文件对用户数据进行校验

二、基于表单字段的配置风格

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE validators PUBLIC
  3. "-//Apache Struts//XWork Validator 1.0.3//EN"
  4. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
  5. //校验文件的根元素
  6. <validators>
  7. //被校验表单项名称
  8. <field name="username">
  9. //指定校验器,struts2有很多内建校验器,requiredstring是校验数据是否为空并去除两端空格
  10. <field-validator type="requiredstring">
  11. //校验失败后的提示信息
  12. <message>用户名不能为空</message>
  13. </field-validator>
  14. </field>
  15. </validators>
  1. 校验失败后,struts2会返回名为input的逻辑视图名,因此我们还需要添加一个<result>
  2.  
  3. 这个配置文件是全局验证。也就是这个Action中的所有动作都会被验证,我们Action有的方法并不需要验证,加入验证甚至会出错。
  4.  
  5. 我们有两种方式可以让不需要验证的方法跳过验证:
  6.  
  7. 第一种:在不需要验证的方法前面添加注解@SkipValidation
  8.  
  9. 第二种:针对动作类中的某个方法进行验证,创建的XML文件名为 ActionClassName-ActionName-validation.xml ,这里的ActionName不是方法名,而是配置的action名字 ,例如 UserAction-regist-validation.xml

 

三、非字段配置风格(基于验证器的配置风格)

  1. <validators>
  2. //验证器类型
  3. <validator type="requiredstring">
  4. //要校验的参数名字
  5. <param name="fieldName">password</param>
  6. //校验失败后返回的信息
  7. <message>密码不能为空</message>
  8. </validator>
  9. </validators>

四、短路校验器

  1. 校验配置文件的<field-validator>和<validator>元素可以指定一个可选的short-circuit属性,指定该校验器是否是短路校验器,默认是false
  2.  
  3. 短路校验器的作用是如果一个字段内有多个校验器,如果一个校验器校验失败,其他校验器根本不会继续校验。
  4.  
  5. 校验器的执行顺序
  6. -所有基于验证器的配置风格的校验器优先于字段风格的校验器
  7. -所有的基于验证器风格的校验器,排在前面的先执行
  8. -所有的基于字段风格的校验器,排在前面的先执行。
  9.  
  10. 校验器的短路原则
  11. -所有的非字段校验器最先执行,如果某个非字段校验器校验失败,则该字段上的所有字段校验器都不会执行
  12. -非字段校验器校验失败,不会阻止其他非字段校验器的执行
  13. -如果某个字段校验器校验失败,则该字段下的后面的字段校验器都不会执行
  14. -字段校验器永远都不会阻止非字段校验器的执行

五、struts2的内建校验器

  1. required:必填验证器,要求指定的字段必须有值。使用非字段风格的配置时,可以配置fieldName属性来设置要校验的表单项名称。
  2.  
  3. requiredstring:必填字符串验证器。
  4.  
  5. intlongshort:整数校验器。要求字段的整数值必须在指定范围内。参数:min指定该属性最小值,不指定不检查最小值。max指定该属性最大值,不指定不检查最大值。
  6.  
  7. date:日期校验器。要求字段的日期值必须在指定范围内。参数:min最小日期 max最大日期
  8.  
  9. expression:表达式校验器,它只能被非字段风格配置。参数:expression指定一个逻辑表达式。
  10.  
  11. fieldexpression:字段表达式校验器。要求字段满足一个逻辑表达式。
  12.  
  13. email:邮件校验器。要求被检查字段非空,并且必须是合法的邮箱地址,底层是正则表达式。
  14.  
  15. url:网址校验器。要求被检查字段非空并且是个发的url地址,底层是正则表达式。
  16.  
  17. stringlength:字符串长度校验器。要求字段长度必须在指定的范围内。参数:manLength 最大长度 minLength最小长度
  18.  
  19. regex:正则表达式校验器。
  20. 等等。

六、自定义校验

  1. struts2内建的校验器可以完成大部分输入校验。但是有时候无法满足一些特殊的要求,struts2允许通过手动方式完成自定义校验。
  2.  
  3. 继承ActionSupport,重写validate方法
  4. public void validate() {
  5. if(user.getUsername()==null||user.getUsername().isEmpty()){
  6. addFieldError("username", "用户名不能为空!!!");
  7. }
  8. }
  9.  
  10. 重写validate方法会检验action类里的所有方法,我们不需要校验某些方法,有两种方法。
  11.  
  12. 第一种:在不需要校验的方法前加上注解@SkipValidation
  13. 第二种:重写validateXxx方法,Xxx即为要验证的方法名
  14. public void validateRegist() {
  15. if(user.getUsername()==null||user.getUsername().isEmpty()){
  16. addFieldError("username", "用户名不能为空!!!");
  17. }
  18.  
  19. }

七、struts2的输入校验流程

  1. 1.对字符串类型的请求参数进行类型转换,并且设置给JavaBean的属性
  2.  
  3. 2.类型转换中可能出现异常,如果出现异常,将异常信息保存并封装
  4.  
  5. 3.调用struts2的输入校验规则进行输入校验(根据各种vatidate.xml文件里定义的校验规则)
  6.  
  7. 4.通过反射调用validateXxx方法进行校验
  8.  
  9. 5.调用validate方法校验
  10.  
  11. 6.上面的校验出现错误,转到input对应的视图资源。没错误,调用action中的处理方法。

  

  

  

  

 

  

  

  

(十三)struts2的输入校验的更多相关文章

  1. Struts2的输入校验(2)——客户端校验

    Struts2的输入校验(2) --客户端校验 Struts2客户端校验的使用: (1)使用Struts2的标签生成输入页面的表单: (2)为该<s:form>元素添加validate=& ...

  2. Struts2的输入校验(1)——校验规则文件的编写

    Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: ...

  3. Struts2框架(8)---Struts2的输入校验

    Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...

  4. JavaWeb框架_Struts2_(六)----->Struts2的输入校验

    1. 输入校验章节目录 输入校验概述 客户端校验 服务器端校验 手动编程校验 重写validate方法 重写validateXxx()方法 输入校验流程 校验框架校验 Struts2 内置的校验器 常 ...

  5. Struts2的输入校验

    一.Struts2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 校验失败后将Struts2将自动 ...

  6. Struts2 自定义输入校验 第五弹

    Struts2的校验框架有两种:一种是validate方法,另一种是有效的xml文件. Action中自定义方法的输入校验,对于通过action的method属性所指定的自定义方法myExecute, ...

  7. 笔记:Struts2 输入校验

    Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ...

  8. Struts2输入校验

    1.编写校验规则文件 (<ActionName>-validation.xml),文件放在Action类文件相同的路径下校验失败返回input的result.       <vali ...

  9. struts2对action中的方法进行输入校验(2)

    struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...

随机推荐

  1. 「NGK每日快讯」12.11日NGK公链第38期官方快讯!

  2. django学习-7.html模板中include标签使用场景

    1.前言 假设一个公司A有一个网站B,且网站B有5个不同的页面分别为C1,C2,C3,C4,C5. 那么,我们在打开这5个不同页面后去查看页面的整体内容,会发现每个页面的顶部内容.底部内容都一模一样. ...

  3. ASP.NET Core WebApi版本控制

    前言: 在日常项目开发中,随着项目需求不断的累加.不断的迭代:项目服务接口需要向下兼容历史版本:前些时候就因为Api接口为做版本管理导致接口对低版本兼容处理不友好. 最近就像了解下如何实现WebApi ...

  4. [C语言学习笔记三]格式化输出和输入

    使用 printf 函数来输出,使用 scanf 函数来输入 在 printf 函数中使用变量,需要使用占位符代替. int 型一般存储整数,使用 %d 代替 long long int 型一般存储长 ...

  5. 通过CollectionUtils工具类判断集合是否为空,通过StringUtils工具类判断字符串是否为空

    通过CollectionUtils工具类判断集合是否为空 先引入CollectionUtils工具类: import org.apache.commons.collections4.Collectio ...

  6. DRF 三大认证的配置及使用方法

    目录 三大认证 一.身份认证 1.身份认证配置 1.1 全局配置身份认证模块 1.2 局部配置身份认证模块 2.drf提供的身份认证类(了解) 3.rf-jwt提供的身份认证类(常用) 4.自定义身份 ...

  7. 一文吃透如何部署kubernetes高可用集群

    使用 k8s 官方提供的部署工具 kubeadm 自动安装,需要在 master 和 node 节点上安装 docker 等组件,然后初始化,把管理端的控制服务和 node 上的服务都以 pod 的方 ...

  8. 后端程序员之路 29、Thrift

    Apache Thrift是Facebook实现的一个高效的.支持多种编程语言的远程服务调用(RPC)框架. Apache Thrift - Homehttp://thrift.apache.org/ ...

  9. 9.Vue之webpack打包基础---模块化思维

    主要内容: 1. 什么是模块化思维? 2.  ES6包的封装思想 一.什么是模块化思维呢? 现实工作中, 一个项目可能会有多个人同时开发. 然后, 将所有人开发的内容, 合并到一个文件中. 比如: 1 ...

  10. jQuery实现全网热播视频

    <section id="play"> <h1>全网热播视频</h1> <ul> <li><img src=&qu ...