strut2验证之XML声明式文档验证


XML声明式文档验证

实现一个注册的验证逻辑:

package yzr.ValidateByXml;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.net.httpserver.Authenticator.Success;

public class RegisterAction extends ActionSupport {
	private String username;
	private String password;
	private String email;
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String RegisterMethod() throws Exception{
		
		return SUCCESS;
	}
}
struts配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
 <struts>
    <package name="login" extends="struts-default" namespace="/">
        <action name="RegisterRequest"  
                class="yzr.ValidateByXml.RegisterAction"   
                method="RegisterMethod"  >
            <result name="success" type="dispatcher">
                /register/registerResult.jsp
            </result>
            <result name="input" type="dispatcher">
            	/register/register.jsp
            </result>
        </action>
    </package>
 </struts>
在RegisterAction类的同路径下创建一个以Action类名为前缀+"-validationxml",比如在此案例中为RegisterAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 以下头信息来源于:xwork-core-2.3.1.1.jar/xwork-validator-1.0.3.dtd -->
<!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="username">
		<!-- validators,信息来源于:xwork-core-2.3.1.1.jar/com.opensymphony.xwork2/validator/validators/default.xml-->	
		
		<field-validator type="requiredstring">
			<message>姓名必填</message>
		</field-validator>
	</field>
	
	<field name="password">
		<field-validator type="requiredstring">
			<message>密码必填</message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression">^[0-9]{8}$</param>
			<message>密码必须是8位数字</message>
		</field-validator>
	</field>
	
	<field name="email">
		<field-validator type="requiredstring">
			<message>邮箱必填</message>
		</field-validator>
		<field-validator type="email">
			<message>邮箱必须符合合法的格式</message>
		</field-validator>
	</field>
	
</validators>  		

以这种xml配置文件的方式,在同一个Action类的请求过程中都会执行xml配置文件的验证过程。

下面实现根据具体业务逻辑方法的配置文件方式进行验证。

在Action类的同路径下创建 :Action类名+action请求名+“-validation.xml”;

在此案列中是RegisterAction-RegisterRequest-validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 以下头信息来源于:xwork-core-2.3.1.1.jar/xwork-validator-1.0.3.dtd -->
<!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="username">
		<!-- validators,信息来源于:xwork-core-2.3.1.1.jar/com.opensymphony.xwork2/validator/validators/default.xml-->	
		
		<field-validator type="requiredstring">
			<message>姓名必填[业务方法]</message>
		</field-validator>
	</field>
	
	<field name="password">
		<field-validator type="requiredstring">
			<message>密码必填[业务方法]</message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression">^[0-9]{8}$</param>
			<message>密码必须是8位数字[业务方法]</message>
		</field-validator>
	</field>
	
	<field name="email">
		<field-validator type="requiredstring">
			<message>邮箱必填[业务方法]</message>
		</field-validator>
		<field-validator type="email">
			<message>邮箱必须符合合法的格式[业务方法]</message>
		</field-validator>
	</field>
	
</validators>  		

在浏览器访问:


同样的,这样的方式也会被执行验证,并且是先执行总的验证过程,再执行每个业务逻辑方法的验证过程

总结:

    声明式验证的优先级高于编码式验证,当两者都存在时会先执行声明式验证过程,再执行编码式验证;

二种验证方式的适合地方,优点,缺点
编程式验证:
技术:java
优点:易读,自定义验证规则,相对灵活
缺点:常编译,重用性低
适合使用的地方:特定验证规则

声明式验证:
技术:xml
优点:不存在编译,重用性高
缺点:如果文件过大,加载解析时间相对较长,只有常用验证规则,没有特殊验证规则
适合使用的地方:常用验证规则


一般情况下,是以声明式为主,以编程式为辅。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值