[原创]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-all\struts-2.3.15.3\apps\struts2-blank\WEB-INF\classes\example\ 下的 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

时间: 2024-10-09 07:34:07

[原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理的相关文章

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签

通用标签和控制标签 第一部分:代码 //前端 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> 访问属性 <a href="<%=contextP

【web开发学习笔记】ibatis学习总结

ibatis学习总结 ibatis数据库配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <

【web开发学习笔记】Hibernate学习总结

hibernate学习笔记 学习笔记部分: 本部分的学习比较容易,代码比较全,也容易理解,可以说是一些记忆性质的东西. 本人在学习过程中没有自己在做笔记,只是参考了网上找的学习笔记,按照那个笔记学习和复习挺快的. 源码中有一些jar包缺失,我在自学的时候也整理了相关的jar包和软件,已经上传,祝大家学习快乐. 相关资源链接: 相关的数据库连接的资源: http://download.csdn.net/detail/licong_carp/7656601 相关的jar包文件: http://dow

[学习笔记] Sencha Cmd 学习笔记 Sencha Cmd是什么

本文地址: http://blog.csdn.net/sushengmiyan/article/details/38295575 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://w

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 看一下Sales_item类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_pr

iOS学习笔记---c语言学习第七天

结构体 结构体是一种自定义的数据类型 struct 结构体名 { 类型说明符  成员名: … 类型说明符  成员名: }: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { struct teacher{ char name[30]; char sex; int age; char course[30]; }; typedef struct teacher Teacher; Teacher c