zoukankan      html  css  js  c++  java
  • [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

    内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

    本人互联网技术爱好者,互联网技术发烧友

    微博:伊直都在0221

    QQ:951226918

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    1.概述

      1)一个健壮的 web 应用程序必须确保用户输入是合法、有效的. 

      2)Struts2 的输入验证

        > 基于 XWork Validation Framework 的声明式验证:Struts2 提供了一些基于 XWork Validation Framework 的内建验证程序. 使用这些验证程序不需要编程, 只要在一个 XML 文件里对验证程序应该如何工作作出声明就可以了. 需要声明的内容包括:

             哪些字段需要进行验证  : 对 哪个Action 或者 model 的哪个字段进行验证

             使用什么验证规则 : 使用的验证规则

                   

              在验证失败时应该把什么样的出错消息发送到浏览器端 : 如果验证失败,转向哪一个页面,显示什么错误消息

      

        

          

        

        > 编程验证:通过编写代码来验证用户输入

    2.声明式的 helloword

        

      1)明确对哪一个Action 的那一个 字段进行验证:age

      2)关于配置文件:struts-2.3.15.3-allstruts-2.3.15.3appsstruts2-blankWEB-INFclassesexample 下的 Login-validation.xml 文件,复制到验证的action 所在的包下

      3)将配置文件名改为:把Login 改为当前的Action 的名字。如 TestValidation-validation.xml

      4)验证规则的编写:参照 /struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/int-validator.html

      

      5)若验证失败,则转向 input 的那个result ,所以需要配置 nama = input 的result。<result name="input">/validation/validation.jsp</result>

      6)如何显示错误消息:    

    1  <!-- 针对于 age 属性进行验证 。基于字段的验证-->
    2      <field name="age">
    3          <field-validator type="int">
    4              <param name="min">20</param>
    5              <param name="max">50</param>
    6              <message>Age needs to be between ${min} and ${max}</message>
    7          </field-validator>
    8      </field>

            > 若使用的是非simple 主题,则自动显示错误消息

        > 若使用的是非 simple 主题,则需要s:fiederror 标签或直接使用 EL 表达式

          ${fieldErrors.age[0]}  或者 <s:fieldError fieldName="age" ></s:fielderror>

        > 错误消息可以使用国际化

          <message  key="error.int" ></message>

             i18n.properties

          error.int= 自定义

      7) 问题:若一个Action 类可以应答多个action 请求,多个action 请求使用不同的验证规则,怎么办?

          > 为每一个不同的Action 请求定义其对应的验证文件:ActionClassName-AliasName-validation.xml

          > 不带别名的配置文件:ActionClassName-validation.xml 中的验证规则依然发生作用。可以把各个action 公有的验证规则配置在其中。需要注意:只适用于某一个Action 请求的验证规则,就不采取这种方法

    3.声明式验证框架的原理:

       > Struts2 默认的拦截器中提供了一个 validation 的拦截器

       > 每一个具体的验证规则都会对应具体的一个验证器。有一个配置文件,就是把验证规则名称和验证器关联起来了。实际验证的是那个验证器。该文件位于com.opensymphony.xwork2.validator.validators 下的default.xml 

    验证规则和验证器

     1 <!-- START SNIPPET: validators-default -->
     2 <validators>
     3     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
     4     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
     5     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
     6     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
     7     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
     8     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
     9     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    10     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    11     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    12     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    13     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    14     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    15     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    16     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    17     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    18     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    19 </validators>
    20 <!--  END SNIPPET: validators-default -->

      > 时序图

        

      >对应关系

      

    4.代码结构

      

     1 package com.jason.struts2.validation.app;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 
     5 public class TestValidation  extends ActionSupport{
     6 
     7         /**
     8      *  @Fields:serialVersionUID
     9      */
    10     private static final long serialVersionUID = 1L;
    11         int age;
    12 
    13         public int getAge() {
    14             return age;
    15         }
    16 
    17         public void setAge(int age) {
    18             this.age = age;
    19         }
    20         
    21         @Override
    22         public String execute() throws Exception {
    23             System.out.println("age:" + age );
    24             return SUCCESS;
    25         }
    26         
    27         
    28 }
    TestValidation
     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib prefix="s" uri="/struts-tags" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11 
    12     <s:form action="testValidation">
    13         <s:textfield  name="age" label="Age"></s:textfield>
    14         <s:submit></s:submit>
    15     </s:form>
    16 
    17 </body>
    18 </html>
    validation.jsp
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7  
     8  
     9      <!-- 配置国际化资源文件 -->
    10      <constant name="strut2.custom.i18n.resouce" value="i18n"></constant>
    11      
    12      <constant name="struts.action.extension" value="action,do,"></constant>
    13      <package name="default" namespace="/" extends="struts-default">
    14  <action name="testValidation" class="com.jason.struts2.validation.app.TestValidation">
    15               <result>/validation/success.jsp</result>
    16               <!-- 若验证失败,转向input -->
    17               <result name="input">/validation/validation.jsp</result>
    18           </action>
    19          
    20 
    21      </package>
    22      
    23      
    struts.xml
     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 
    11     <h4> sucecess page</h4>
    12 
    13 </body>
    14 </html>
    success.jsp
     1 <!DOCTYPE validators PUBLIC
     2         "-//Apache Struts//XWork Validator 1.0.2//EN"
     3         "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
     4 
     5 <validators>
     6     
     7     <!-- 针对于 age 属性进行验证 。基于字段的验证-->
     8      <field name="age">
     9          <field-validator type="int">
    10              <param name="min">20</param>
    11              <param name="max">50</param>
    12              <message>Age needs to be between ${min} and ${max}</message>
    13          </field-validator>
    14      </field>
    15 </validators>
    TestValidation-validation.xml
  • 相关阅读:
    Struts2框架详解
    Eclipse利用Axis2插件构建Web Service并测试
    解决JS中各浏览器Date格式不兼容的问题
    Struts2框架下表单数据的流向以及映射关系
    JMS总结
    第一次博客园
    微信OAuth2网页授权
    将List转换成DataTable
    对文件的读写操作
    Excel文件的导出操作
  • 原文地址:https://www.cnblogs.com/jasonHome/p/5918404.html
Copyright © 2011-2022 走看看