zoukankan      html  css  js  c++  java
  • 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的校验框架知道即可

  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11154682.html
Copyright © 2011-2022 走看看