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

输入校验分为客户端校验和服务器校验。Struts2可以同时完成这两种校验。

All input is evil.——《Writing Secure Code》

手动完成输入校验:

  1. 重写Action中的validate()方法(继承自ActionSupport类)
  2. 重写Action中的validateXxx()方法并在struts.xml中配置,validateXxx()方法先于validate()方法被调用

流程:

  1. 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成Action的属性值
  2. 在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversationError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程没有异常信息,直接进入第3步
  3. 通过反射调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名
  4. 调用Action类里的validate()方法
  5. 如果经过上面4步都没有出现fieldError,将调用Action里处理用户请求的处理方法;如果出现了fieldError,系统将转入input逻辑视图所指定的视图资源

基本输入校验(推荐):

  1. 编写校验规则文件(XML配置文件),文件名命名方式为<Action名字>-validation.xml,并于Action类文件保存在相同路径下。
  2. 为个别处理逻辑检验的文件名命名方式为<Action名字>-<处理方法名>-validation.xml,同样要与Action类文件保存在同一路径下。
  3. 国际化提示信息(略)
  4. 使用客户端校验,使用Struts表单标签,并增加validate="true"属性
  5. 检验文件的搜索规则,BaseAction-validation.xml→BaseAction-别名-validation.xml→XxxAction-validation.xml→XxxAction-别名-validation.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 name="字段名">
        <field-validator type="required" [short-circuit="true"]>
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 必填字符串校验 -->
    <field name="字段名">
        <field-validator type="requiredstring" [short-circuit="true"]>
            <param name="trim">默认为true</param>  <!-- 是否在检验前截断被检验属性值前后的空白 -->
            <message key="没有填写密码!" />
        </field-validator>
    </field>

    <!-- 整数校验 -->
    <field name="字段名">
        <field-validator type="int" [short-circuit="true"]>
            <param name="min">最小值</param>
            <param name="max">最大值</param>
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 日期校验 -->
    <field name="字段名">
        <field-validator type="date" [short-circuit="true"]>
            <param name="min">1990-01-01</param>
            <param name="max">2010-01-01</param>
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 表达式校验 -->
    <validator type="expression" [short-circuit="true"]>
            <param name="expression">逻辑表达式</param>  <!-- 返回false则校验失败,输出信息 -->
            <message>错误提示信息</message>
    </validator>

    <!-- 字段表达式校验 -->
    <field name="字段名">
        <field-validator type="fieldexpression" [short-circuit="true"]>
            <param name="expression">逻辑表达式</param>  <!-- 返回false则校验失败,输出信息 -->
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 邮件地址校验 -->
    <field name="字段名">
        <field-validator type="email" [short-circuit="true"]>
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 网址校验 -->
    <field name="字段名">
        <field-validator type="url" [short-circuit="true"]>
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- Visitor校验:校验Action类里的非基本属性 -->
    <field name="字段名">
        <field-validator type="visitor" [short-circuit="true"]>
            <param name="context">字段名Context</param>  <!-- 调用Action-字段名Context-validation.xml -->
            <param name="appendPrefix">true</param>  <!-- 指定检验失败后提示信息是否添加下面的前缀 -->
            <message>提示信息前缀</message>
        </field-validator>
    </field>

    <!-- 转换校验 -->
    <field name="字段名">
        <field-validator type="conversion" [short-circuit="true"]>
            <param name="repopulateField">true</param>  <!-- 转换失败后,返回输入页仍保留原来的错误输入 -->
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 字符串长度校验 -->
    <field name="字段名">
        <field-validator type="stringlength" [short-circuit="true"]>
            <param name="minLength">最小值</param>
            <param name="maxLength">最大值</param>
            <param name="trim">默认为true</param>
            <message>错误提示信息</message>
        </field-validator>
    </field>

    <!-- 正则表达式校验 -->
    <field name="字段名">
        <field-validator type="regex" [short-circuit="true"]>
            <param name="expression">正则表达式</param>
            <param name="caseSensitive">默认为true</param>  <!-- 是否区分大小写 -->
            <message>错误提示信息</message>
        </field-validator>
    </field>    

</validators>
时间: 2024-10-16 20:23:45

【毕设进行时】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提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 校验失败后将Struts2将自动返回名为“input”的Result,如需制定错误显示页面,则通过struts.xml来配置“input”的Result.在Result视图中使用<s:fielderror/>标签即可输入校验失败的提示信息. User.java package models; import java.util.Dat

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

【毕设进行时】OGNL表达式

参考链接:http://commons.apache.org/proper/commons-ognl/ 表达式 常量表达式 字符串常量,用单引号或双引号引用. 字符常量,用单引号引用. 数值常量,除了Java中的[int][long][float]和[double],还有以“b”或“B”作为后缀的[BigDecimal]型和以“h”或“H”作为后缀的[BigInteger]型. 布尔值常量. null 引用属性 Map中的属性即为key. List和Array中的属性即为index. 其他类型的

笔记:Struts2 输入校验

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