Struts2 数据校验之四兄弟

现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。

有了这验证就很好的保证了我们的信息的准确性和安全性。

接下来我给大家讲解一下用struts2怎么实现页面上简单的拦截。

方法一:

用execute()方法来实现

1.0创建一个UserInfo类

package cn.struts.entity;

/**
 * Created by accp on 2017/3/6.
 */
public class UserInfo {
    //用户名
    private String name;
    //密码
    private String pwd;
    //电话
    private String phone;

    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 String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

2.0创建一个ExecuteAction继承ActionSupport

package cn.struts.action;

import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Created by accp on 2017/3/6.
 */
public class ExecuteAction extends ActionSupport {

    //用户对象
    private UserInfo user;
    //确认密码
    private String okpwd;

    @Override
    public String execute() throws Exception {
        //判断用户名是否为空
        if (user.getName().length() == 0) {
            addFieldError("name", "用户名不能为空");
        }
        //判断密码是否为空
        if (user.getPwd().length() == 0) {
            addFieldError("pwd", "密码不能为空");
        }
        //判断电号码是否为空
        if (user.getPhone().length() == 0) {
            addFieldError("phone", "电话不能为空");
        }
        //判断两次输入的密码是否一致
        if(!user.getPwd().equals(okpwd)){
            addFieldError("userpwd", "两次密码不一致");
        }
        //这是最重要的判断
        //判断上面是否还存在没有通过的验证
        if (this.hasFieldErrors()) {
            return "input";
        }
        return "success";
    }

    public UserInfo getUser() {
        return user;
    }

    public void setUser(UserInfo user) {
        this.user = user;
    }

    public String getOkpwd() {
        return okpwd;
    }

    public void setOkpwd(String okpwd) {
        this.okpwd = okpwd;
    }
}

3.0编写struts.xml

  <action name="executeAction" class="cn.struts.action.ExecuteAction">
            <result>/success.jsp</result>
            <result name="input">/index.jsp</result>
 </action>

4.0编写页面

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="execute" method="post">
    用户名:<input name="user.name"><br/>
    电话:<input name="user.phone"><br/>
    密码:<input name="user.pwd"><br/>
    确认密码:<input name="okpwd"><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

success.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>成功页面</title>
</head>
<body>
欢迎你:<s:property value="user.name"></s:property></body>
</html>

效果如下:

这些就是我们注册时常常碰到的提示!!!!

方法二:

用validate方法来进行验证

创建实体类我们在这里就省略了,直接创建ValidateAction

1.0ValidateAction继承ActionSupport ,重写了validate()方法

package cn.struts.action;

import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Created by accp on 2017/3/6.
 */
public class ValidateAction extends ActionSupport {
    private UserInfo user;
    private String okpwd;
    @Override
    public void validate() {
        //判断用户名是否为空
        if(user.getName().length()==0){
            addFieldError("name","用户名不能为空");
        }
        //判断密码是否为空
        if(user.getPwd().length()==0){
            addFieldError("pwd","密码不能为空");
        }
        //判断电话是否为空
        if(user.getPhone().length()==0){
            addFieldError("phone","电话不能为空");
        }
        //判断两次密码输入是否一致
        if(!user.getPwd().equals(okpwd)){
            addFieldError("userpwd", "两次密码不一致");
        }
    }

    public UserInfo getUser() {
        return user;
    }

    public void setUser(UserInfo user) {
        this.user = user;
    }

    public String getOkpwd() {
        return okpwd;
    }

    public void setOkpwd(String okpwd) {
        this.okpwd = okpwd;
    }
}

2.0struts.xml:

  <!--validate验证-->
        <action name="validate" class="cn.struts.action.ValidateAction">
            <result>/success.jsp</result>
            <result name="input">/index.jsp</result>
        </action>

我们只需要更改表单提交的名称即可。

3.0index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="validate" method="post">
    用户名:<input name="user.name"><br/>
    电话:<input name="user.phone"><br/>
    密码:<input name="user.pwd"><br/>
    确认密码:<input name="okpwd"><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

得到的效果跟上述方法一相同。

写到这里同学们有没有疑问?怎么没有验证长度,不可能我们注册或者登录时没有别的条件限制?

能想到这的都是经常上网站购物的..............

接下来我们讲解第三种方法

方法三:

上面我们也提到了可能有别的验证,比如说长度,格式等等之类的。在这里我们定义一个方法来实现。

1.0创建ValidateXxxAction继承ActionASupport

package cn.struts.action;

import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Created by accp on 2017/3/6.
 */
public class ValidateXxxAction  extends ActionSupport{

