第九章 校验框架

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8
9.1.4 客户端校验

用JavaScript进行客户端校验: – 编写校验方法 – 在提交表单的事件中调用校验方法校验 – 根据校验方法来判断是否进行表单提交
9
9.1.5 服务器端校验
• 服务器端校验对于系统的安全性、完整性、健壮性起到了
至关重要的作用。

Struts 2框架是非常强大的,它提供了一套验证框架,通过验 证框架能够非常简单和快速地完成输入校验。
10

第九章:校验框架
• 本章内容
9.1 输入校验概述 9.2 手动编程校验 9.3 校验框架校验
11
9.2 手动编程校验

手动编程方式:主要是通过在类中编写校验逻辑代码。

手动编程方式 – 方式一:重写validate()方法: validate()方法会校验 action中所有与execute方法签名相同的方法。
– required (必填校验器,要求field的值不能为null) – requiredstring (必填字符串校验器,要求field的值不能为null,并且长度
大于0,默认情况下会对字符串去前后空格) – stringlength(字符串长度校验器,要求field的值必须在指定的范围内, 否则校验失败,minLength参数指定最小长度,maxLength参数指定最 大长度,trim参数指定校验field之前是否去除字符串前后的空格) – regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达 式.expression参数指定正则表达式,caseSensitive参数指定进行正则 表达式匹配时,是否区分大小写,默认值为true) – int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值 ,max指定最大值)
目标: 本章旨在向学员介绍: 1)输入校验的必要性 2)手动编程方式实现校验 3)校验框架方式实现校验
时间:3学时
教学方法:授课+练习
3
第九章:校验框架
• 本章内容
9.1 输入校验概述 9.2 手动编程校验 9.3 校验框架校验
4
9.1.1 输入校验的概念

输入校验,从字面上来看好像是指对如输入的密码或者用户名 输入错误的校验。其实这个不算输入校验,这个算是业务逻辑 的判断了。输入校验是对输入的用户名长度、密码长度、年龄 信息等的判断。为了给大家一个感官上的认识,现在打开163 邮箱的注册页面,如下图所示。
• • •
Struts2 主要通过验证框架来完成数据验证。
Action必须继承ActionSupport类。 对于输入校验struts2提供了两种实现方法: 1. 采用手工编写代码实现。(手工编程) 2. 基于XML配置方式实现。(Struts2校验框架) 在struts2中,我们可以实现对action的所有方法进行校验或者 对action的指定方法进行校验。
<action name="val_*" class="com.nuesoft.validate.LoginAction“
method="{1}"> <result name="message">/index.jsp</result> <result name="input">/login.jsp</result> </action> </package>


15
9.2.2 重写validateXxx()方法
public void validateUpdate()
{ //对某个特定的方法进行验证 if(username.trim().equals("") || username==null) { this.addFieldError("username", "用户名不能为空"); } if(password.trim().equals("") || password==null) { this.addFieldError("password", "密码不能为空"); }else { if(password.length()<6 || password.length()>12) { this.addFieldError("password", "密码的长度在6--12位之间"); <package name="val" namespace="/val" extends="strutsdefault"> <constant name="struts.devMode" value="true" />


13
源自文库
9.2.1 重写validate()方法
public void validate() { if(username.trim().equals("") || username==null) { this.addFieldError("username", "用户名不能为空"); } if(password.trim().equals("") || password==null) { this.addFieldError("password", "密码不能为空"); }else { if(password.length()<6 || password.length()>12) { this.addFieldError("password", "密码的长度在6--12位之间"); } } } <package name="val" namespace="/val" extends="strutsdefault"> <constant name="struts.devMode" value="true" />
3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法 名。
4、再调用action中的validate()方法。 5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误 信息的集合的size大于0),系统自动将请求转发至名称为input的视图 。如果系统中的fieldErrors没有任何错误信息,系统将执行action中 的处理方法。
17
9.2.3 输入校验的流程
对请求参数进行类型转换
转换是否成功
将转换错误保存在ActionContext中
执行ValidateXxx方法
从ConversionErrors中取出 类型转换错 误,并将其转换成字段错误(FieldError)
执行Validate方法
是否有字段错误
直接返回input结果 转入相应的web资源
– 方式二:校验action的某个与execute方法签名相同方法。


