1.使用struts2时,有时候需要对数据进行相关的验证。如果对数据的要求比较严格,或对安全性要求比较高时,前端 js 验证还不够,

需要在后端再进行一次验证,保证数据的安全性。

2.struts2提供了两种机制来进行后端的数据验证。

  • 编程方式
  • 验证框架

3.通过编程方式来进行数据检验需要继承ActionSupport类。在ActionSupport类中有一个validate方法,在该方法中实现数据校验。如果要通过编程方式进行校验,那么需要在处理类的Action中重写validate方法。在action的执行方法中,先执行validate方法,再执行处理业务方法。

4.实现案例

UserAction:

public class UserAction extends ActionSupport{
private String name;
private String pwd;
private int age;
/**
* 在validate方法中 进行数据校验
* 在validate方法中 如果没有添加错误信息,那么验证通过
*/
public void validate() {
System.out.println("执行validate方法");
if(name==null||name.length()<4){
//验证不通过
this.addFieldError("name", "输入的用户名不合法");
}
if(pwd==null||pwd.length()<6){
this.addFieldError("pwd", "输入的密码长度不合法");
}
if(age<0||age>256){
this.addFieldError("age", "输入的年龄不合法");
} }
@Override
public String execute() throws Exception {
System.out.println("执行execute");
System.out.println("name="+name);
System.out.println("pwd="+pwd);
System.out.println("age="+age);
return Action.SUCCESS;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

Struts.xml

 <action name="add" class="cn.sxt.action.UserAction">
<result name="input">/add.jsp</result>
<result>/success.jsp</result>
</action>

Jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>数据校验</title>
</head>
<body> <form action="add.action" method="post">
用户名:<input type="text" name="name"/><s:fielderror fieldName="name"></s:fielderror><br>
密码:<input type="password" name="pwd"/><s:fielderror fieldName="pwd"></s:fielderror><br>
年龄:<input type="text" name="age"/><s:fielderror fieldName="age"></s:fielderror><br>
<input type="submit" value="提交"/>
</form>
</body>
</html>

总结

实现 action 处理类中的数据校验有3个步骤:

  1. 在处理类中重写validate方法,并将验证规则写在这个方法中
  2. 在action的配置中,加上结果为input的配置
  3. 在jsp页面中,需要使用struts2的<s:fieldError>标签显示错误信息

注意:web.xml中设置成 /* 的形式,要不然进不了action

5. 在struts2中通过validate方法来验证数据会有这样的问题:即,当一个Action中处理方法比较多时,所有的验证方法都放入validate中将会不合适。

如果有多个处理方法需要验证,那么需要为每个方法都添加其相应的验证方法。规则为处理方法前加validate并且将处理方法首字母大写。如:处理方法为 add , 那么器验证方法为 validateAdd() ;这样在执行 add.action 时会先执行 validateAdd() ,再执行 validate() ,再执行add() ; 也就是说,当一个Action处理类中有多个处理方法时,需要分别为每个方法添加对应的验证方法。

UserAction

public class UserAction extends ActionSupport{
private String name;
private String pwd;
private int age;
public void validateAdd(){
System.out.println("执行validateAdd");
if(name==null||name.length()<4){
//验证不通过
this.addFieldError("name", "输入的用户名不合法");
}
if(pwd==null||pwd.length()<6){
this.addFieldError("pwd", "输入的密码长度不合法");
}
if(age<0||age>256){
this.addFieldError("age", "输入的年龄不合法");
}
}
/**
* 在validate方法中 进行数据校验
* 在validate方法中 如果没有添加错误信息,那么验证通过
*/
public void validate() {
System.out.println("执行validate方法");
}
public String add() throws Exception {
System.out.println("执行add");
System.out.println("name="+name);
System.out.println("pwd="+pwd);
System.out.println("age="+age);
return Action.SUCCESS;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

6. 由于验证数据的规则随着系统需求可能会发生变更。如果采用硬编码的方式来验证数据,那么规则发生改变时,需要从新编写代码。有可能会引入新的bug进入系统。这种方式不是很好,所以struts2除了编程验证外还提供了一种验证框架来进行数据校验。

7. Struts2校验框架的使用:

  a) 在action所在包下提供一个验证配置文件即可,名称为actionName--validation.xml

  b) 在配置文件中需要为每个表单域提供验证规则