    private UserInfo user;
    private String okpwd;
    //定义方法来做验证
    public void validateRegist(){
        //用户名的长度
        if(user.getName().length()<6){
            addFieldError("name","用户名长度不能小于6位");
        }
    }
   //这里一定要注意:这个方法名称与上面自己定义的方法的后半部分相同
    public String regist(){
        return SUCCESS;
    }
    @Override
    public void validate() {
        //判断用户名是否为空
        if(user.getName().length()==0){
            addFieldError("name","用户名不能为空");
        }
        //判断密码是否为空
        if(user.getPwd().length()==0){
            addFieldError("pwd","密码不能为空");
        }
        //判断电话是否为空
        if(user.getPhone().length()==0){
            addFieldError("phone","电话不能为空");
        }
        //判断两次密码输入是否一致
        if(!user.getPwd().equals(okpwd)){
            addFieldError("userpwd", "两次密码不一致");
        }
    }

    public UserInfo getUser() {
        return user;
    }

    public void setUser(UserInfo user) {
        this.user = user;
    }

    public String getOkpwd() {
        return okpwd;
    }

    public void setOkpwd(String okpwd) {
        this.okpwd = okpwd;
    }
}

2.0struts.xml

<!--测试ValidateXxxAction -->
        <action name="validatexxx" class="cn.struts.action.ValidateXxxAction" method="regist">
            <result>/success.jsp</result>
            <result name="input">/index.jsp</result>
        </action>

3.0index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="validatexxx" method="post">
    用户名:<input name="user.name"><br/>
    电话:<input name="user.phone"><br/>
    密码:<input name="user.pwd"><br/>
    确认密码:<input name="okpwd"><br/>
    <input type="submit" value="提交">
</form>

</body>
</html>

效果图:

除了上述我们讲的这些验证方法之外,struts2框架自身也带有验证。

方法四:

1.0创建ValidateFramework继承ActionSupport

package cn.struts.action;

import cn.struts.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Created by accp on 2017/3/6.
 */
public class ValidateFramework extends ActionSupport {
    private UserInfo user;
    private String okpwd;

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public UserInfo getUser() {
        return user;
    }

    public void setUser(UserInfo user) {
        this.user = user;
    }

    public String getOkpwd() {
        return okpwd;
    }

    public void setOkpwd(String okpwd) {
        this.okpwd = okpwd;
    }
}

2.0编写ValidateFramework-validation.xml文件

下图是框架验证中验证器的类型图:

<!DOCTYPE
        validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

<validators>
    <!--判断用户名-->
    <field name="user.name">
        <!--自段不能为空-->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空</message>
        </field-validator>
        <!--判断长度是否符合-->
        <field-validator type="stringlength">
            <param name="maxLength">10</param>
            <param name="minLength">6</param>
            <message>用户名的长度必须在${minLength}到${maxLength}</message>
        </field-validator>
    </field>
    <!--判断密码和确认密码-->
    <field name="user.pwd">
        <field-validator type="requiredstring">
            <message>密码不能为空</message>
        </field-validator>
    </field>
    <field name="okpwd">
        <field-validator type="fieldexpression">
            <param name="expression">user.pwd==okpwd</param>
            <message>密码和确认密码必须一致</message>
        </field-validator>
    </field>
    <!--判断电话-->
    <field name="user.phone">        <filed-validator type="requiredstring">            <message>电话不能为空</message>        </filed-validator>
        <field-validator type="regex">
            <param name="regex">^(\d{3,4}-){0,1}(\d{7,8})$</param>
            <message>电话格式不正确</message>
        </field-validator>
    </field>
</validators>

3.0编写index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<form action="regist" method="post">
    用户名:<input name="user.name"><br/>
    电话:<input name="user.phone"><br/>
    密码:<input name="user.pwd"><br/>
    确认密码:<input name="okpwd"><br/>
    <input type="submit" value="提交">
</form>

</body>
</html>

效果图:

我简单的讲述了几种在struts2中常用的验证方法,在真实的开发模式中有许许多多的方法可以实现。在这里只是传递一种思想,没有多少技术含量..........

时间: 2024-10-15 08:30:54

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数据校验

1.表单数据的验证: 前台验证:主要是通过JS验证, 表达数据是否合法! 后台验证:通过后台java代码进行验证! Struts也提供了数据效验的方式! Struts数据效验,通过拦截器完成:<interceptor      name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/> ①:代码方式验证Actio

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方法,重写该方法,