Struts2数据校验

1.表单数据的验证:

前台验证:主要是通过JS验证, 表达数据是否合法!

后台验证:通过后台java代码进行验证!

Struts也提供了数据效验的方式!

  Struts数据效验,通过拦截器完成:<interceptor      name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

①:代码方式验证Action中所有的方法:

    步骤:

    1. 搭建struts环境

    2. login.jsp

<s:form action="validation_ex" method="post" theme="simple">
    账户:<s:textfield name="username"/><s:fielderror name="username"></s:fielderror>
    密码:<s:password name="pwd"/>
    <s:submit value="提交"></s:submit>
</s:form>

    3.ValidationAction.java

public class ValidationAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private String username;
    private String pwd;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String execute() throws Exception {
        return SUCCESS;
    }
    public void validate() {
        // 如果用户名为空,返回用户名不能为空
        if (username == null||"".equals(username)) {
            super.addFieldError(username, "用户名不能为空");
        }
        // 如果密码为空,返回密码不能为空
        if (pwd == null||"".equals(pwd)) {
            super.addFieldError(pwd, "密码不能为空");
        }
    }
    public String add(){
        System.out.println("ValidationTest.add()");
        return SUCCESS;
    }
}

   4.Struts.xml配置:

<struts>
    <include file="struts-default.xml"></include>
    <package name="validations" extends="struts-default">
        <action name="validation_ex"  class="com.gxxy.filetransport.validationtext.ValidationTest" method="execute">
            <result>/JSP/validation/mainpage.jsp</result>
            <result name="input">/JSP/validation/register.jsp</result>
        </action>
        <action name="validation_add"  class="com.gxxy.filetransport.validationtext.ValidationTest" method="add">
            <result>/JSP/validation/register.jsp</result>
        </action>
    </package>
</struts>    

注意:这样写,validate会验证Action类中所有的方法.

②:代码方式验证Action类中指定的方法:

    写验证方法命名规则:

    validate + 要验证的方法名

    如:

    ---->public void validateExecute() {

    只会验证当前action的execute方法!

③:XML方式验证Action类中所有的方法:

    总结代码方式验证:繁琐,设计很多重复的验证逻辑!例如:非空验证、数值验证、email、等。

    Struts对于常用的验证,进行了封装,即提供了验证器, 验证指定的常用业务逻辑!

    Struts提供的所有验证器:

    路径:-->xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml

<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>

    如果写xml,从而定义验证规则:

    1)XML文件名称语法: ActionClassName-validation.xml

    注意:此xml需要与当期要验证的action在同一个目录:

    举例:ValidationAction-validation.xml

    2) 写XML

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE validators PUBLIC
          "-//Apache Struts//XWork Validator 1.0.3//EN"
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
<!-- 验证的每一个字段用field表示 -->
<field name="username">
<!-- 指定使用的验证器 -->
    <field-validator type="requiredstring">
    <!-- 验证失败的错误提示信息 -->
        <message>用户名不能为空</message>
    </field-validator>
</field>
<!-- 验证的每一个字段用field表示 -->
<field name="pwd">
<!-- 指定使用的验证器 -->
    <field-validator type="requiredstring">
    <!-- 验证失败的错误提示信息 -->
        <message>密码不能为空</message>
    </field-validator>
</field>
</validators>

④:XML验证Action中指定的方法:

  与上面xml验证方式大致相同: 验证xml文件内容不变;

  文件命名:

  语法:ActionClassName-ActionName-validation.xml

  举例:ValidationAction-validation_ex-validation.xml-validation.xml

验证ValidationAction中的execute方法

验证总结

代码:

 ①:重写validate()   ,  验证action所有方法

  ②:Validate方法名(),  验证指定“方法名”的方法

Xml:

   ①:验证所有方法: ActionClassName-validation.xml

   ②:验证指定方法: ActionClassName-actionName-validation.xml

代码验证:比较灵活,可以满足所有的需求.但是它比较繁琐,要写重复的验证判断逻辑!适用于表单字段较少的情况用!

XML验证:通用,但不够灵活; 可以验证特定简单的业务.适合于验证表单字段较多,可以大大简化代码!缺点就是(配置文件过多)

验证错误处理

Struts在进行数据效验的时候,验证失败,会返回input视图,要求我们要在struts.xml中配置input视图对应的错误页面!

时间: 2024-10-19 23:14:12

Struts2数据校验的相关文章

struts2 之 struts2数据校验

1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2.  Struts2提供了后端验证机制.有两种方式来实现,一种是通过硬编码来实现,一种是通过校验框架来实现.在struts2如果使用struts2提供校验机制,那么必须继承ActionSuport类.该类中有一个vaildete方法,在处理的action类中重写该方法,那么在执行所有方法的时候,会执行validate方法.va

深入分析JavaWeb Item46 -- Struts2数据校验与国际化

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如

深入分析JavaWeb 46 -- Struts2数据校验与国际化

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如

9.struts2数据校验

手动编码方式: 1.数据校验包含两种方式,第一种是手动编码完成数据校验方式,第二种是通过配置文件完成数据校验方式(重点掌握这种方式). 2.手动编码校验方式 * 开发的步骤 > 步骤一: 封装数据 > 步骤二: 实现校验Action ,必须继承ActionSupport 类 > 步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验 this.addFieldError (ActionSupport提供) > 步骤四: 在jsp中 通过 <s:fieldE

Struts2数据校验方法

方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupport类中的validate()方法. 优点:包含this.addFieldError()方法,一旦调用,Action结束. 缺点:(1)需要继承框架中的ActionSupport类(侵入性). (2)方法1的(1)缺点. 3.使用多个validateXxx()方法,Xxx为方法名,首字母大写. 优

Struts2 数据校验之四兄弟

现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会. 有了这验证就很好的保证了我们的信息的准确性和安全性. 接下来我给大家讲解一下用struts2怎么实现页面上简单的拦截. 方法一: 用execute()方法来实现 1.0创建一个UserInfo类 package cn.struts.entity; /** * Created by accp on 2017/3/6. */ public class UserInfo { /

Struts2学习第三天——保存登陆信息及数据校验

在JSP中服务器端保存数据的作用域通常有request.session.application,它们对应的Servlet API分别是HttpServletRquerst.HttpSession.ServletContext.同样在Struts2的控制器中也需要访问这些作用域. Struts2提供了一个ActionContext类,该类被称为Action上下文或者Action环境,Action可以通过该类访问最常用的ServletAPI. ServletAPI有多种访问方式: 1. Servle

Struts2之数据校验

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

Struts2(五)数据校验

一.概述 在提交表单数据时,如果数据需要保存到数据库,空输入等可能会引发一些异常,为了避免引起用户的输入引起底层异常,通常在进行业务逻辑操作之前,先执行基本的数据校验. 下面通过两种方式来阐述Struts 2的数据校验功能. 二.重写validate方法 我们编写的Action一般继承与ActionSupport,而ActionSupport不仅实现了Action接口,还实现了Validatable接口,提供了数据校验功能.在Validatable接口中定义一个validate方法,重写该方法,