一、请求参数校验介绍

校验的分类 :客户端数据校验 和服务器端数据校验

客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 )

服务器数据校验 ,使用框架内置校验功能(struts2 内置校验功能 )----- 必须的

struts2 支持校验方式

代码校验 :在服务器端通过编写java代码,完成数据校验

配置校验 :XML配置校验(主流) 和 注解配置校验

二、手工代码校验请求参数

步骤一: 封装数据

步骤二: 实现校验Action,必须继承ActionSupport类

步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验

通过代码逻辑判断参数是否有效,如果参数非法 , this.addFieldError (ActionSupport提供)

workflow拦截器 跳转回 input页面

步骤四: 在jsp中 通过<s:fieldError/> 显示错误信息

* validate方法会对Action中所有业务方法进行校验,如果只想校验某一个方法: validate方法名()

三、Xml配置方式数据校验

XML配置方式 数据校验

代码校验 不适用于大型项目, 流程数据复杂时,开发量和维护量都会很大

xml配置校验原理 : 将很多校验规则代码已经写好,只需要在xml中定义数据所使用校验规则就可以了

步骤一 :编写jsp

步骤二 :编写Action继承ActionSupport或者 实现 Validateable接口

步骤三 :封装请求参数

使用xml校验 必须提供get方法

步骤四 :编写校验规则xml文件

在Action所在包 编写Action类名-validation.xml对Action所有业务方法进行校验

引入DTD

------ xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd

 <!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

内置校验器定义文件

xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml

内建校验器

required (必填校验器,要求被校验的属性值不能为null)

requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)

 stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)

regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)

 int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)

double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)

 email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)

 url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)

date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)

案例

required  必填校验器<field-validator type="required"><message>性别不能为空!</message></field-validator>requiredstring  必填字符串校验器<field-validator type="requiredstring"><param name="trim">true</param><message>用户名不能为空!</message></field-validator>stringlength:字符串长度校验器<field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">2</param><param name="trim">true</param><message><![CDATA[产品名称应在2-10个字符之间]]></message></field-validator>int:整数校验器<field-validator type="int"><param name="min">1</param><param name="max">150</param><message>年龄必须在1-150之间</message></field-validator>date: 日期校验器<field-validator type="date"><param name="min">1900-01-01</param><param name="max">2050-02-21</param><message>生日必须在${min}到${max}之间</message></field-validator>url:  网络路径校验器<field-validator type="url"><message>传智播客的主页地址必须是一个有效网址</message></field-validator>email:邮件地址校验器<field-validator type="email"><message>电子邮件地址无效</message></field-validator>regex:正则表达式校验器<field-validator type="regex"><param name="regexExpression"><![CDATA[^13\d{9}$]]></param><message>手机号格式不正确!</message></field-validator>fieldexpression : 字段表达式校验<field-validator type="fieldexpression"><param name="expression"><![CDATA[(password==repassword)]]></param><message>两次密码输入不一致</message></field-validator>

程序源代码:

1、regist.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>My JSP 'index.jsp' starting page</title></head><body><s:fielderror/><form action="${pageContext.request.contextPath}/regist" method="post">username:<input type="text" name="username"><s:fielderror fieldName="username.message"/><br>password:<input type="password" name="password"><s:fielderror fieldName="password.message"/><br>repassword:<input type="password" name="repassword"><br>hobby:<input type="checkbox" name="hobby" value="eat">吃<inputtype="checkbox" name="hobby" value="drink">喝<inputtype="checkbox" name="hobby" value="play">玩<br> age:<inputtype="text" name="age"><br> birthday:<input type="text"name="birthday"><br> email:<input type="text" name="email"><br>url:<input type="text" name="url"><br>telphone:<input type="text" name="telphone"><br>    <input type="submit" value="注册"></form>
</body>
</html>

2、类型转换类