  c) 处理类要继承ActionSupport

验证规则:

<validators>
<!-- 一个field表示验证一个表单域 -->
<field name="name">
<!--
field-validator 表示验证器 struts2提供了很多默认的验证器
-->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入用户名</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">10</param>
<message>用户名在${minLength}到${maxLength}之间</message>
</field-validator>
</field>
<field name="pwd">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入密码</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<message>密码最少是6</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">
<message>必须输入年龄</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">256</param>
<message>年龄必须在1到256之间</message>
</field-validator>
</field>
</validators>

上面struts2的校验框架知道即可

java之struts2之数据检验的更多相关文章

  1. 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决

    微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...

  2. 使用Struts2实现数据校验

    使用Struts2实现数据校验 为什么需要数据校验呢?答案很简单,假如当你登录想要京东,这时就需要数据校验了如果不输入用户名的话,那么就不会登陆成功,并且会提示出"请输入用户名"的 ...

  3. (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

    转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml)   根据输入 ...

  4. struts2:数据校验,通过XWork校验框架实现(validation.xml)

    根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种: 参考:struts2:数据校验,通过Action中的validate()方法实现校 ...

  5. struts2:数据校验,通过Action中的validate()方法实现校验,图解

    根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种 Struts2中提供了一个com.opensymphony.xwork2.Valid ...

  6. struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)

    前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解 如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通 ...

  7. kettle学习笔记(十)——数据检验、统计、分区与JS脚本

    一.概述 数据剖析和数据检验: 用于数据的检查.清洗 . 统计步骤: 提供数据采样和统计的功能 分区: 根据数据里某个字段的值,拆分成多个数据块.输出到不同的库表和文件中. 脚本: Javascrip ...

  8. Struts2之数据标签(二)

    Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签能够同意在JSP页面中 ...

  9. Java面试-Struts2

    1  Struts2工作原理 一个请求在Struts2框架中的处理大概分为下面几个步骤: 1.client初始化一个指向Servlet容器(比如Tomcat)的请求: 2.这个请求经过一系列的过滤器( ...

随机推荐

  1. lower_bound( )和upper_bound( )怎么用嘞↓↓↓

    lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begin,end,num):从数 ...

  2. 数据结构---公交线路提示系统(Java后台+excel表格+web前端)

     系统大致流程: index.jsp输入站名(点击“出示站点信息”,跳转list.jsp读取表格):后台通过站名获得id:getIdbyname(String name)将id反馈至dijkstra( ...

  3. python爬虫 TapTap

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 对象 - TapTap TapTap 是一个高品质手游玩家社区, ...

  4. Net core学习系列(六)——Net Core路由

    一.概述 路由主要有两个主要功能: 1.将请求的URL与已定义的路由进行匹配,找到该URL对应的处理程序并传入该请求进行处理. 2.根据已定义的路由生成URL 这两个功能看起来这两个是相反的. A.路 ...

  5. 范仁义html+css课程---4、文本标签

    范仁义html+css课程---4.文本标签 一.总结 一句话总结: 文本标签大致掌握一下,做到它站在你对面的时候最好认得,认不得也没关系,直接百度 1.ins标签.u标签和del标签 作用? ins ...

  6. linux学习(3):linux常用命令大全

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  7. Join Reorder优化 - 论文摘要

    Query Simplification: Graceful Degradation for Join-Order Optimization 这篇的related work可以参考,列的比较全面, Q ...

  8. windows server2012 R2安装python3.x版本报错0x80240017

    windows server2012 R2安装python3.x版本报错0x80240017 环境: windows server 2012 R2系统 问题: 安装python3.5版本时候出现错误0 ...

  9. leetcode 10. Regular Expression Matching 、44. Wildcard Matching

    10. Regular Expression Matching https://www.cnblogs.com/grandyang/p/4461713.html class Solution { pu ...

  10. leetcode 266.Palindrome Permutation 、267.Palindrome Permutation II

    266.Palindrome Permutation https://www.cnblogs.com/grandyang/p/5223238.html 判断一个字符串的全排列能否形成一个回文串. 能组 ...