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的校验框架知道即可
java之struts2之数据检验的更多相关文章
- 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决
微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...
- 使用Struts2实现数据校验
使用Struts2实现数据校验 为什么需要数据校验呢?答案很简单,假如当你登录想要京东,这时就需要数据校验了如果不输入用户名的话,那么就不会登陆成功,并且会提示出"请输入用户名"的 ...
- (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)
转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入 ...
- struts2:数据校验,通过XWork校验框架实现(validation.xml)
根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种: 参考:struts2:数据校验,通过Action中的validate()方法实现校 ...
- struts2:数据校验,通过Action中的validate()方法实现校验,图解
根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种 Struts2中提供了一个com.opensymphony.xwork2.Valid ...
- struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解 如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通 ...
- kettle学习笔记(十)——数据检验、统计、分区与JS脚本
一.概述 数据剖析和数据检验: 用于数据的检查.清洗 . 统计步骤: 提供数据采样和统计的功能 分区: 根据数据里某个字段的值,拆分成多个数据块.输出到不同的库表和文件中. 脚本: Javascrip ...
- Struts2之数据标签(二)
Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签能够同意在JSP页面中 ...
- Java面试-Struts2
1 Struts2工作原理 一个请求在Struts2框架中的处理大概分为下面几个步骤: 1.client初始化一个指向Servlet容器(比如Tomcat)的请求: 2.这个请求经过一系列的过滤器( ...
随机推荐
- 咕泡学院java架构vip课程
1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...
- Linux 上配置 AG
SQL Server Always On Availability Group 配置步骤:配置三台 Linux 集群节点创建 Availability Group配置 Cluster Resource ...
- Java Spring 使用 Redis
在 Java 中使用 Redis 需要使用 Jedis.jar github 页面 https://github.com/xetorthio/jedis javadocs http://xetorth ...
- 帝国cms7.5整合百度编辑器ueditor教程
1.根据自己使用的帝国cms版本编码下载对应的ueditor版本 下载地址 http://ueditor.baidu.com/website/download.html#ueditor 2.解压附件, ...
- plsql 如何导入excel数据?
oracle 导入excel数据? 通过plsql实现 1.准备工作 Excel中的字段名称,必须和表结构字段一 一对应 下面以tdoctor_apply表为例,进行演示 表结构 Excel表数据 ...
- Mysql索引面试题
转载:https://mp.weixin.qq.com/s/_bk2JVOm2SkXfdcvki6-0w 本文来自一位不愿意透露姓名的粉丝投稿,由Hollis整理并"还原"了面试现 ...
- 多线程 interrupt()方法
java interrupt()方法只是设置线程的中断标记,当对处于阻塞状态的线程调用interrupt方法时(处于阻塞状态的线程是调用sleep, wait, join 的线程),会抛出Interr ...
- 第10组 Alpha冲刺(5/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...
- centos 添加/删除用户和用户组
centos系统添加/删除用户和用户组 在centos中增加用户使用adduser命令而创建用户组使用groupadd命令,这个是不是非常的方便呀,其实复杂点的就是用户的组与组权限的命令了,下 ...
- java开源工具包-Jodd框架
java开源工具包-Jodd框架 / 2019-07-24 Jodd是一个Java工具包和微型框架,Jodd 工具包含一些实用的工具类和小型框架,增强了 JDK 提供很多强大的功能,可以帮助实现 ...