Struts 2的输入校验(一)
9 Struts 2的输入校验
输入校验有两种:客户端和服务器端校验。客户端校验一般是通过JavaScript来完成,这种校验可减轻服务器压力。服务器校验主要通过服务器端编程的方式来完成。
(1) 客户端校验
客户端校验一般是通过JavaScript来完成,这种校验可减轻服务器压力。
(2) 服务器端校验
有了客户端验证为何还要服务器端验证? —— 为了防止客户端验证失败。
服务器端验证一般是通过后台的硬编码Servlet来实现的。
9.1 在Struts 2中手工实现输入校验
Struts 2中最底层、最原始的数据校验方法——手工实现数据校验。
(1) 重写validate方法校验单个处理逻辑
重写ActionSupport类的validate方法校验单个处理逻辑,如下Action中重写validate的代码:
/** Struts2手工验证:实现ActionSupport类的validate方法 * 先执行到validate方法,再执行到execute方法*/ @Override publicvoid validate() { if(user.getName()==null||"".equals(user.getName().trim())){ this.addFieldError("user", "user name is not null!"); //addFieldError添加错误信息,在JSP页面中用<s:fielderror>标记取出 }else{ Pattern p = Pattern.compile("\\w{6,20}"); Matcher m = p.matcher(user.getName().trim()); if(m.matches()==false){ this.addFieldError("user","用户名必须是字母数字下划线6-20个字符!");}}} |
JSP页面显示错误信息的代码:
<!--<s:fielderror>标记用来显示Action中的addFieldError方法封装的错误信息 --> <s:fielderror></s:fielderror> |
(2) 重写validateXX方法校验多个处理逻辑
多个表单对应一个Action可以减少类的数量。
在同一个Action类中添加validateXX方法可实现同一个Action中对不同表单的校验。
Action示例:
publicclass OneAction extends ActionSupport{ /** * 多个表单对应一个Action类:重写validateXX方法 */ privatestaticfinallongserialVersionUID = 1L; private User user;//领域对象,在JSP页面中用user.name来获取name值 get/set方法 @Override public String execute() throws Exception { returnsuper.execute(); } public String login(){ returnSUCCESS; } public String reg(){ returnSUCCESS; } /** * 添加validateXX方法,在同一个Action中实现对不同的表单的校验 */ publicvoid validateReg(){//对reg的方法进行校验 if(user.getName()==null||"".equals(user.getName().trim())){ this.addFieldError("user","用户名不能为空"); } } publicvoid validateLogin(){//对login方法校验 if(!"admin".equals(user.getName())||!"000".equals(user.getPass())){this.addFieldError("user","用户名或密码错误"); }}} |
Action类中:this.addFieldError("user","用户名或密码错误");
将错误信息添加到fielderror中,在JSP中用s:fielderror来显示。
s:fielderror标记,用来显示Action页面中添加进去的错误信息: 在Action类中写法:this.addFieldError("user","用户名不能为空"); <s:fielderror></s:fielderror> |
9.2 基于Struts 2验证框架的输入校验
Struts 2提供了更高效,简易的校验框架,用户只需设置校验配置文件即可完成输入校验。基于验证框架来完成输入校验,只需在与Action同目录下下创建一个xml格式的验证文件即可,而无需validate方法。
实现了Action类与配置文件的分离,在配置文件中实现对Action类中某字段的校验。
(1) 编辑校验规则文件
校验文件是XML格式,命名规则:<Action类名>-validation.xml ,每一个Action都可以对应有一个这样的校验配置文件,用来对当前Action进行校验。
field用来指定Action中要校验的属性字段,属性字段名称应该与field的name属性值相同 ,在field中一般添加field-validator标记,用来指定验证规则(是否为空规则、字符组成规则),param用来指定正则表达式,message指定不符合规则的错误提示信息。
<Action名>-validation.xml文件示例:
(2) 字段校验和非字段校验:
<validators> <!-- 字段校验field --> <fieldname="name"> <field-validatortype="requiredstring"> //requiredstring指的是必填字符串校验器 ,也就是说校验规则是必填字符串校验器 <paramname="trim">true</param> <message>必须输入用户名!!!</message> </field-validator> <field-validatortype="regex"> <paramname="expression"><![CDATA[(\w{4,25})]]></param> <message>用户名只能是字母和数字,且长度在4-25之间</message> </field-validator> </field> <!-- 非字段校验 validator--> <validatortype="校验器名称"> <paramname="fieldName">要被校验的字段</param> <paramname="参数名">参数值</param> <message>校验错误提示信息</message> </validator> </validators> |
字段校验和非字段校验可混合在同一个XX-validation.xml文件中,但是有顺序:所有非字段优于字段,非字段先校验,若某个字段的非字段校验失败,则字段方式校验都不执行,反之,字段校验却不会影响非字段。
(3) 配置校验文件
XX-validation.xml校验文件示例:
<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> //字段校验field <fieldname="password"> <field-validatortype="requiredstring"> <messagekey="error.password.required"/> </field-validator> <field-validatortype="stringlength"> <paramname="trim">true</param> <paramname="minLength">4</param> <paramname="maxLength">10</param> <messagekey="errors.range"/> </field-validator> </field> <fieldname="password2"> <field-validatortype="requiredstring"> <messagekey="error.password2.required"/> </field-validator> </field> //非字段校验validator <validatortype="expression"> <paramname="expression">password eq password2</param> <messagekey="error.password.match"/> </validator> </validators> |
配置中的两个问题:
一、验证器名称
在 xwork-2.0.4.jar 包中,在 /com/opensymphony/xwork2/validator/validators 路径下default.xml文件中有所有 Struts2 自带的输入校验器定义。
分为以下几种:
1.required必填
2.requiredstring必填字符串
3.int整数
4.long
5.short
6.double
7.date日期
8.expression
9.fieldexpression字段表达式
10.email邮件地址
11.url网址
12.visitor
13.conversion
14.stringlength字符串长度
15.regex正则表达式
16.conditionalvisitor
二、用于输出的提示信息用一个key来表示
message标签的key属性,其实是在一个用户自定义的资源文件中提前定义好了的,方便实现国际化。
***用法:
首先自定义一个资源文件errorMsgs.properties
然后,将该资源文件在struts.xml中进行配置:
<constantname="struts.custom.i18n.resources"value="errorMsgs"></constant> |
最后才可以在验证文件中使用:
<fieldname="pass"> <field-validatortype="requiredstring"> <paramname="trim">true</param> <messagekey="pass.required"/> </field-validator> </field> |
9.3 使用客户端校验
Struts2要完成客户端校验,视图页面就必须使用Struts2标签库。然后在<s:form>标签中添加validate=”true”属性即可。form的theme不能是simple
<s:formaction="validateAction"validate="true"></s:form> |
其他任何文件不作改动,查看页面源码发现多了两个JS文件,但效果并无太大区别。
<script type="text/javascript" src="/Struts2_Validate_ByFrame/struts/xhtml/validation.js"></script> <script type="text/javascript" src="/Struts2_Validate_ByFrame/struts/utils.js"></script> |
9 Struts 2的输入校验
输入校验有两种:客户端和服务器端校验。客户端校验一般是通过JavaScript来完成,这种校验可减轻服务器压力。服务器校验主要通过服务器端编程的方式来完成。
(1) 客户端校验
客户端校验一般是通过JavaScript来完成,这种校验可减轻服务器压力。
(2) 服务器端校验
有了客户端验证为何还要服务器端验证? —— 为了防止客户端验证失败。
服务器端验证一般是通过后台的硬编码Servlet来实现的。
9.1 在Struts 2中手工实现输入校验
Struts 2中最底层、最原始的数据校验方法——手工实现数据校验。
(1) 重写validate方法校验单个处理逻辑
重写ActionSupport类的validate方法校验单个处理逻辑,如下Action中重写validate的代码:
/** Struts2手工验证:实现ActionSupport类的validate方法 * 先执行到validate方法,再执行到execute方法*/ @Override publicvoid validate() { if(user.getName()==null||"".equals(user.getName().trim())){ this.addFieldError("user", "user name is not null!"); //addFieldError添加错误信息,在JSP页面中用<s:fielderror>标记取出 }else{ Pattern p = Pattern.compile("\\w{6,20}"); Matcher m = p.matcher(user.getName().trim()); if(m.matches()==false){ this.addFieldError("user","用户名必须是字母数字下划线6-20个字符!");}}} |
JSP页面显示错误信息的代码:
<!--<s:fielderror>标记用来显示Action中的addFieldError方法封装的错误信息 --> <s:fielderror></s:fielderror> |
(2) 重写validateXX方法校验多个处理逻辑
多个表单对应一个Action可以减少类的数量。
在同一个Action类中添加validateXX方法可实现同一个Action中对不同表单的校验。
Action示例:
publicclass OneAction extends ActionSupport{ /** * 多个表单对应一个Action类:重写validateXX方法 */ privatestaticfinallongserialVersionUID = 1L; private User user;//领域对象,在JSP页面中用user.name来获取name值 get/set方法 @Override public String execute() throws Exception { returnsuper.execute(); } public String login(){ returnSUCCESS; } public String reg(){ returnSUCCESS; } /** * 添加validateXX方法,在同一个Action中实现对不同的表单的校验 */ publicvoid validateReg(){//对reg的方法进行校验 if(user.getName()==null||"".equals(user.getName().trim())){ this.addFieldError("user","用户名不能为空"); } } publicvoid validateLogin(){//对login方法校验 if(!"admin".equals(user.getName())||!"000".equals(user.getPass())){this.addFieldError("user","用户名或密码错误"); }}} |
Action类中:this.addFieldError("user","用户名或密码错误");
将错误信息添加到fielderror中,在JSP中用s:fielderror来显示。
s:fielderror标记,用来显示Action页面中添加进去的错误信息: 在Action类中写法:this.addFieldError("user","用户名不能为空"); <s:fielderror></s:fielderror> |
转载于:https://blog.51cto.com/lele185039/1275468
Struts 2的输入校验(一)相关推荐
- Struts 2读书笔记-----使用Struts 2的输入校验
输入校验是所有的Web应用必须处理的问题.一个健壮的应用系统必须可以阻止一些非法的输入,防止这些非法的输入进入系统.这样才可以保证系统不受到影响. 输入校验可以分为客服端校验和服 ...
- Struts 2的输入校验(二)
9.2 基于Struts 2验证框架的输入校验 Struts 2提供了更高效,简易的校验框架,用户只需设置校验配置文件即可完成输入校验.基于验证框架来完成输入校验,只需在与Action同目录下下创建一 ...
- Struts 学习笔记2(输入校验、国际化、异常处理)
项目文件结构 项目源文件下载地址:http://dl.dbank.com/c05qyg3yir Struts2的输入校验 Struts2输入校验.执行流程: 1)首先进行类型转换 2)然后进行输入校验 ...
- 基于Annotation的输入校验
这种基于Annotation的输入校验实质上也属于Struts 2"零配置"特性的部分,它允许使用Annotation来定义每个字段应该满足的规则,Struts 2在com.ope ...
- struts中简单的校验
Struts中简单的校验 "计应134(实验班) 凌豪" Struts2校验简要说明:struts2中通常情况下,类型转换要在数据校验之前进行.类型转换其实也是基本的服务器端校验, ...
- 使用Struts2验证框架实现输入校验
学习了<Struts2权威指南>中关于Struts2的输入校验,自己动手测试了一把,也遇到一些问题,在这里记录一下.直接看代码: login.jsp [xhtml] view plainc ...
- 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验
出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...
- Struts2输入校验
1.校验表单信息是否符合常规(输入校验) ActionSupport实现接口Validateable,接口中定义方法validate,需要 Override方法validate 2.校验类型转换(类型 ...
- Struts2输入校验之validate输入校验方式
一.在Web系统项目中有大量的视图页面需要用户自行输入很多数据.这些数据的类型有很多种.为了防止某些客户的恶意输入以及对Web项目的恶意破坏,必须引入输入校验,像Windows操作系统的防火墙一样把一 ...
最新文章
- python训练好的图片验证_利用keras加载训练好的.H5文件,并实现预测图片
- Windows环境下IOCP和SELECT模型性能比较
- BUUCTF-Reverse:新年快乐 + 加壳与脱壳
- BufferedInputStream_字节缓冲输入流
- 理解流量监管和整形的关键算法—令牌桶
- 联想y7000p电池固件下载_联想拯救者Y7000P安装双系统win10+ubuntu18.04
- BOS v2.0后台管理系统界面通用解决方案
- 艺电模拟城市开源代码读后感
- python实现GPS经纬度转换
- 三星固态Dell版的960g的sm863a硬盘
- Android蜗牛睡眠技术文档,蜗牛睡眠app 问题提问集中贴 常见问题汇总
- 【图像检测-缺陷检测】基于灰度共生矩阵实现痕迹检测matlab代码
- CSDN每日打卡已经2周,进展如何?,【2021Python最新学习路线】
- 2022年简历石沉大海,软件测试行业当前找工作有多难?
- Micropython——关于通信I2C协议的应用和原理讲解
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- 【Java 并发编程】我们为什么要学并发编程?
- 内存检测工具sanitize
- OSChina 周日乱弹 —— 种族不同,禁止交往
- 我的世界服务器娘怎么修改配置,转【教学】Pixelmon配置文件修改指南
热门文章
- Java项目:就业管理系统设计和实现(java+springboot+ssm)
- python十大标准_python对标准类型的分类
- vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题
- python 乒乓球_python乒乓球
- 【java】关于面向对象优点的个人理解
- php column not found,java.sql.SQLException: Column 'cloumn name' not found.
- git 修改标签名称_Git常用命令汇总,希望能帮到你
- 带有中文的字符串各个字符的获取c++程序
- HTML POST提交参数给PHP并返回json,上传execl文件
- swift判断iPhone 各种型号