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
优点:不存在编译,重用性高
缺点:如果文件过大,加载解析时间相对较长,只有常用验证规则,没有特殊验证规则
适合使用的地方:常用验证规则
一般情况下,是以声明式为主,以编程式为辅。