在Action中通过代码执行数据校验

请求参数的输入校验途径一般分两种:客户端校验 :通过JavaScript 完成 (jquery validation插件),目的:过滤正常用户的误操作。

服务器校验 :通过java代码完成 ,目的:整个应用阻止非法数据的最后防线

列如:

<h1>登录:请求数据校验--代码手动校验</h1><s:fielderror/><form action="${pageContext.request.contextPath }/login.action" method="post">用户名:<input type="text" name="username"/><s:fielderror fieldName="username" /><br/>密    码:<input type="password" name="password"/><br/><input type="submit" value="登录"/></form>

1.全局校验 (对当前Action的所有方法进行校验 )

如果要执行校验 ,Action必须继承ActionSupport 类 (因为它实现 Validateable接口)

//手动校验
public void validate() {
//StringUtils.isBlank()方法判断输入是否为空if(StringUtils.isBlank(username)){/*将错误信息写入Map<String,List<String>> fieldErrors;当遇到workflow拦截器时,会判断错误集合的size的大于0,如果大于0,则向input的视图跳转*/super.addFieldError("username", "用户不能为空");}
}

StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数
String 为 null则不会抛出 NullPointerException ,而是做了相应处理。

JSP显示错误信息配置Struts2的特有标签S标签

在jsp增加显示错误信息 <s:fielderror />

校验机制原理分析:

2.局部校验 (校验Action中指定业务方法—校验一个方法 )

 在Action 添加 validateXxx 方法(约定), 这里XXX 是要校验目标方法名 (只会对指定方法校验)

提示:

1.被校验方法首字母 要大写。

2.全局校验一直会执行,即使有局部校验。且先走的局部校验。

-----------------------------------------------------------------------------------------------------------------------------

 基于XML配置实现校验

1.  全局校验 (校验当前Action 所有方法-是针对某一个action中的所有方法)----在Action类所在包,创建 Action类名-validation.xml

JSP页面同上

Action代码: Action 必须继承ActionSupport 类 (为了实现 Validateable接口 )

public class LoginAction extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String execute() throws Exception {System.out.println(this);return INPUT;}@Overridepublic String toString() {return "LoginAction [username=" + username + ", password=" + password+ "]";}

XML代码:(必须和 action在容一个包下,Action类名-validation.xml)

<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators><!-- 校验用户 --><field name="username"><field-validator type="requiredstring"><message>用户不能为空</message></field-validator></field><!-- 校验密码 --><field name="password"><field-validator type="requiredstring"><message>密码不能为空</message></field-validator></field></validators>

