[原创]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 }
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>
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
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>
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>