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的输入校验(一)相关推荐

  1. Struts 2读书笔记-----使用Struts 2的输入校验

               输入校验是所有的Web应用必须处理的问题.一个健壮的应用系统必须可以阻止一些非法的输入,防止这些非法的输入进入系统.这样才可以保证系统不受到影响. 输入校验可以分为客服端校验和服 ...

  2. Struts 2的输入校验(二)

    9.2 基于Struts 2验证框架的输入校验 Struts 2提供了更高效,简易的校验框架,用户只需设置校验配置文件即可完成输入校验.基于验证框架来完成输入校验,只需在与Action同目录下下创建一 ...

  3. Struts 学习笔记2(输入校验、国际化、异常处理)

    项目文件结构 项目源文件下载地址:http://dl.dbank.com/c05qyg3yir Struts2的输入校验 Struts2输入校验.执行流程: 1)首先进行类型转换 2)然后进行输入校验 ...

  4. 基于Annotation的输入校验

    这种基于Annotation的输入校验实质上也属于Struts 2"零配置"特性的部分,它允许使用Annotation来定义每个字段应该满足的规则,Struts 2在com.ope ...

  5. struts中简单的校验

    Struts中简单的校验 "计应134(实验班) 凌豪" Struts2校验简要说明:struts2中通常情况下,类型转换要在数据校验之前进行.类型转换其实也是基本的服务器端校验, ...

  6. 使用Struts2验证框架实现输入校验

    学习了<Struts2权威指南>中关于Struts2的输入校验,自己动手测试了一把,也遇到一些问题,在这里记录一下.直接看代码: login.jsp [xhtml] view plainc ...

  7. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  8. Struts2输入校验

    1.校验表单信息是否符合常规(输入校验) ActionSupport实现接口Validateable,接口中定义方法validate,需要 Override方法validate 2.校验类型转换(类型 ...

  9. Struts2输入校验之validate输入校验方式

    一.在Web系统项目中有大量的视图页面需要用户自行输入很多数据.这些数据的类型有很多种.为了防止某些客户的恶意输入以及对Web项目的恶意破坏,必须引入输入校验,像Windows操作系统的防火墙一样把一 ...

最新文章

  1. python训练好的图片验证_利用keras加载训练好的.H5文件,并实现预测图片
  2. Windows环境下IOCP和SELECT模型性能比较
  3. BUUCTF-Reverse:新年快乐 + 加壳与脱壳
  4. BufferedInputStream_字节缓冲输入流
  5. 理解流量监管和整形的关键算法—令牌桶
  6. 联想y7000p电池固件下载_联想拯救者Y7000P安装双系统win10+ubuntu18.04
  7. BOS v2.0后台管理系统界面通用解决方案
  8. 艺电模拟城市开源代码读后感
  9. python实现GPS经纬度转换
  10. 三星固态Dell版的960g的sm863a硬盘
  11. Android蜗牛睡眠技术文档,蜗牛睡眠app 问题提问集中贴 常见问题汇总
  12. 【图像检测-缺陷检测】基于灰度共生矩阵实现痕迹检测matlab代码
  13. CSDN每日打卡已经2周,进展如何?,【2021Python最新学习路线】
  14. 2022年简历石沉大海,软件测试行业当前找工作有多难?
  15. Micropython——关于通信I2C协议的应用和原理讲解
  16. 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
  17. 【Java 并发编程】我们为什么要学并发编程?
  18. 内存检测工具sanitize
  19. OSChina 周日乱弹 —— 种族不同,禁止交往
  20. 我的世界服务器娘怎么修改配置,转【教学】Pixelmon配置文件修改指南

热门文章

  1. Java项目:就业管理系统设计和实现(java+springboot+ssm)
  2. python十大标准_python对标准类型的分类
  3. vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题
  4. python 乒乓球_python乒乓球
  5. 【java】关于面向对象优点的个人理解
  6. php column not found,java.sql.SQLException: Column 'cloumn name' not found.
  7. git 修改标签名称_Git常用命令汇总,希望能帮到你
  8. 带有中文的字符串各个字符的获取c++程序
  9. HTML POST提交参数给PHP并返回json,上传execl文件
  10. swift判断iPhone 各种型号