局部校验 (校验当前Action 指定方法

在Action类所在包,创建 Action类名-<action>name属性-validation.xml

JSP页面代码:

<h1>登录:请求数据校验--xml配置校验--局部</h1><s:fielderror/><form action="${pageContext.request.contextPath }/login3.action" method="post">用户名:<input type="text" name="username"/>(非空,且长度为3-10位)<br/>密    码:<input type="password" name="password"/>(必须,且长度为6-12)<br/>重复密码:<input type="password" name="repassword"/>(必须和密码一致)<br/>年龄:<input type="text" name="age"/>(数字,且必须是18-100)<br/>手机号码:<input type="text" name="mobile"/>(手机号规则,11位数字)<br/>邮箱:<input type="text" name="email"/>(邮箱格式)<br/><input type="submit" value="登录"/></form>

Action代码:

public class User2Action extends ActionSupport{private static final long serialVersionUID = 1L;private String username;private String password;private String repassword;private int age;private String mobile;private String email;public String login2(){System.out.println(this);return NONE;}
/*GET和SET 方法略去...............toString方法略去..................*/

XML代码:

<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators><field name="username"><field-validator type="stringlength"><param name="minLength">3</param><param name="maxLength">10</param><message>用户名必须在3-10位</message></field-validator></field><field name="password"><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">12</param><message>密码必须在6-12位</message></field-validator></field><field name="repassword"><field-validator type="fieldexpression"><param name="expression">password==repassword</param><message>两次输入密码不一致</message></field-validator></field><field name="age"><field-validator type="int"><param name="min">18</param><param name="max">100</param><message>年龄必须是18-100</message></field-validator></field><field name="mobile"><field-validator type="regex"><param name="regex"><![CDATA[^1[3|5|8|4]\d{9}$]]></param><message>用户名必须在3-10位</message></field-validator></field><field name="email"><field-validator type="email"><message>邮箱格式不正确</message></field-validator></field>
</validators>

如果检测错误Action会自动跳转到input视图。

其他校验器可参考:

转载于:https://www.cnblogs.com/lxp503238/p/7147587.html

Struts2请求参数合法性校验机制相关推荐

  1. GO请求参数规则校验(自定义校验规则、规则中文化)

    文章目录 1 简介 2 简单校验 3 自定义字段类型 4 结构层校验 5 翻译和自定义错误 6 国际化成中文 ​ 参数校验是开发中不可或缺的重要组成部分,本章节我们将介绍参数的校验,采用的是 go-p ...

  2. Spring Boot 2.x基础教程:JSR-303实现请求参数校验

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  3. Spring Boot 拦截器 请求参数MD5签名校验

    拦截器定义 /*** 拦截器 请求参数签名校验* Created by jiyang on 14:47 2017/12/14*/ @Component @Slf4j public class Para ...

  4. Springboot中请求参数校验

    1.添加依赖 <!-- 参数校验 --> <dependency><groupId>org.springframework.boot</groupId> ...

  5. java进行参数快捷校验,ehi-verification

    ehi-verification 项目介绍 一个好用的快速的参数校验框架 支持直接调用校验并提供Spring-webmvc拦截器对请求参数进行校验 软件架构 没啥架构,不强制依赖第三方Jar包 更新记 ...

  6. struts2教程(5)--请求参数校验

    一.请求参数校验介绍 校验的分类 :客户端数据校验 和服务器端数据校验 客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,使用框架内置校验功能( ...

  7. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API          1. 在Action类中也可以获取到Servlet一些常用的API         * 需求:提供JSP的表单页面的数据, ...

  8. sql2008安装时提示参数不能为空_Java Validation API,实现参数的合法性校验

    Hibernate Validator是Java Validation API(JSR 303)标准的一个具体实现,用于对参数进行合法性校验.校验数据在任何应用中都是一个很常见的任务,所以JCP组织定 ...

  9. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

最新文章

  1. python的服务器、客户端被拒绝访问_python – uWSGI服务器日志…权限被拒绝读取......
  2. 中国电子学会scratch等级考试四级编程题:找出出现次数最多的数字
  3. php5.6 64位配置,centos(64位) 安装PHP5.6,配置LNMP
  4. 环境图配置不存在pbr_小米11再曝光,硬件参数不存在短板,完全最高旗舰配置...
  5. 关于easyui中的editIndex
  6. 反恐精英代码_反恐精英20周年,为什么沙漠2(dust2)地图玩家们一直玩不腻?...
  7. 【原创】Quartz代码详解
  8. 安卓log.e函数打印示例_log1p()函数以及C ++中的示例
  9. 华为:对学生定制机毫不知情 将会对虚假宣传追责
  10. [中英对照]The sysfs Filesystem | sysfs文件系统
  11. 人工智能:从单细胞生物的智能说起
  12. Java调用动态库 缺点,Java调用动态库所需要关心的有关问题
  13. 一个串口连接另外两个串口的设计
  14. 网易邮箱服务器邮箱协议,网易邮箱全面支持Exchange协议
  15. 微信公众平台发红包接口
  16. 【团体天梯赛/PTA】7-34 福到了 (15 分)
  17. 微信小程序_map组件实现定位
  18. bugku convert [MISC]
  19. 机械设备远程实时监控方案
  20. html表单验证方法,简述HTML交互式表单验证方法

热门文章

  1. win7计算机睡眠怎么设置方法,win7系统更改(设置)计算机睡眠时间的操作方法...
  2. Java开发知识点!手把手讲解-一个复杂动效的自定义绘制
  3. 【深度学习】像素级分割网络新思路之DeepLabv3+
  4. 【网络爬虫】BeautfulSoup爬百度百科(真の能看懂~!)
  5. python【力扣LeetCode算法题库】26-删除排序数组中的重复项
  6. python【力扣LeetCode算法题库】2-两数相加
  7. Tensorflow【实战Google深度学习框架】TensorFlow模型的保存与恢复加载
  8. Android移动开发之【Android实战项目】DAY14-修改json里某个字段的值
  9. centos 6.5手动同步ntp时钟_如何安装和配置 Chrony 作为 NTP 客户端? | Linux 中国
  10. 发那科机器人注油_如何给发那科机器人做三年保养?干货!