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个步骤:

  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的校验框架知道即可

原文地址:https://www.cnblogs.com/Vincent-yuan/p/11154682.html

时间: 2024-10-31 09:39:53

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

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

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.security.InvalidKeyException:illegal Key Size 也就是echostr校验失败,请您检查是否正确解密并输出明文echostr这个错误 企业微信登陆地址http://qy.weixin.qq.com/ 配置成功以后 Servlet public void doGet(Htt

Struts2之数据标签(二)

Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace.如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来. (1).此标签的属性: - id:可选属性,该属性将会作为该

Struts2之数据校验

时间:2017-1-11 11:09 --Struts2提供的数据校验 在开发中,请求参数是需要校验的:    客户端:过滤正常用户的错误操作,通过JS代码完成    服务器:Java代码 Struts2提供的校验是服务器端校验. 校验方式分为两种:    1.手动校验(编码校验)    2.配置校验(自动校验,基于Annotation,基于XML) 1.手动校验:    要求:Action类必须继承ActionSupport,需要重写validate()方法(是Validateable接口中的

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

转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种: 参考:struts2:数据校验,通过Action中的validate()方法实现校验,图解 第二种: 使用validate()方法校验时,如果Web应用中存在大量Action就需要多次重写val

Struts2之数据标签(一)

一.Struts2的数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能.数据标签主要包括:property.set.push.param.bean.action.include.url.i18n和text.date及debug标签等. 1.property标签:用于输出value属性指定的值.可以与<s:bean>标签结合使用,一个是给bean赋值,一个是从bean中读取值. (1).如果没有指定value属性,默认输出valueStack(

Java面试-Struts2

1  Struts2工作原理 一个请求在Struts2框架中的处理大概分为下面几个步骤: 1.client初始化一个指向Servlet容器(比如Tomcat)的请求: 2.这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器.这个过滤器对于Struts2和其它框架的集成非常有帮助,比如:SiteMeshPlugin): 3.接着FilterDispatcher被调用.FilterDispatcher询问ActionMapper来决

java的二分法查找数据

Java二分法查找的源代码:    二分查找是一种高效率线性表的查找算法.在查找时必须将线性表中的关键词排好序.基本思路是:先断定线性表的中心方位 mid=(first+last)/2:对比所要查找的关键词 key与中心方位的关键词的巨细,假如比key和mid.key持平则回来: key比mid.key大(假定为升序)这所要查找的关键词在mid和last之间:否则在first与mid之间.持续按照上面办法查找中心元素,直到找到为止.    详细完成如下package com.cgogo; /**

Java虚拟机 运行时数据区

Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器(Program Counter Register) 它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器. 每一条JVM线程都有自己的PC寄存器,各条线程之间互不影响,独立存

struts2 校验数据的有效性 2种方式

Struts2的数据校验: 数据的校验分为客户端校验和服务器端两种: 客户端校验:JS完成的校验.(为了提升用户体验.减少用户的输入错误) 服务器端校验:在后台的校验.(必须的.) 手动编码进行校验: 1.编写一个Action,这个Action必须继承ActionSupport. 2.重写validate方法:---针对Action中的所有方法进行校验. @Override // Struts2提供的数据校验的方法: public void validate() { if(username ==