package com.sihai.utils;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;public class MyTypeConverter extends StrutsTypeConverter {// 接收页面传递的数据封装到javaBean.@Overridepublic Object convertFromString(Map context, String[] values, Class toClass) {// System.out.println(context); //ognl.OgnlContext@faae2497// System.out.println(values[0]); //[Ljava.lang.String;@100c4d// System.out.println(toClass); //class java.util.DateString value = values[0];SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");Date date = null;try {date = sdf.parse(value);} catch (ParseException e) {// e.printStackTrace();throw new RuntimeException();}return date;}@Overridepublic String convertToString(Map context, Object o) {return null;}}

3、UserAction-regist-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators><!-- 对username属性进行校验 --><field name="username"><!-- 指定username不能为空 --><field-validator type="requiredstring"><!-- 错误信息 --><message>用户名不能为空--------</message></field-validator><!-- 长度校验,规定用户名必须在6-10位之间 --><field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">6</param><message>用户名必须在${minLength}-${maxLength}位之间</message></field-validator></field><!-- 对age进行校验,规定年龄必须在10-40之间 --><field name="age"><field-validator type="int"><param name="min">10</param><param name="max">40</param><message>年龄必须在${min}--${max}之间</message></field-validator></field><!-- 对birthday进行校验 --><field name="birthday"><field-validator type="date"><param name="min">1974-01-01</param><param name="max">2004-12-31</param><message>生日必须在${min}年到${max}年之间</message></field-validator></field><!-- 校验邮箱 --><field name="email"><field-validator type="email"><message>邮箱格式不正确</message></field-validator></field><!-- url校验 --><field name="url"><field-validator type="url"><message>url不能这空,类似于http://www.baidu.com</message></field-validator></field><!-- 使用正则 --><field name="telphone"><field-validator type="regex"><param name="regexExpression"><![CDATA[^135[0-9]{8}$]]></param><message>电话号码必须是135xxxxxxxx</message></field-validator></field><field name="repassword"><field-validator type="fieldexpression"><param name="expression"><![CDATA[(password==repassword)]]></param><message>两次密码输入不一致</message></field-validator></field></validators> 

如何对指定的方法校验

格式  Action类名-ActionName(<action>元素name属性)-validation.xml

例如 : 校验AddCustomerAction中execute方法  配置<action name="addcustomer" .../>校验文件名字: AddCusotmerAction-addcustomer-validation.xml

四、自定义校验规则

步骤一: 自定义校验器 必须实现 Validator  接口

通常自定义校验器 继承 ValidatorSupport和 FieldValidatorSupport

ValidatorSupport 针对不是一个输入字段 (两个密码一致)

FieldValidatorSupport 针对是一个输入字段  (用户名非空)

步骤二: 注册校验器

在工程的src下新建validators.xml文件

引入 xwork-core-2.3.7.jar 中 xwork-validator-config-1.0.dtd

步骤三 使用校验器

在Action所有包 创建Action类名-validation.xml

struts2教程(5)--请求参数校验相关推荐

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

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

  2. Springboot中请求参数校验

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

  3. laravel框架中文手册_laravel请求参数校验方法

    对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节.无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型.大小.格式等等做这样或者那样的校验,然后才进行逻辑处理 ...

  4. Spring请求参数校验

    SpringMVC支持的数据校验是JSR303的标准,通过在bean的属性上打上@NotNull.@Max等进行验证.JSR303提供有很多annotation接口,而SpringMVC对于这些验证是 ...

  5. SpringBoot全局异常处理及前端请求参数校验

    SpringBoot全局异常捕获处理及参数校验 文章目录 SpringBoot全局异常捕获处理及参数校验 为什么要用全局异常处理? 如何进行全局异常捕获和处理? 统一结果封装 统一返回结果 枚举类 使 ...

  6. struts2教程(3)--请求参数处理

    Action处理请求参数 struts2 和 MVC定义关系 StrutsPrepareAndExecuteFilter : 控制器 JSP : 视图 Action : 可以作为模型,也可以是控制器 ...

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

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

  8. struts2教程(7)--拦截器

    Struts2拦截器 一.拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链 ...

  9. Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法

    在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...

最新文章

  1. mybatis 一对多查询_Java自学之mybatis:使用注解方式多对一查询
  2. ATTCK矩阵 linux系统安全实践
  3. python课堂笔记手抄图片_超简单又漂亮的手抄报图片
  4. 深数据 - Deep Data
  5. 震惊! Leftmost Digit
  6. 为什么显卡更新换代极快,每年都会有更强的新系列,而声卡却永远停留在了“兼容DX9的集成声卡“?
  7. 老电脑应该怎么重装系统比较好
  8. javascript模拟抽奖
  9. RMAN深入解析之--内存中的RMAN
  10. monkey配置及简单报告生成(安卓)
  11. python100以内的质数_100以内质数表
  12. 23根火柴游戏程序,c语言实现人和计算机一起玩。 每日一题--20200423--
  13. 马拉车算法(求最长回文串)
  14. Windows下查看进程及结束进程命令
  15. 泡泡龙游戏c语言程序,《泡泡龙》发射技巧总结_图文攻略_高分攻略_百度攻略...
  16. nod32系统更新服务器,Nod32官方升级服务器列表
  17. 3D语义场景图论文小记
  18. wincc7.0显示无法访问服务器,WinCC 7.0 SP3 安装时提示网络连接不可用,无法安装...
  19. 用FPGA实现半加器
  20. Matlab:FIR滤波器设计和音频信号滤波去噪

热门文章

  1. 验证输入的是否数字的几种方法
  2. window.opener 的用法
  3. STM32-使用函数指针时莫名复位问题原因
  4. 蓝牙L2CAP剖析(一)
  5. java元婴期(30)----java进阶(springmvc(4)---参数绑定(下)springmvc校验异常处理)
  6. 02-CA/TA编程:aes demo
  7. Android用shareUserID实现多个Activity显示在同一界面
  8. 实行计算机分类标识管理的根本目的,会计信息系统试卷A及答案
  9. ETHREAD 结构体属性介绍
  10. 【安全漏洞】一次前台任意文件下载漏洞挖掘