java之struts2之数据检验
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个步骤:
- 在处理类中重写validate方法,并将验证规则写在这个方法中
- 在action的配置中,加上结果为input的配置
- 在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的校验框架知道即可
最新文章
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用
- iOS 多线程之GCD的使用
- AC算法 及python实现
- zk回车事件
- mysql 主从复制原理
- 34. 求e的近似值
- 用Opera Mobile调试手机版网页【转】
- ffmpeg内置aac编码器正式发布
- T-SQL
- mysql5.7.14安装与配置
- 14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
- 一、.NetCore EF 之命令行
- 使用composer安装php的相关框架
- 如何在 Linux 服务器上部署多个 Tomcat
- 软件项目第一次sprint评论
- python3-知识扩展扫盲易忘-generator的用法
- react-redux 知识点
- Unity---------Particle Effect详情
- PHP文件锁 解决并发问题
- scrapy实战1,基础知识回顾和虚拟环境准备
热门文章
- D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形
- ueditor div style被过滤 解决办法
- ubuntu之路——day11.7 end-to-end deep learning
- 退出状态、测试(test or [])、操作符、[]与[[]]区别
- NoSql数据库Redis系列(5)——Redis主从复制
- 团队作业-Beta冲刺(2/4)
- 第09组 Alpha冲刺(4/4)
- windows如何查看jdk的安装目录
- IDEA2019.2.1中文乱码解决
- 微信小程序上传单张或多张图片