Struts2的输入校验

Struts2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验。

校验失败后将Struts2将自动返回名为“input”的Result,如需制定错误显示页面,则通过struts.xml来配置“input”的Result。在Result视图中使用<s:fielderror/>标签即可输入校验失败的提示信息。

User.java

package models;

import java.util.Date;

import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;

public class User {
    private String username;
    private String password;
    private Date birth;

    public String getUsername() {
        return username;
    }

    // 基于注解的输入校验
    @RequiredStringValidator(key = "username.requried", message = "")
    @RegexFieldValidator(regex = "\\w{4,25}", key = "username.regex", message = "")
    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return getUsername().hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (obj != null && obj.getClass() == User.class) {
            User objUser = (User) obj;
            if (objUser.getUsername().equals(this.getUsername())) {
                return true;
            }
        }
        return false;
    }
}

login.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><s:text name="login page"></s:text></title>
</head>
<body>
    <s:form action="login.action" validate="true">
        <s:textfield name="user.username" key="username" />
        <s:password name="user.password" key="password" />
        <s:textfield name="user.birth" key="birth" />

        <s:submit value="login" />
    </s:form>
</body>
</html>

LoginAction.java

package actions;

import models.User;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

    private User user;

    public User getUser() {
        return user;
    }

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

    @Override
    public String execute() throws Exception {
        if (getUser().getUsername().equals("yangys")
                && getUser().getPassword().equals("666666")) {
            return SUCCESS;
        }
        return ERROR;
    }

}

Struts2的校验文件规则为:每个Action都有一个校验文件,该文件的文件名应该遵守的规则<ActionName>-validation.xml

LoginAction-validation.xml

<?xml version="1.0" encoding="GBK"?>
<!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.username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="user.username.requried"/>
        </field-validator>
    </field>
    <field name="user.password">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="user.password.requried"/>
        </field-validator>
        <field-validator type="regex">
            <param name="regex"><![CDATA[(\w{4,25})]]></param>
            <message key="user.password.regex"/>
        </field-validator>
    </field>
    <field name="user.birth">
        <field-validator type="date">
            <param name="min">1900-01-01</param>
            <param name="max">2016-02-14</param>
            <message key="user.birth.range"/>
            <!-- <message>生日必须在1900-01-01到2016-02-14之间</message> -->
        </field-validator>
    </field>
</validators>

其中message标签内为校验失败后的提示信息,可以直接写在<message></message>标签内,也可以通过<message key=""/>从国际化资源文件中提取显示。

LoginAction_zh_CN.properties(native2ascii处理过)

user.username.requried=\u5FC5\u987B\u8F93\u5165\u7528\u6237\u540D
user.password.requried=\u5FC5\u987B\u8F93\u5165\u5BC6\u7801
user.password.regex=\u5BC6\u7801\u5FC5\u987B\u662F\u5B57\u6BCD\u6216\u6570\u5B57\uFF0C\u957F\u5EA6\u57284\u523025\u4E4B\u95F4
user.birth.range=\u751F\u65E5\u5FC5\u987B\u5728${min}\u548C${max}\u4E4B\u95F4
时间: 2024-10-07 15:21:59

Struts2的输入校验的相关文章

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装

Struts2的输入校验(2)——客户端校验

Struts2的输入校验(2) --客户端校验 Struts2客户端校验的使用: (1)使用Struts2的标签生成输入页面的表单: (2)为该<s:form>元素添加validate="true"属性 示例: (1)第一个输入页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

Struts2的输入校验(1)——校验规则文件的编写

Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: 客户端校验:过滤正常用户的误操作,使用JavaScript代码完成: 服务器端校验:组织非法数据的输入,是整个应用的最后防线,在应用中通过编程的方式实现. 使用Struts2的校验框架进行校验时,无须对程序的代码进行改变,只需要编写校验规则文件即可,校验规则文件制定每个表单域应该满足怎样的输入规则.

Struts2框架(8)---Struts2的输入校验

Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人. 服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担. 所以一般在我们开发中,是客户端和服务器端校验相结合作用的. 那这篇文章,我只讲服务器端校验,在Struts2支持两种校验方式: 代码校验

【毕设进行时】Struts2的输入校验

输入校验分为客户端校验和服务器校验.Struts2可以同时完成这两种校验. All input is evil.——<Writing Secure Code> 手动完成输入校验: 重写Action中的validate()方法(继承自ActionSupport类) 重写Action中的validateXxx()方法并在struts.xml中配置,validateXxx()方法先于validate()方法被调用 流程: 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属

Struts2的输入校验流程(学习记录)

通过阅读李刚老师的Struts2.1 权威指南,关于其中关于Strus2的输入校验部分,这里做一下记录. Struts 2的输入校验需要经过如下几个步骤. 1.类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成action的属性值. 2.在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步:如果转换过程没有异常信息,则直接进入第3步. 3.调用Struts

JavaEE----使用Struts2的输入校验之手动编码校验

Struts.xml <action name="login" class="com.cug.demo04.LoginAction"> <result>/demo04/success.jsp</result> <result name="input">/demo04/login.jsp</result> </action> <action name="logi

笔记:Struts2 输入校验

Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31.jar 复制到 WEB-INF/lib 目录中 校验规则文件 校验规则文件命名格式:ActionName-validation.xml,其中 ActionName 为校验的 Action名称,后面的 -validation.xml 为固定字符串,并将校验规则文件保持到 Action 相同的路径下 S

struts2(七)输入校验

输入校验简述 由于Web应用的开放性,网络上所有浏览者都能够自由地使用该应用,这样该应用通过输入页面收集的数据可能很复杂,不仅会包含正常用户的误输入,还可能包含恶意用户的恶意输入.因此应用系统需要将这些非法输入阻止在应用之外. 异常输入,可能导致系统非正常中断,严重者会导致系统崩溃.应用程序需要正常处理表现层接受的各种数据,通常的做法是遇到异常输入时应用程序直接返回,提示浏览者必须重新输入,也就是将那些异常输入过滤掉.绝对异常输入的过滤,就是输入校验,也称为数据校验. 输入校验分为客户端校验和服