20
9.3.2 Struts2内置的校验器

Struts 2提供了非常多的默认校验器。在开发中使用内置的校验器 能满足大部分的校验需求。这些校验器的定义可以在xwork2.x.jar中的com.opensymphony.xwork2.validator.validators下的 default.xml中找到。 • 系统提供的内置校验器如下:
<action name="val_*" class="com.nuesoft.validate.LoginAction“
method="{1}"> <result name="message">/index.jsp</result> <result name="input">/login.jsp</result> </action> </package>
调用Action的处理方法
Action处理方法返回结果
18
第九章:校验框架
• 本章内容
9.1 输入校验概述 9.2 手动编程校验 9.3 校验框架校验
19
9.3.1 校验框架概述

使用struts2校验框架:把校验逻辑放到配置文件中,实现校验逻辑代 码与业务逻辑代码的分离。 使用基于校验框架校验方式实现输入校验时,Action也需要继承 ActionSupport,并且提供校验文件。 框架校验方式 – 方式一:校验action中所有与execute方法签名相同的方法。
21
9.3.2 Struts2内置的校验器
– 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时校验通过,否则 不通过,该校验器不可用在字段校验器风格的配置中)
5
9.1.1 输入校验的概念
6
9.1.2 输入校验的必要性

所有用户的输入都是邪恶的,为了保证数据的合法性,输入校 验就显得尤为重要。
7
9.1.3 校验的方式

输入校验分为客户端校验和服务器端校验。 – 客户端校验可以过滤掉用户的错误操作,是第一道防线 ,一般使用JavaScript代码实现。 – 仅有客户端验证还是不够的。攻击者还可以绕过客户端 校验直接进行非法输入,这样可能会引起系统的异常, 为了确保数据的合法性,防止用户通过非正常手段提交 错误信息。所以必须加上服务器端的验证。
校验框架
1
课程结构
内容
第一章:Struts2入门 第二章:Struts2中的Action 第三章:Struts2拦截器 第四章:表达式语言OGNL 第五章:Struts2标签库 第六章:类型转换 第七章:国际化 第八章:文件上传和下载
课时(H)
3 6 3 3 3 3 3 3
第九章:校验框架
3
2
第九章:校验框架
}
}}
• •
Action类继承ActionSupport类,struts.xml中添加input的result视图, 验证失败后,请求转发至input视图
16
9.2.3 输入校验的流程
1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中 的属性。 2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到 ActionContext,conversionError拦截器将异常信息添加到fieldErrors 里。不管类型转换是否出现异常,都会进入第3步。
– 方式二:重写validateXxx()方法:validateXxx()只会校
验action中方法名为Xxx的方法。
12
9.2.1 重写validate()方法

validate()方法会校验action中所有与execute方法签名相同的 方法。 当某个数据校验失败时,我们应该调用addFieldError()方法往 系统的fieldErrors添加校验失败信息(为了使用 addFieldError()方法,action可以继承ActionSupport ) 如果系统的fieldErrors包含失败信息,struts2会将请求转发到 名为input的result。在input视图中可以通过<s:fielderror/>显示 失败信息。
• •
Action类继承ActionSupport类,struts.xml中添加input的result视图。 验证失败后,请求转发至input视图
14
9.2.2 重写validateXxx()方法

通过validateXxx()方法实现, validateXxx()只会校验action中 方法名为Xxx的方法。其中Xxx的第一个字母要大写。 当某个数据校验失败时,我们应该调用addFieldError()方法往 系统的fieldErrors添加校验失败信息(为了使用 addFieldError()方法,action可以继承ActionSupport )。 如果系统的fieldErrors包含失败信息,struts2会将请求转发到 名为input的result。在input视图中可以通过<s:fielderror/>显示 失败信息。
相关文档
最新文档